geowifi

Search WiFi geolocation data by BSSID and SSID on different public databases.

953
95
Python

πŸ“‘πŸ’˜πŸŒŽ | geowifi

Search WiFi geolocation data by BSSID and SSID on different public databases.

geowifi

πŸ’Ύ Databases

Wigle Apple Google Milnikov
WifiDB Combain Freifunk Carte ❌ (Discontinued) OpenWifi

βœ”οΈPrerequisites


πŸ”‘ APIs and configuration file

The tool has a configuration file in the gw_utils folder called config.yaml. Each of the configuration parameters and how to obtain the necessary information is explained below:

  • wigle_auth:

In order to use the Wigle service it is necessary to obtain an API and configure the gw_utils/config.yaml file replacing the value of the β€œwigle_auth” parameter for the β€œEncoded for use” data provided by Wigle.

  • google_api:

In order to use the Google Geolocation Services it is necessary to obtain an API and configure the gw_utils/config.yaml file replacing the value of the β€œgoogle_api” parameter for the β€œAPI” provided. Google provides $200 of free monthly usage.

  • combain_api:

In order to use the Combain API it is necessary to obtain an API and configure the gw_utils/config.yaml file replacing the value of the β€œcombain_api” parameter for the β€œAPI” provided. Combain provides a free trial and paid plans.

  • no-ssl-verify:

Option to enable or disable the SSL verification process on requests.


πŸ› οΈ Installation

Use the package manager pip to install requirements.

python3 -m pip install -r requirements.txt

Docker

docker build -t geowifi:latest .

πŸ”Ž Usage

usage: geowifi.py [-h] [-s {bssid,ssid}] [-o {map,json}] identifier

Search for information about a network with a specific BSSID or SSID.

positional arguments:
  identifier            The BSSID or SSID of the network to search for.

options:
  -h, --help            show this help message and exit
  -s {bssid,ssid}, --search-by {bssid,ssid}
                        Specifies whether to search by BSSID or SSID (default: bssid)
  -o {map,json}, --output-format {map,json}
                        Specifies the output format for the search results (default: map)
  • Search by BSSID:
python3 geowifi.py -s bssid <input>
  • Search by SSID:
python3 geowifi.py -s ssid <input>

It is possible to export the results in json format using the -o json parameter and show the locations on html map using -o map.

🐳 Docker usage

docker run --rm geowifi:latest
  • Search by BSSID:
docker run --rm geowifi:latest -s bssid <input>
  • Search by SSID:
docker run --rm geowifi:latest -s ssid <input>

πŸ—ΊοΈ Map output example

Map output

πŸ’Ύ Json output example

[
  {
    "module": "google", 
    "bssid": "C8:XX:XX:XX:5E:45", 
    "latitude": 33.571844, 
    "longitude": -1XX.XXXXX97
  }, 
  {
    "module": "combain", 
    "error": "Not enough witooth"}, 
  {
    "module": "mylnikov", 
    "error": "Object was not found"
  },
  {
    "module": "vendor_check", 
    "vendor": "Cisco-Linksys, LLC"}, 
  {
    "module": "apple", 
    "bssid": "C8:XX:XX:XX:5E:45", 
    "latitude": 33.57198715, 
    "longitude": -1XX.XXXXX12}, 
  {
    "module": "wigle", 
    "bssid": "C8:XX:XX:XX:5E:45", 
    "ssid": "Vertigo", 
    "latitude": 33.60998154, 
    "longitude": -1XX.XXXXX22}, 
  {
    "module": "wifidb", 
    "bssid": "C8:XX:XX:XX:5E:45", 
    "ssid": "Vertigo", 
    "latitude": 33.6109, 
    "longitude": -1XX.XXXXX533
  }
]

πŸ“’ Mentions

  • This project uses some of the research and code used at iSniff-GPS.
  • Thanks to Micah Hoffman for his attention and answers to my questions.
  • Thanks to kennbro for lending me his scrupulous eyes to give me feedback.