>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicurezza
Python

Come trovare l'indirizzo fisico di un router tramite BSSID usando geowifi

Ogni volta che uno smartphone cerca una rete familiare, scandaglia le onde radio e vede dozzine di router intorno. Grandi aziende come Google e Apple raccolgono questi dati abbinati alle coordinate GPS da anni per determinare la posizione dei dispositivi in aree urbane dense senza aspettare i satelliti.

Di conseguenza, si è formata intorno a noi una mappa gigante di tutti i punti di accesso domestici e d'ufficio. Se metti le mani sull'indirizzo MAC di un router (BSSID) o su un nome di rete raro (SSID), puoi estrarre le sue coordinate fisiche in un paio di secondi.

geowifi

L'utility geowifi si occupa di questa routine. Invece di controllare manualmente una dozzina di servizi sparsi, invia query a tutti i database di geolocalizzazione Wi-Fi disponibili contemporaneamente.

Perché combinare tutti i database in un unico script

Ogni database raccoglie le coordinate a modo suo. Il servizio Wigle si basa su appassionati che girano per le città con gli scanner attivi. Il database di Apple è popolato da smartphone iOS, quello di Google da dispositivi Android.

Se cerchi un punto in un solo posto, c'è un'alta probabilità di non trovare nulla. I punti di accesso si spostano, appaiono in nuovi sviluppi, o scompaiono dagli elenchi pubblici. L'utility geowifi interroga fonti aperte e semi-chiuse:

  • Wigle
  • Apple Geolocation Services
  • Google Geolocation API
  • Mylnikov (mylnikov.org)
  • WifiDB
  • Combain
  • Freifunk Carte

Un dettaglio interessante: le query ad Apple qui funzionano senza registrazione e abbonamenti a pagamento, usando un'implementazione ispirata al progetto iSniff-GPS. Per Google e Wigle, avrai bisogno di chiavi API, ma hanno limiti gratuiti sufficienti per i compiti quotidiani.

Avvio rapido e configurazione

Il progetto è scritto in Python. Puoi eseguirlo localmente in un ambiente virtuale o tramite un container Docker.

Per il lavoro locale, avrai bisogno di git e Python 3:

git clone https://github.com/GONZOsint/geowifi
cd ./geowifi/
virtualenv geowifi
source geowifi/bin/activate
python3 -m pip install -r requirements.txt

Se non vuoi avere a che fare con l'ambiente Python, crea il container:

docker build -t geowifi:latest .

Configurazione API

Nella directory gw_utils c'è un file config.yaml. Qui configuri i token di accesso:

wigle_auth: "your_encoded_token"
google_api: "your_google_api_key"
combain_api: "your_combain_key"
no-ssl-verify: false

Per il lavoro base con i database aperti e Apple, le chiavi sono opzionali, ma con esse la percentuale di punti trovati è notevolmente più alta.

Come cercare le coordinate

L'utility accetta un identificatore di rete e un flag di tipo di ricerca: per BSSID (indirizzo MAC) o SSID (nome della rete).

Ricerca per indirizzo MAC del router:

python3 geowifi.py -s bssid C8:D7:19:XX:XX:XX

Ricerca per nome della rete:

python3 geowifi.py -s ssid "MyCoffeeShop_Free"

Di default, il programma genera una mappa HTML con marker provenienti da diversi provider di dati. Database diversi potrebbero restituire coordinate con una leggera dispersione, e una mappa visiva aiuta a capire l'area di copertura effettiva o l'edificio esatto.

Map output

Se l'output è necessario per automazioni successive o per passarlo a un altro script, basta aggiungere il parametro -o json:

[
  {
    "module": "google", 
    "bssid": "C8:XX:XX:XX:5E:45", 
    "latitude": 33.571844, 
    "longitude": -112.0495897
  }, 
  {
    "module": "vendor_check", 
    "vendor": "Cisco-Linksys, LLC"
  }, 
  {
    "module": "apple", 
    "bssid": "C8:XX:XX:XX:5E:45", 
    "latitude": 33.57198715, 
    "longitude": -112.0495812
  }, 
  {
    "module": "wigle", 
    "bssid": "C8:XX:XX:XX:5E:45", 
    "ssid": "Vertigo", 
    "latitude": 33.60998154, 
    "longitude": -112.0495922
  }
]

Oltre alle coordinate, l'utility identifica immediatamente il produttore dell'apparecchiatura di rete dal prefisso OUI dell'indirizzo MAC.

Dove questo torna utile

Lo strumento è stato creato per attività OSINT e ricognizione di rete, ma è utile anche in aree correlate:

  1. Forensics e analisi di dump di rete. Se il portatile sotto indagine ha conservato probe request o una cronologia di connessioni a reti Wi-Fi, puoi ricostruire il percorso approssimativo del dispositivo tramite BSSID.
  2. Audit di sicurezza e privacy. È utile controllare il proprio router domestico o aziendale. Spesso si scopre che un router spostato da un appartamento a una casa di campagna risulta ancora all'indirizzo vecchio nei database di Google o Apple.
  3. Geolocalizzazione di dispositivi IoT. Quando un dispositivo riporta solo l'elenco dei punti di accesso visibili, lo script converte questo elenco in coordinate geografiche comprensibili senza usare un modulo GPS.

Conclusione

geowifi è uno strumento compatto e pratico che risolve un compito specifico senza complessità inutili. Il codice è semplice, le dipendenze sono standard e la logica è trasparente. Se svolgi indagini OSINT, analizzi dump di traffico wireless, o semplicemente ti chiedi quanti dati geografici fuoriescono dai router Wi-Fi, aggiungi questa utility al tuo toolkit.

Progetti correlati