geowifi WiFi 地理位置信息查询工具技术分析

一、概述

1. 简介

A. 是什么

geowifi 是一个开源情报(OSINT)工具,用于通过 BSSID(基本服务集标识符)或 SSID(服务集标识符)查询 WiFi 网络的地理位置信息。该工具整合了多个公开的 WiFi 地理位置数据库,为安全研究人员、渗透测试人员和 OSINT 从业者提供便捷的查询接口。

B. 核心价值

  • 多数据源整合:同时查询多个 WiFi 地理位置数据库
  • 可视化输出:支持地图可视化展示查询结果
  • 灵活配置:支持 API 密钥管理和 SSL 验证配置
  • 易于部署:提供 Docker 和本地 Python 两种部署方式

C. 应用场景

  • 渗透测试中的物理位置侦察
  • 安全审计与无线网络分析
  • OSINT 调查中的地理位置定位
  • 无线网络安全研究

2. 技术特点

A. 支持的数据库

  • Wigle:全球最大的 WiFi 网络数据库
  • Apple:苹果地理位置服务
  • Google:谷歌地理位置服务
  • Milnikov:开源 WiFi 定位服务
  • WifiDB:社区 WiFi 数据库
  • Combain:商业定位服务
  • Freifunk Carte:德国开源网络地图

B. 技术栈

  • 编程语言:Python 3
  • 容器化:Docker
  • 输出格式:JSON、HTML 地图

二、系统架构

1. 架构设计

graph TB
    User[用户] --> CLI[命令行接口]
    CLI --> Config[配置管理]
    CLI --> Parser[参数解析器]
    Parser --> Search{搜索类型}
    Search -->|BSSID| Query[查询引擎]
    Search -->|SSID| Query
    Config --> API[API 密钥管理]
    Query --> Wigle[Wigle API]
    Query --> Google[Google Geolocation API]
    Query --> Apple[Apple Location API]
    Query --> Combain[Combain API]
    Query --> Mylnikov[Mylnikov API]
    Query --> WifiDB[WifiDB API]
    Query --> Freifunk[Freifunk API]
    Wigle --> Collector[结果收集器]
    Google --> Collector
    Apple --> Collector
    Combain --> Collector
    Mylnikov --> Collector
    WifiDB --> Collector
    Freifunk --> Collector
    Collector --> Output{输出格式}
    Output -->|JSON| Formatter[JSON 格式化]
    Output -->|地图| Mapper[地图生成器]
    Formatter --> Display[结果显示]
    Mapper --> Display

geowifi 系统架构图

2. 组件说明

  • CLI:命令行接口,负责用户交互
  • 配置管理:加载和解析 YAML 配置文件
  • 查询引擎:根据搜索类型分发查询请求
  • API 适配器:封装各数据库的 API 调用逻辑
  • 结果收集器:聚合多个数据源的查询结果
  • 输出格式化:将结果转换为指定格式

三、核心功能

1. 搜索功能

A. BSSID 搜索

BSSID(Basic Service Set Identifier)是 WiFi 接入点的 MAC 地址,格式为 XX:XX:XX:XX:XX:XX。

sequenceDiagram
    participant U as 用户
    participant C as CLI
    participant Q as 查询引擎
    participant W as Wigle
    participant G as Google
    participant A as Apple
    participant R as 结果收集器

    U->>C: 输入 BSSID
    C->>Q: 解析参数
    par 并行查询
        Q->>W: 查询请求
        Q->>G: 查询请求
        Q->>A: 查询请求
    end
    W-->>R: 返回结果
    G-->>R: 返回结果
    A-->>R: 返回结果
    R->>U: 聚合展示

BSSID 搜索流程时序图

B. SSID 搜索

SSID(Service Set Identifier)是 WiFi 网络的名称。部分数据库支持通过 SSID 进行模糊搜索。

2. API 配置

A. Wigle API

  • 用途:查询 WiFi 网络的地理位置信息
  • 获取方式:注册 https://wigle.net/account
  • 配置参数:wigle_auth(Encoded for use 认证字符串)

B. Google Geolocation API

C. Combain API

D. 配置文件结构

配置文件位于 gw_utils/config.yaml

wigle_auth: "your_encoded_auth_string"
google_api: "your_google_api_key"
combain_api: "your_combain_api_key"
no-ssl-verify: false

3. 输出功能

A. JSON 格式

结构化输出所有查询结果,便于程序处理:

[
  {
    "module": "google",
    "bssid": "C8:XX:XX:XX:5E:45",
    "latitude": 33.571844,
    "longitude": -1XX.XXXXX97
  },
  {
    "module": "wigle",
    "bssid": "C8:XX:XX:XX:5E:45",
    "ssid": "Vertigo",
    "latitude": 33.60998154,
    "longitude": -1XX.XXXXX22
  }
]

B. 地图可视化

生成 HTML 地图,在地图上标注所有查询到的 WiFi 位置。

四、部署与安装

1. 环境要求

A. 系统要求

  • Python 3.x
  • pip 包管理器
  • Git(可选,用于克隆仓库)

B. Windows 特殊说明

为正确显示 emoji 字符,建议安装 Windows Terminal。

2. 安装方式

A. 本地 Python 安装

graph LR
    A[克隆仓库] --> B[创建虚拟环境]
    B --> C[激活虚拟环境]
    C --> D[安装依赖]
    D --> E[配置 API]
    E --> F[运行工具]

本地安装流程图

详细步骤

# 克隆仓库
git clone https://github.com/GONZOsint/geowifi
cd ./geowifi/

# 创建虚拟环境
virtualenv geowifi

# 激活虚拟环境
source geowifi/bin/activate  # Linux/macOS
# 或
geowifi\Scripts\activate  # Windows

# 安装依赖
python3 -m pip install -r requirements.txt

B. Docker 部署

graph LR
    A[构建镜像] --> B[运行容器]
    B --> C[传入参数]
    C --> D[获取结果]

Docker 部署流程图

详细步骤

# 构建镜像
docker build -t geowifi:latest .

# 运行容器(搜索 BSSID)
docker run --rm geowifi:latest -s bssid <输入>

# 运行容器(搜索 SSID)
docker run --rm geowifi:latest -s ssid <输入>

五、使用示例

1. 基本用法

A. 按 BSSID 搜索

python3 geowifi.py -s bssid C8:XX:XX:XX:5E:45

B. 按 SSID 搜索

python3 geowifi.py -s ssid "TargetWiFi"

C. JSON 输出

python3 geowifi.py -s bssid C8:XX:XX:XX:5E:45 -o json

D. 地图输出

python3 geowifi.py -s bssid C8:XX:XX:XX:5E:45 -o map

2. Docker 用法

# 搜索 BSSID
docker run --rm geowifi:latest -s bssid <input>

# 搜索 SSID
docker run --rm geowifi:latest -s ssid <input>

六、技术分析

1. 架构优势

A. 模块化设计

  • 每个数据库都有独立的适配器模块
  • 易于添加新的数据源
  • 便于维护和测试

B. 异步处理

  • 支持并行查询多个数据库
  • 提高查询效率
  • 减少用户等待时间

C. 灵活配置

  • YAML 配置文件管理 API 密钥
  • 支持选择性启用数据库
  • SSL 验证可配置,适应不同网络环境

2. 数据源对比

数据库数据覆盖准确性API 限制认证方式
Wigle全球需要注册API Token
Google全球很高200 美元/月API Key
Apple全球未公开私有 API
Combain全球免费试用+付费API Key
Mylnikov主要是欧洲中等免费无需认证
WifiDB社区贡献中等免费无需认证
Freifunk德国免费无需认证

3. 安全考虑

A. API 密钥保护

  • 配置文件不应提交到版本控制
  • 建议使用环境变量
  • 定期轮换 API 密钥

B. 网络安全

  • 支持 SSL 验证禁用选项(不推荐)
  • 建议在受信任的网络环境中使用
  • 注意防范中间人攻击

C. 隐私保护

  • 查询的数据来自公开数据库
  • 工具本身不收集用户数据
  • 建议遵守当地法律法规

七、实际应用场景

1. 渗透测试

A. 物理位置侦察

在红队行动中,通过 WiFi 探测获取目标的 MAC 地址,然后查询地理位置信息,辅助物理渗透决策。

B. 无线网络测绘

绘制目标区域的 WiFi 网络分布图,识别潜在接入点和安全漏洞。

2. OSINT 调查

A. 人员定位

通过目标的 WiFi 网络信息,推断其可能的活动区域。

B. 事件溯源

在安全事件调查中,通过 WiFi 数据回溯攻击者的行踪轨迹。

3. 安全审计

A. 企业 WiFi 安全

评估企业 WiFi 网络的信息泄露风险,检查敏感信息是否被公开数据库收录。

B. 合规性检查

验证 WiFi 网络部署是否符合相关安全标准和隐私法规。

八、局限性

1. 数据准确性

  • 数据库信息的时效性问题
  • 部分数据库覆盖范围有限
  • 不同数据源结果可能不一致

2. API 限制

  • 部分服务需要付费
  • 查询频率可能受限
  • 部分服务已停止运营(如 OpenWifi)

3. 法律风险

  • 不同地区对 WiFi 探测的法律规定不同
  • 需要获得授权才能进行某些类型的查询
  • 数据使用可能受隐私法规限制

九、改进建议

1. 功能增强

  • 添加历史查询记录功能
  • 支持批量查询
  • 增加结果导出为 CSV 格式
  • 添加数据库更新时间显示

2. 性能优化

  • 实现查询结果缓存
  • 优化并行查询策略
  • 添加查询超时控制

3. 用户体验

  • 提供交互式配置向导
  • 添加进度显示
  • 支持配置文件模板生成

十、相关项目

geowifi 项目借鉴和使用了以下项目的部分研究成果和代码:

  • iSniff-GPS:WiFi 地理位置研究项目

十一、项目统计

  • Star 数量:1.1k
  • Fork 数量:102
  • Watcher 数量:19
  • 主要语言:Python(99.4%)
  • 贡献者:6 人
  • 最后更新:2024 年 12 月

参考资料

  1. geowifi GitHub 仓库
  2. Wigle 无线网络数据库
  3. Google 地理位置服务 API
  4. Combain 地理位置 API
  5. Mylnikov WiFi 定位服务
  6. iSniff-GPS 项目
最后修改:2026 年 01 月 18 日
如果觉得我的文章对你有用,请随意赞赏