SSID-only geolocation by co-occurrence. Given a list of WiFi SSIDs seen at one spot (e.g. an OSINT screenshot of a phone's network list), it produces a probability-ranked list of candidate locations using the WiGLE API.
- For each SSID, ask WiGLE how many distinct networks worldwide share that name
(
n_s). This drives IDF weightingw_s = log(N / n_s)— common names ("Dunkin' Donuts Guest") get ~0 weight, rare names dominate. - Download all coordinates for the rare SSIDs → seeds.
- Cluster the seeds into candidate regions.
- For each region, bounding-box query every SSID nearby to collect local AP coordinates (cheap, targeted, cache-friendly).
- Score each region with a noisy-OR co-occurrence KDE:
f_s(x) = 1 - prod_i (1 - K(d_i)),K(d) = exp(-d^2 / 2σ^2)S(x) = sum_s w_s · f_s(x)- Noisy-OR saturation means 5000 Dunkins at one place count once, not 5000×.
- Mean-shift refine each region to the local density mode, dedupe, rank.
pip install -r requirements.txtRun the synthetic self-test (no API key needed):
python seek.py --demoReal run — needs a free WiGLE account → API token:
cp .env.example .env # then fill in your WiGLE credentials
source .env
python seek.py --ssids "ATTj45TkcI" "Infusion2560" "CBCI-8058"Or read SSIDs from a file (one per line):
python seek.py --ssids-file networks.txt| Flag | Description |
|---|---|
--sigma |
Kernel bandwidth in metres (default 150) |
--rare-threshold |
n_s ≤ this counts as a rare locator SSID (default 100) |
--max-pages |
Max WiGLE pages per query, 100 results/page (default 10) |
--top-k |
Number of candidates to return (default 10) |
--min-support |
Min supporting SSIDs to keep a candidate (default 1) |
--probe-density |
Flag remote/sparse vs dense areas (1 extra query per candidate) |
--no-cache |
Bypass the on-disk response cache |
- WiGLE responses are cached on disk (
~/.cache/wigle_geolocate) so re-runs don't burn your API quota. - Your WiGLE credentials live in
.env, which is gitignored — never commit it.
For authorized OSINT research and educational use only. Respect WiGLE's terms of service and applicable privacy laws.