Сканер wi-fi сетей для командной строки

Выложил в сеть свой сканер wi-fi сетей, вдруг кому пригодится.

Использовать можно, к примеру, для определения географических координат по ближайшим wi-fi сетям совместно с сервисами wi2geo или skyhookwireless.

Работает (по крайней мере, должен) во всех версиях windows с NT ядром. Тестировалось на XP SP3 и Vista. В Vista+ используется Wi-Fi Native API, в XP и младше — опрос драйвера wi-fi карты через NDIS.

Буду рад отзывам и баг-репортам.

Исходники на C прилагаются, лицензия: BSD-like.

UPD: принимаются заявки на доработку.

UPD2: для тех, кто интересовался, зачем такая вещь может быть нужна: пример использования этого кода для определения текущего местоположения через сервис wi2geo, консоль/VBS (запускать run.bat; имейте в виду, в примере используется тестовый API ключ, который нужно обязательно заменить на свой).

UPD3: добавил модуль для получения списка wi-fi сетей в Python

UPD4: еще один пример, аналогичный первому, но для позиционирования используется сервис skyhookwireless. Имейте в виду, пример также с тестовым API ключом, не забудьте получить свой ключ и обновить его в исходниках прежде чем использовать их.

UPD5: исправил ошибку в сканере и примерах, из-за которой сканер не работал, если обнаруживалось более 10 сетей, спасибо, deniamnet :)

UPD6: уважаемая администрация wi2geo! Несколько идей для вашего сервиса:
  • Добавьте, пожалуйста, на labs. кнопку выхода из системы — если я хочу зайти под другим пользователем, мне нужно перезапускать браузер или чистить куки — это неправильно.
  • Не хватает формы, в которую можно было бы ввести координаты своей домашней точки доступа — поля lat, lon, mac и кнопка submit. А также — город, улица, дом, корпус и submit, адрес в координаты можно через яндексовский или гугловский геокодер преобразовывать.
  • И еще было бы здорово сделать API для массовой заливки точек. Положим, я пишу программу-клиент, которая будет работать на устройствах с GPS и wi-fi, и вполне может попутно собирать для вас точки (в чем я косвенно заинтересован, т.к. на тех устройствах, где нет gps, использовал бы ваш сервис). Сейчас мне бы пришлось заставлять её слать мне отчеты, а их — вручную заливать на ваш сервис. Неудобно.
  • Было бы здорово включить масштабирование карты на labs колесом мыши (нужно добавить всего одну строчку — map.enableScrollWheelZoom(); — в функцию load_map_all()).
Спасибо, что оперативно исправили найденные ранее ошибки :)
+47
24 мая 2009, 17:52
23
unxed 51,2

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

0
Yolenzo #
На мак будет?
+1
unxed #
Под linux можно использовать iwlist. Возможно, есть порт iwlist для маков. Если нет — придется портировать :)
0
daD #
gui — ap grapher. ихмо — лучший гуи сканер.
0
i0ngunn3r #
$ /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -s

не то?
ЗЫ: можно сделать симлинк, к примеру, в /usr/local/bin и юзать без этого жуткого пути к бинарнику.
0
deios #
нет, не то) 1. очень долго оправшивает, 2) во время опроса подвешивает весь wif-трафик
0
i0ngunn3r #
очень долго опрашивает — это да, плохо.
у меня вроде ничего не подвешивает, правда проверял с помощью ping -f. езернет (en0), естественно, не подключен.

Есть, кстати, другая одноименная утилитка airport, в портах находится. Сканит сети в разы быстрее.
0
deios #
на каком пробовали? 10.5 держится, 10.4 — сразу «до свидания» говорит
0
i0ngunn3r #
10.5.7, MB466
+1
minotawr #
Есть более продвинутый аналог чем ваш www.nirsoft.net/utils/wireless_net_console.html
0
unxed #
Исходников-то нету. А здесь — наглядная демонстрация способов получения информации о wi-fi сетях в разных версиях NT.
0
unxed #
Еще один нюанс: у меня нет ограничения XP SP2+. Теоретически, должно работать на любой NT, на практике было бы здорово, если бы кто-нибудь проверил на 2000 и XP SP1.
0
init0 #
А какой смысл работоспособности софтины под морально устаревшими ОСями?
+3
unxed #
Ну, например, когда пользователи морально устаревших ОС — твои клиенты, которые тебе платят — смысл как-то сразу проявляется.
0
GHS #
А что она еще умеет выводить, кроме мак-адреса сетевухи и строки «scan complete, found %i network(s)»?
0
unxed #
Мак адрес выводится не сетевухи, а найденной точки (точек) доступа.
Можно научить выводить любую информацию о сети, см. исходники.
0
egor1989 #
Поощряется

P.S>а зачем???
0
unxed #
Делал как раз для работы с wi2geo. Использовать сторонний сканер в своем проекте нельзя, к тому же, хотелось разобраться, почему те примеры, которые смог найти в сети, работают как правило либо в XP, либо в Висте (но не в обеих системах). Идею универсального алгоритма почерпнул в google gears (там сканирование wi-fi сетей используется для geolocation api, правда, реализация немного отличается).
0
egor1989 #
clever
0
deios #
а что за проект?)
0
unxed #
Это долгая история :)
Вкратце — gps-трекер для отслеживания местонахождения автомобилей с возможностью общения между их экипажами в jabber-конференции.
Основной разработчик — не я, от меня там только wi-fi позиционирование и тестирование.
+1
deios #
ну если что — обращайтесь) поможем, чем сможем)
0
unxed #
Вход в систему на labs. починили — спасибо :)
У меня есть еще несколько мыслей для вас — смотрите UPD6
0
deios #
Смотрю…

«Не хватает формы, в которую можно было бы ввести координаты своей домашней точки доступа — поля lat, lon, mac и кнопка submit. А также — город, улица, дом, корпус и submit, адрес в координаты можно через яндексовский или гугловский геокодер преобразовывать.»
Мы думали про это. Думаете много людей будет этим пользоваться? На самом деле если вы сейчас на основном сайте (правда, с установленным MagicScanner) просто перенесете себя в нужное место и нажмете «Отправить поправку», произодет тоже самое. Мы запомним и точку и координаты.

«И еще было бы здорово сделать API для массовой заливки точек. Положим, я пишу программу-клиент, которая будет работать на устройствах с GPS и wi-fi, и вполне может попутно собирать для вас точки (в чем я косвенно заинтересован, т.к. на тех устройствах, где нет gps, использовал бы ваш сервис). Сейчас мне бы пришлось заставлять её слать мне отчеты, а их — вручную заливать на ваш сервис. Неудобно.»
Расскажите подробней как вы это видите. Подумаем.
0
unxed #
По поводу много людей — а как вы думаете, почему веб-приложения для большинства предпочтительнее десктопных? Потому что не надо ничего себе устанавливать и настраивать. Так и здесь — программу для сбора точек поставят себе единицы, а свой домашний вайфайчик интересно будет попробовать вбить каждому — хотя бы чтобы убедиться, что сервис работает.

По поводу поправки — классная вещь, учту. В принципе, да, заменяет мою идею, но не все сообразят :) Я вот не сообразил :) А ваша задача ведь как можно больше точек собрать, нет? ;-)

Про API: ключ у меня уже есть, тот, что я для позиционирования использую. А с вашей стороны пусть будет некий URL, на который, скажем, можно POST'ом или GET'ом отправлять данные по найденным точкам. К примеру, так:
api2.wi2geo.ru/sendpoints?api_key=&lat=59.9200677&lon=30.4153651&points=00:C0:02:0B:6B:52,-59,00:22:15:8C:75:D7,-86,00:19:CB:D3:AA:FE,-90
Смысл запроса: я отчитываюсь о том, что моё приложение, посылающее запрос, обнаружило в точке с указанными координатами сигналы указанной мощности от вай-фай точек с указанными маками. А само приложение может быть каким угодно.
0
unxed #
Ну то есть тогда я, скажем, мог бы сделать сканер, который сразу заливает найденные точки вам, без необходимости вручную это делать. Вот.
0
deios #
Конечно, одна из наших задач — покрытие. Мы вроде сделали все, чтобы сообразили — сейчас выскакивает infowindow.

На самом деле такой API у нас есть:) его как раз Javascript использует на карте. подробнее лучше по скайпу: dei_os или по ICQ — 129843302. Все расскажу.
0
unxed #
А, еще одну штуку забыл. Напишите где-нибудь, в каких форматах все же поддерживаете файлы с точками для заливки. А то я бы, опять же, сделал в сканере выдачу сразу в нужном формате, чтобы вам было удобнее парсить. Или, если хотите, наоборот, можно сделать поддержку выдачи моего сканера. Она (выдача) выглядит так:
=== cut ===
wifilist v. 1.0.1a
scan complete, found X network(s)
XX:XX:XX:XX:XX:XX -XX
XX:XX:XX:XX:XX:XX -XX
XX:XX:XX:XX:XX:XX -XX
=== /cut ===
XX:XX:XX:XX:XX:XX — маки
-XX — уровни сигнала
0
deniamnet #
а у меня что-то «0 networks found», хотя через виндовый менеджер видно 12 сетей
XP SP 2
0
unxed #
Можете назвать модель сетевого адаптера?
Спасибо.
0
deniamnet #
Intel® PRO/Wireless 3945ABG Net
0
unxed #
Попробуйте, пожалуйста, новую сборку. Адрес тот же:
40in.spb.ru/wifilist/wifilist.zip
0
deniamnet #
спасибо, сейчас попробую
0
deniamnet #
работает, спасибо ))
0
unxed #
спасибо за тестирование)
0
deios #
«UPD6: уважаемая администрация wi2geo! У вас не работают ссылки «Зарегистрироваться / Восстановить пароль» на странице labs.wi2geo.ru/contribute.php, кроме того, пара логин/пароль с главного сайта проекта почему-то не работает на labs. Почините, пожалуйста. И еще было бы здорово включить масштабирование карты на labs колесом мыши (нужно добавить всего одну строчку — map.enableScrollWheelZoom(); — в функцию load_map_all()). „

Исправим, спасибо!
0
deios #
Ок. Посмотрим! Спасибо
+1
unxed #
Подтверждаю, проблемы с логином в labs исправили (для истории).

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.