Сканер 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()).
    Спасибо, что оперативно исправили найденные ранее ошибки :)
    Метки:
    Поделиться публикацией
    Комментарии 37
    • 0
      На мак будет?
      • +1
        Под linux можно использовать iwlist. Возможно, есть порт iwlist для маков. Если нет — придется портировать :)
        • 0
          gui — ap grapher. ихмо — лучший гуи сканер.
          • 0
            $ /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -s

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

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

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

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

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

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

                                Про 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
                                  Ну то есть тогда я, скажем, мог бы сделать сканер, который сразу заливает найденные точки вам, без необходимости вручную это делать. Вот.
                                  • 0
                                    Конечно, одна из наших задач — покрытие. Мы вроде сделали все, чтобы сообразили — сейчас выскакивает infowindow.

                                    На самом деле такой API у нас есть:) его как раз Javascript использует на карте. подробнее лучше по скайпу: dei_os или по ICQ — 129843302. Все расскажу.
                                  • 0
                                    А, еще одну штуку забыл. Напишите где-нибудь, в каких форматах все же поддерживаете файлы с точками для заливки. А то я бы, опять же, сделал в сканере выдачу сразу в нужном формате, чтобы вам было удобнее парсить. Или, если хотите, наоборот, можно сделать поддержку выдачи моего сканера. Она (выдача) выглядит так:
                                    === 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
                        а у меня что-то «0 networks found», хотя через виндовый менеджер видно 12 сетей
                        XP SP 2
                        • 0
                          Можете назвать модель сетевого адаптера?
                          Спасибо.
                        • 0
                          Попробуйте, пожалуйста, новую сборку. Адрес тот же:
                          40in.spb.ru/wifilist/wifilist.zip
                          • 0
                            спасибо, сейчас попробую
                            • 0
                              работает, спасибо ))
                              • 0
                                спасибо за тестирование)
                          • 0
                            «UPD6: уважаемая администрация wi2geo! У вас не работают ссылки «Зарегистрироваться / Восстановить пароль» на странице labs.wi2geo.ru/contribute.php, кроме того, пара логин/пароль с главного сайта проекта почему-то не работает на labs. Почините, пожалуйста. И еще было бы здорово включить масштабирование карты на labs колесом мыши (нужно добавить всего одну строчку — map.enableScrollWheelZoom(); — в функцию load_map_all()). „

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

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