Skip to content

engineer1469/WifiSeeker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WifiSeeker

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.

How it works

  1. For each SSID, ask WiGLE how many distinct networks worldwide share that name (n_s). This drives IDF weighting w_s = log(N / n_s) — common names ("Dunkin' Donuts Guest") get ~0 weight, rare names dominate.
  2. Download all coordinates for the rare SSIDs → seeds.
  3. Cluster the seeds into candidate regions.
  4. For each region, bounding-box query every SSID nearby to collect local AP coordinates (cheap, targeted, cache-friendly).
  5. 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×.
  6. Mean-shift refine each region to the local density mode, dedupe, rank.

Install

pip install -r requirements.txt

Usage

Run the synthetic self-test (no API key needed):

python seek.py --demo

Real 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

Useful flags

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

Notes

  • 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.

Disclaimer

For authorized OSINT research and educational use only. Respect WiGLE's terms of service and applicable privacy laws.

About

Find geolocation from list of nearby WiFi networks

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages