进阶社工

news/2025/1/26 18:45:06/文章来源:https://www.cnblogs.com/lordtianqiyi/p/18692049

进阶社工

近日无聊,看了一道社工题,如下:寻找拍照者所在的位置 xx省xx市xx县xx路口/与xx路口交汇处

你猜猜这是哪?

传统社工的思路

  1. 先根据车牌号 大致定位到 湖南省郴州市。
  2. 接下来通过抖音/大众点评/美团 搜索郴州市所有的银行/酒店,根据银行/酒店的外观进行一步步筛选,最后定位到具体位置。

传统社工显然纯纯体力活,非常浪费时间和精力,这里我无意中看到一篇进阶社工的文章,来介绍一下。

进阶社工

进阶社工使用到了一款叫做 《EasyPoi百度地图版》的工具,这款工具可以导出这个城市所有银行的地理位置信息,包括经纬度等信息

https://github.com/soaringsoul/easypoi

image-20250126175429092

如下:

image-20250126175548344

那我们就可以先检索这个城市的所有酒店的经纬度,再检索这个城市的所有酒店的经纬度,最后根据银行与酒店的距离进行筛选。

脚本如下:

import xlrd
import math# 计算两个经纬度之间的距离
def calc_distance(lat1, lon1, lat2, lon2):# 计算两个经纬度之间的距离# 公式参考:https://blog.csdn.net/jia20003/article/details/85214755EARTH_RADIUS = 6378.137  # 地球半径rad_lat1 = math.radians(lat1)rad_lat2 = math.radians(lat2)delta_lat = math.radians(lat2 - lat1)delta_lon = math.radians(lon2 - lon1)a = math.sin(delta_lat / 2) * math.sin(delta_lat / 2) + math.cos(rad_lat1) * math.cos(rad_lat2) * math.sin(delta_lon / 2) * math.sin(delta_lon / 2)c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))distance = EARTH_RADIUS * creturn distance# 读取excel中的经纬度信息
def read_excel(file_name):# 打开Excel文件workbook = xlrd.open_workbook(file_name)# 获取所有sheet#sheet_name = workbook.sheet_names()# 根据sheet索引或者名称获取sheet内容sheet = workbook.sheet_by_name('poi数据')# 获取行数和列数rows = sheet.nrowscols = sheet.ncols# 读取经纬度信息data = []for i in range(rows):row_data = sheet.row_values(i)data.append(row_data)return data# 计算excel中所有经纬度之间的距离
# def calc_all_distance(data,data2):
#     #计算excel中所有经纬度之间的距离
#     min_distance=999999
#     min_list=[]
#     for i in range(1,len(data2)):
#         for j in range(1,len(data)):
#             # 获取两个经纬度
#             lat1 = float(data2[i][17])
#             lon1 = float(data2[i][16])
#             lat2 = float(data[j][17])
#             lon2 = float(data[j][16])
#             # 计算距离
#             distance = calc_distance(lat1, lon1, lat2, lon2)
#             if distance < min_distance:
#                 min_distance=distance
#                 min_name1=data[j][0]
#                 min_name2=data2[i][0]
#         list_data = [min_name2, min_name1, min_distance]
#         min_distance=999999
#         min_list.append(list_data)
#     sorted_list = sorted(min_list, key=lambda x: x[2])
#     fp = open("./filter.log","w",encoding="utf8")
#     for k in range(len(sorted_list)):
#         print('['+str(k)+']'+sorted_list[k][0]+'和'+sorted_list[k][1]+'两点之间的距离:'+str(sorted_list[k][2]*1000)+' m')
#         x = '['+str(k)+']'+sorted_list[k][0]+'和'+sorted_list[k][1]+'两点之间的距离:'+str(sorted_list[k][2]*1000)+' m'#         fp.write(x+"\n")
#     fp.close()def calc_all_distance(data,data2):#计算excel中所有经纬度之间的距离min_list=[]for i in range(1,len(data2)):for j in range(1,len(data)):# 获取两个经纬度lat1 = float(data2[i][17])lon1 = float(data2[i][16])lat2 = float(data[j][17])lon2 = float(data[j][16])# 计算距离distance = calc_distance(lat1, lon1, lat2, lon2)dis_m = distance * 1000if dis_m >= 100 and dis_m <= 200:min_name1=data[j][0]min_name2=data2[i][0]list_data = [min_name2, min_name1, distance]min_list.append(list_data)sorted_list = sorted(min_list, key=lambda x: x[2])fp = open("./filter.log","w",encoding="utf8")for k in range(len(sorted_list)):print('['+str(k)+']'+sorted_list[k][0]+'和'+sorted_list[k][1]+'两点之间的距离:'+str(sorted_list[k][2]*1000)+' m')x = '['+str(k)+']'+sorted_list[k][0]+'和'+sorted_list[k][1]+'两点之间的距离:'+str(sorted_list[k][2]*1000)+' m'fp.write(x+"\n")fp.close()
if __name__ == '__main__':# 读取excel中的经纬度信息data = read_excel('./酒店.xlsx')data2 = read_excel('./银行.xlsx')# 计算excel中所有经纬度之间的距离calc_all_distance(data,data2)

可以检索得到:

image-20250126175837895

事实上,如果可以的话,我们还可以引入第三个地理位置的经纬度,来再次进行筛选,或者我们也可以根据银行/酒店的名字、建筑规模来进行过滤。

一些不可忽视的问题

  • easypoi的神秘码需要充值才能使用。而且并不便宜。
  • 需要准确判断银行与酒店的距离才行,比如,我一开始以为这个银行与酒店最多50米远,没想到有124米的距离,这样的话,就会浪费了很多人力。
  • 再次使用easypoi的时候需要先删除 .rwb_soft\easypoi_baidu\tempdata\目录下的.csv文件才行
    image-20250126180435742

参考: https://fushuling.com/index.php/2023/04/23/das4-secret-of-bkfish出题笔记/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/876056.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

51单片机

51单片机的学习笔记环境配置 芯片选AT89C52 生成16进制文件,便于烧录 烧录:生成对应hex文件导入后,芯片型号为STC89C5RC。串口根据下载STC-ISP说明来操作即可,一般有CH340和PL2303两种。 下载后要重新按一下开关,冷启动void Delay(unsigned int x) //@11.0592MHz {unsign…

spark--快速入门指南

https://spark.apache.org/docs/latest/quick-start.html

第二轮easy~hard题目

题目1代码 #include<iostream> #include<vector> using namespace std; vector<int> num; int mybsearch(int l, int r, int x) {while (l < r) {int mid = (l + r )>> 1;if (num[mid] >= x) r = mid;else l = mid + 1;}return l; } int main() …

bioRxiv|L2G:一张GPU卡也能训的基因组学语言模型

预训练语言模型(如BERT、GPT等)在自然语言处理(Natural Language Processing, NLP)领域取得了显著进展,其在多种语言任务中的表现令人瞩目。这一成功激发了基因组学领域的研究者们尝试开发类似的基础模型(Foundation Models, FMs),以解决复杂的基因组学任务。然而,构建…

Java基础学习(十)

Java基础学习(十):集合 目录Java基础学习(十):集合概念数据结构泛型CollectionListArrayListLinkedListSetHashSetLinkedHashSetTreeSet 本文为个人学习记录,内容学习自 黑马程序员概念数组长度固定,不够灵活,因此出现了集合集合 vs 数组长度:数组的长度固定,集合长…

Java基础学习(十一)

Java基础学习(十一):常见算法 目录Java基础学习(十一):常见算法查找算法排序算法 本文为个人学习记录,内容学习自 黑马程序员查找算法七大查找算法:基本查找(顺序查找)、二分查找(折半查找)、插值查找、斐波那契查找、分块查找、数表查找、哈希查找基本查找核心:从…

[2025.1.26 MySQL学习] 存储引擎

存储引擎 MySQL体系结构图

范围修改查询问题

范围修改查询问题 http://www.nfls.com.cn:10611/up/paper/国家集训队2024论文集.pdf P63 引入 这部分作者定义了半群和幺半群来描述一般的线段树可以做到的结构半群:结合律幺半群:结合律、有幺元交换半群:结合律、交换律形式化问题:(以下是通俗易懂的版本)给定交换半群 …

实现超图S3M数据在Ceisum中的解析、加载

使用超图提供的S3M加载模块。参考文档:S3M_JS使用方法 1. 将项目的Cesium库的Build目录及其内容放在S3M_JS目录中,与S3M_module同级。2. 调用该模块解析、加载S3M数据 const layer = new S3MTilesLayer({context: window.viewer.scene._context,url }) window.viewer.scene.p…

Beyond Compare(文件比较工具) v5.0.5.30614 多语便携版

Beyond Compare是一款功能强大的文件和文件夹比较工具,它能够快速准确地比较文件之间的差异,并提供了一系列强大的功能和工具来帮助用户进行文件和文件夹的同步、合并和备份。 软件功能 - 文件和文件夹比较:Beyond Compare能够快速准确地比较两个文件或文件夹之间的差异,包…

使用EarTrumpet代替windows默认的音量调节功能

前言 https://github.com/File-New-Project/EarTrumpet Windows 默认的音量调节功能挺弱的,要分别调节各个应用的音量得进入二级菜单,麻烦得很 有了这个功能就很方便了 截图安装 老规矩,Github、Microsoft Store、choco、scoop都行 我选的是 scoop 扩展:替换系统的音量控制…

JS-43 document对象_方法/创建元素

document创建元素:createElement(创建元素)createTextNode(创建元素文本)createAttribute(创建元素的属性) 1、document.createElement()document.createElement方法用来生成元素节点,并返回该节点var newDiv=document.createElement(div); 2、document.createTextNode()…