Najděte se i bez GPS

Jak funguje určení polohy bez GPS, jen pomocí Wi-Fi? Špehuje vás Google?

Určení polohy je dnes v myslích uživatelů spojeno především se systémem GPS (a jeho konkurenty). Zkuste ale najít svoji polohu i na notebooku bez této vymoženosti. Možná se budete divit.

Už delší dobu nabízí Mapy Google určení vaší polohy – hodí se třeba v případě, že chcete najít něco zajímavého v okolí, nebo snadno naplánovat trasu. Můžete ji vyzkoušet na jakémkoliv moderním počítači s přístupem na maps.google.com. V levé části mapy, mezi prvkem pro ovládání pohybu na mapě a posuvníkem pro zvětšování použijte nenápadnou ikonku s kolečkem. Právě ta vyvolá funkci zjištující vaši polohu.

Prohlížeč se vás ale nejprve zeptá, jestli smí polohu sdělit. Není divu, automaticky poskytovaná poloha by byla skutečně nepříjemnou, a přitom účinnou šmírovací funkcí, kterou by ve svém počítači snesl je málokdo. Legálně by ji mohli utajeně využít snad jen reklamní systémy, které by poskytovaly lokální reklamy podle toho, kde zrovna sedíte u počítače. Pokud tedy funkci zjišťování polohy chcete povolit, dobře se podívejte, pro jaký web tak činíte. Kromě zmíněných googlovských map se hodí třeba na serveru Geocachng.com, kde mnohem rychleji najdete kešky ve vašem okolí a nemusíte kvůli tomu zapínat GPS a přepisovat souřadnice.

Rychle, ale nepřesně

Určení polohy bez použití GPS je samozřejmě známé už z mobilů. Ty využívají znalosti poloh vysílačů (BTS stanic) a mohou si dokonce díky použitým protokolům troufnout i na odhady vzdáleností od nich. Čím více BTS je v dosahu, tím přesnější je určení polohy – stačí najít průsečíky pokrytí.

Počítače ale přístup k BTS obvykle nemají, a tak je první metodou, která se dá použít vždy, hledání podle IP adresy. Samozřejmě jde vždy o adresu veřejnou, což znamená, že v případě, kdy je počítač za NATem, určuje tato metoda pouze polohu brány. Pomocí IP adresy si můžete zkusit zjistit adresu i vy – v databázi přidělených adres jsou totiž vždy uvedeny údaje o vlastníkovi. Mezi nimi je také korespondenční adresa, takže pak stačí jen použít vhodný přepočet na souřadnice.

Je jasné, že tato metoda má své limity. U velké části adres bude vždy uveden pouze jejich skutečný vlastník, nikoliv uživatel – získáte tedy adresu svého poskytovatele připojení. I tak se ale většinou trefíte minimálně do stejného města, i celorepublikoví provideři mívají dnes bloky adres rozepsané na pobočky. Metoda určení pomocí IP zcela selhává v případě připojení přes VPN, protože z principu funkce VPN vždy určí pouze adresu koncového počítače.

Klepněte pro větší obrázek
Určování polohy pomocí IP adresy má mnoho nedostatků. V Praze nesedíme, vede sem ale naše VPN

Z těchto důvodů se metoda určení polohy pomocí IP použije pouze v případě, že prohlížeč nebude mít nic lepšího k dispozici. Na druhou stranu si ji můžete vyzkoušet sami, a to bez dalších znalostí. Stačí, kdy v prohlížeči otevřete adresu en.utrace.de, kde se automaticky zobrazí vaše poloha pomocí IP adresy. Všimněte si, že v tomto případě se prohlížeč na nic neptá – na určení polohy pomocí vaší IP adresy se nijak nepodílí. Pokud chcete vědět, co veřejná adresa prozradí, zkuste www.ripe.net a do políčka pro vyhledávání zadejte IP adresu.

Pomalu a jistě

Notebooky (a nejen ty) mohou použít obdobnou metodu určení polohy jako mobily, místo sledování okolních BTS se však použije sledování okolních Wi-Fi sítí. Z hlediska samotného určení polohy je to jednoduché, problém je s relevancí údajů – zatímco všechny BTS jsou pod kontrolou patřičného operátora, Wi-Fi sítě žádný centrální registr nemají a mohou rychle vznikat i zanikat.

V rámečku v tomto článku najdete způsob, jakým se na polohu zeptá stránka prohlížeče. Na prohlížeči pak je volba toho, jak si s dotazem poradí. Momentálně nejrozšířenějším prohlížečem, který geolokaci zvládá, je Firefox 3.x, a tak se podíváme právě na něj.

Klepněte pro větší obrázek
Možnost automatického nalezení polohy nabízí i Geocaching.com

Pro určování polohy se používá databáze (přesněji řečeno API) Googlu, které je dobře zdokumentované a podle všeho má zaneseno nejvíce orientačních bodů. Pokud budete sledovat komunikaci vašeho počítače, zjistíte, že dotazy směřují na https://www.google.com/loc/json. Tuto adresu najdete i v podrobných nastaveních Firefoxu (about:config) v položce geo.wifi.uri.

Klepněte pro větší obrázek
Prohlížeč se před určením polohy vždy zeptá, zda to chcete dané stránce povolit

V dotazu směrem ke Googlu se posílá seznam všech Wi-Fi sítí v okolí – tedy jakýchkoliv, které dokáže Wi-Fi karta zachytit, bez ohledu na to, jestli se k nim dokáže připojit. U každé sítě se odešle MAC adresa, SSID (pokud je viditelné) a síla signálu. Nic dalšího se neposílá, komunikace je navíc šifrovaná. Google se podívá do svých databází a podle nich určí průnikem viditelných sítí nejpravděpodobnější polohu. Pokud se navíc objeví ve vašem dotazu nová síť, přidá ji do databáze i s pravděpodobným umístěním: přesně takto se databáze zvětšuje. Pokud tuto síť uvidí někdo další (a s trochu jinými ostatními sítěmi), zaměření se navíc zpřesní.

Budování od píky

S růstem databáze v pokrytých místech tedy nejsou potíže, je potřeba najít jen ta nová. První kostru sítě může vytvářet například známý Google Car při snímkování pro Streetview. To, že automobil zaznamenává i Wi-Fi sítě v okolí, ostatně Google nikdy netajil. Přesto neunikl tahanicím kvůli porušování soukromí: ukázalo se totiž, že zaznamenával všechna data, která se mu dostala na anténu: tedy nejen výše zmíněnou trojici údajů, ale i samotnou komunikaci. A ti, co nepoužívají šifrování, se pak divili…

Klepněte pro větší obrázek
Takto vypadá odchycený dotaz na určení polohy, všimněte si, že Firefox posílá i údaje o hodně slabých sítích

Dalším zdrojem dat jsou podle všeho i mobily, zejména ty s operačním systémem Android. Stačí použít aplikaci, která sleduje polohu a zároveň komunikuje se serverem Googlu (například oblíbený sledovač Google Latitude) – pokud při tom aplikace použije kombinaci GPS a okolních Wi-Fi sítí, databáze se opět vylepší nebo opraví.

Je zřejmé, že žádné „ruční“ zadávání do databáze Wi-Fi sítí není potřeba (což je příjemné) a že naopak není žádná možnost, jak vlastní Wi-Fi dlouhodobě ubránit před zaměřením (byť v databázi je jen její SSID a MAC adresa). Pokud si vytvoříte vlastní program komunikující s googlovským API, můžete dokonce zjistit, jestli je už vaše síť v databázi zanesena. Stačí poslat dotaz s jedinou zaměřenou sítí – tou vaší.

Klepněte pro větší obrázek
Google právě ohlásil nalezení polohy. Na ulici naše redakci sice nesídlí, ale do vyznačeného rozptylu se vejde dokonale

Tento postup má i jeden nepříjemný vedlejší efekt: pomocí stejné metody můžete také stopovat nějakou známou Wi-Fi síť, která mění polohu (třeba při stěhování). Potřebujete opět jen znát SSID a hlavně MAC adresu a zkoušet, jestli už Google vrátí novou polohu. Pokud se tedy chcete přestěhovat a zároveň utajit své nové bydliště nebo pracoviště, nezapomeňte i na takovou drobnost, jakou je změna MAC adresy vašeho Wi-Fi routeru. To ale může být problém; zatímco změna MAC pro WAN je samozřejmostí, u MAC pro vnitřní Wi-Fi síť to tak snadné není. Takže vás vaše dokonalé soukromí možná bude stát nakoupení nového zařízení. To ale není ve světě bezdrátových spojů nic nového.

Webovou aplikaci VidímRoutery Alpha#1, která umí tímto způsobem sledovat routery na základě MAC adresy, vyzkoušejte na smetiste.tucnacek.cz.

Dalším problémem, který může časem nastat, je záměrné poškození databáze. Automatické budování a zpřesňování zároveň poskytuje případným útočníkům možnost cíleně „zfalšovat“ polohy. Google na druhou stranu nikde nepublikoval algoritmy, kterými se úpravy databáze řídí, a tak by útočníci museli po začátek zkoušet hrubou sílu – což není v době botnetů nic nemožného. Doufejme, že podobné pokusy zůstanou jen v rovině čistě akademické a užitečná funkce jimi nebude zničena. To ale bude platit jen do okamžiku, než někdo vymyslí, jak narušením geolokace pomocí Wi-Fi vydělat peníze.

Geolokace na vlastní kůži

Pokus se trochu vyznáte v javascriptu, můžete si pokročilou geolokaci vyzkoušet sami. Funkcí, která vše zařídí, je navigator.geolocation.getCurrentPosition().Pokud vše funguje, zbývá skutečně jen „rozluštit“ vrácený výsledek, o což se může starat jednoduchá funkce, která zpracuje složky coords.latitude, coords.longitude a coords.accuracy. Základní kus kódu (bez kontrol chyb) je pak opravdu jednoduchý:

<script>
function vypis(poloha){
document.write("Lat " + poloha.coords.latitude);
document.write("<br>Long " + poloha.coords.longitude);
document.write("<br>Přesnost " + poloha.coords.accuracy);}

navigator.geolocation.getCurrentPosition(vypis);

</script>

Pokud chcete přidat i odkaz do mapy, stačí vytvořit ze souřadnic odkaz na adresu maps.google.com/maps?q=latitude longitude

Tento jednoduchý skript si můžete vyzkoušet na stránce pavel.nygryn.net/poloha.html.

Klepněte pro větší obrázek

Článek vyšel v časopise Computer č. 23/10, který je v tuto chvíli na stáncích, případně si jej můžete zpětně objednat za 24,50 Kč z archivu Computeru.

Diskuze (23) Další článek: Exkluzivně: novinky Vodafone pro neomezené volání

Témata článku: , , , Případný útočník, Nová síť, Jednoduchá funkce, Síla signálu, Vedlejší efekt, Reklamní systém, Nákup