Search WiFi geolocation data by BSSID and SSID on different public databases.
Wigle | Apple | Milnikov | |
---|---|---|---|
WifiDB | Combain | Freifunk Carte | ❌ (Discontinued) OpenWifi |
- Python3.
- In order to display emojis on Windows, it is recommended to install the new Windows terminal.
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:
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.
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.
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.
Option to enable or disable the SSL verification process on requests.
Use the package manager pip to install requirements.
python3 -m pip install -r requirements.txt
docker build -t geowifi:latest .
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 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>
[
{
"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
}
]
- 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.