Wednesday, March 7, 2012

Определите свое местоположение по WiFi сети http://habrahabr.ru/blogs/linux/116575/


Определите свое местоположение по WiFi сети

Простой скрипт. Определяет местоположение. Вы должны работать через Wifi.


iwlist wlan0 scan | sed -n 's/.* Address: //p;T;s/ //g;q' |
sed 's/.*/{version:1.1.0,host:maps.google.com,request_address:true,address_language:'${LANG/.*/}',wifi_towers:[{mac_address:"&",signal_strength:8,age:0}]}/' |
curl -sX POST -d @- www.google.com/loc/json |
sed -e 'h;s/.*latitude":\([^,]*\).*/\1/;G;s/\n[^\n]*longitude":\([^,]*\).*/,\1\n/;s|^|http://maps.google.com/maps?q=|;x;s/[,{]/\n/g;s/["}]//g;s/:/\t/g;s/\n//;G'

Не забудьте поставить curl.

В моем случае правильно определил город и улицу, ошибся с номером дома на 4.

Как это работает? Google собирает информацию о том, где расположены какие точки доступа (по MAC).
Первая часть (iwlist wlan0 scan | sed -n 's/.* Address: //p;T;s/ //g;q' ) — это просто определение мака.
+55
31 марта 2011, 22:03
136

комментарии (30)

+5
Deeman31 марта 2011, 22:14#
Работает, причём отлично. Интересно, сколько человек подумали о том, чтобы выполнить этот скрипт на чьем-нибудь удаленном компьютере? :)
+1
bondbig31 марта 2011, 22:21#
Ошибся на километр. Хотя я с айфоном и андроидом через свою сеть выхожу на гуглокарты и прочие гуглосервисы уже пару лет как. И роутер вайфай тот же.
+1
snizovtsev31 марта 2011, 22:28#
Работает на ура. В моем случае погрешность получилась всего в 60м (соседний дом).
+2
DmZ31 марта 2011, 22:37#
Не обязательно работать через WiFi. Просто нужно иметь MAC-адреса близлежащих сетей. Точность определения сильно зависит от того гуляли ли люди с включенными гугломапсами и GPS возле этих сетей, или оставляли свои точные координаты в сервисе Location (естественно с включенным WiFi).
0
Sander8031 марта 2011, 22:45#
Точно. Спасибо за поправку!
0
vk21 апреля 2011, 09:31#
Вы хотите сказать, что тот же айфон посылает на google maps мак-адреса хотспотов, которые чувствует рядом?
0
DmZ1 апреля 2011, 09:48#
Про iPhone не уверен. Судя по документации Google, для iPhone приложение Google Локатор отдельное от гугломапсов и должно быть установлено отдельно из AppStore. Для Androida оно встроенное в гугломапсы.
Если оно включено или пользователь нажал My location в гугломапсах — то поставили на карандаш.
+4
YasonBy31 марта 2011, 23:14#
<zanuda mode>
1. Запрос использует deprecated API, лавочку могут прикрыть в любой момент.
2. Использование прямых HTTP-запросов (не через API) запрещено правилами.
</zanuda mode>

Использовать такое в серьёзном проекте рискованно…
0
MigMit31 марта 2011, 23:57#
-bash: iwlist: command not found
0
Sander801 апреля 2011, 00:02#
если не ошибаюсь, то 
sudo apt-get install wireless-tools
или какой у вас дистрибутив?
0
Holms1 апреля 2011, 00:31#
а для MacOs такое есть?
0
Sander801 апреля 2011, 00:46#
я думаю, может сработать kismac — но output будет другой — нужно перелопачивать начало скрипта.
или вообще что-нибудь типа iwconfig
если сумеете подкорректировать, кидайте сюда
изменять нужно только первую строчку скрипта
у меня нигде рядом маков нет
+2
kav1 апреля 2011, 01:16#
Если на скорую руку, то:

ipconfig getpacket en1 | grep -Eo '([a-z0-9]{2}:){5}[a-z0-9]{2}' | sed 's/.*/{version:1.1.0,host:maps.google.com,request_address:true,address_language:'${LANG/.*/}',wifi_towers:[{mac_address:"&",signal_strength:8,age:0}]}/' | curl -sX POST -d @- www.google.com/loc/json

Где en1 — wifi интерфейс, у вас возможно en0, проверьте в ifconfig.
0
Holms1 апреля 2011, 01:23#
сработало :)
хотя погрешность большая
0
vk21 апреля 2011, 09:28#
Уж лучше ifconfig en1 + grep ether, причем тут getpacket :)
0
vk21 апреля 2011, 09:30#
Вопрос снят, чуть спутал сущности.
–1
a3x1 апреля 2011, 00:07#
А как такое же под виндой замутить?
0
Sander801 апреля 2011, 00:13#
+6
grayhex1 апреля 2011, 00:32#
под виндой же.
нам нужно простенько, нажал, глючит, но работает.
а то цигвин курить заставляют.
+3
legrus1 апреля 2011, 00:43#
Отлично, теперь, если утром я забыл где я, всегда можно набрать эту простую команду!
+5
Sander801 апреля 2011, 00:47#
по памяти :D
настоящий админ с любого бодуна набирает скрипт без ошибок ))
0
casualuser1 апреля 2011, 00:55#
если mac был склонирован, то результат может быть интересным =]
0
skobkin1 апреля 2011, 03:20#
Получается, что через палу кило, на другом берегу реки такой же MAC как у меня?? Непорядок!
0
Sander801 апреля 2011, 09:11#
кстати, по поводу точности
этот скрипт передает на google данные об одной wifi-точке 
если же собрать данные о нескольких и сравнительной силе сигналов — думаю, результат будет получше
0
ivanrt1 апреля 2011, 09:52#
Надо написать скрипт, который дает гуглу точки по очереди, смотрит полученые координаты, точность, усредняет с учетом силы сигналов, получает итоговые координаты и запрашивает адрес по координатам.
0
Sander801 апреля 2011, 10:14#
Даже не совсем так. 
Параметр wifitowers, передаваемый на Google, является массивом. Так что можно положиться на Google, главное — дать побольше данных.
Какая утилита нам может их все выдать? Может, aircrack-ng?
0
Sander801 апреля 2011, 10:20#
Чушь говорю. Нужно только получше парсить iwlist.
Надо попробовать что-нибудь собрать
НЛО прилетело и опубликовало эту надпись здесь
0
Sander801 апреля 2011, 11:26#
а если поставить aircrack-ng и дать в вашем случае команду 
sudo airmon-ng start eth0, после чего использовать mon0 в качестве интерфейса для сканирования?

No comments:

Post a Comment