Pull to refresh

Comments 82

PinnedPinned comments

Всё это делается на ESP32-C5. Бонусом WiFi 5GHz

О помню тоже баловался подобным, только без отдельного железа, в виде приложения для Android на телефон.

Ещё делал похожий BLE сканер, с геопозиционированием.

Но вы упираетесь в ограничения Android. Вы не можете просто так взять и поделать что угодно агрессивное в wi-fi/BT, что вам не позволит OS со своими лимитами.

По вопросу в конце темы можно посмотреть на arduino giga wifi. Насчёт gnss не уверен, зато всего остального довольно много, МК STM32H7

Вардрайвинг изобретен много лет назад. Как лаптоп решениями, так и телефонными - тот же Вигл :)

В соло, без комьюнити рисовать карту - утопия.

Нынче делать какое-то такое приложение на микроконтроллере просто глупо. 

Вам не приходила в голову мысль, что все это занятие, что описано в статье - просто бессмысленно и глупо?))

Да, бессмыссленно и безполезно. Не выгодно. Одни расходы.

Но это же жутко интересно! Искренне завидую автору, как он занимается этим бесполезным занятием, читаю с удовольствием)

Почему бесполезная, если к этому добавить проверку на открытую сеть и попытку к ней подключиться и получить какие-то данные, то можно собрать точки бесплатного интернета. Ещё как идея, можно проверять сеть на простые пароли по словарю.

идея - бесполезная.

Бесполезной она может быть для общества, желающего реализовать её с целью извлечения прибыли. Для другой части общества (включая автора идеи) она полезна в качестве обучающего проекта. Но оценка идеи появляется, только когда она становится оформленой и выложенной в общество. В остальных случаях она так и остаётся частью процесса обучения лично автора. Главное, чтобы авторы не принимали её на свой счёт и продолжали заниматься интересующим их делом.

Гугл и так все то получает, если это не запрещено в настройках Settings / Location / Google Location Sharing.

Даркнету это тоже не нужно т.к. уже лет 20 примерно есть полностью волонтерские движухи по сканированию огромных территорий, заканчивающиеся выкладкой даты в централизованную базу и предоставлением доступа через API. Это все счастье валяется в сети бесплатно. Вот так, например, выглядит вайфайная Москва на картах Wigle .

Я решил исследовать окрестности города на наличие источников WiFi излучения.

старому доброму wardriving уже более 20 лет как. помню статьи в журнале ][kep Там конечно обычно что то с внешней антенной для дальности , всякие малины, кэши и хеши.

bluetooth эфир гораздо разнообразнее

любая из многочисленных "альтернатив flipper" на esp32 тоже предоставляет много вариантов для копания с wifi. Самое забавное что даже к flipper полюбили подключать внешний модуль на esp32 для работы с wifi

Ну не знаю . У меня Москва примерно так:

Это меньше, чем в каком-нибудь Сан Франциско, но явно не ноль. Кто-то бродит там с этой программой, сканирует что-то.

В Питере, кстати, по результатам сканирования получились какие-то странные "круги на полях":

Я глянул эти вайфайные круги на обычном спутнике. Там на замле физически находится какая-то круглая фигня диаметром несколько сот метров. Раз, два.

У меня был проект WiFi на транспорте в г.Томск. Я собирал мак адреса сканируя эфир WiFi роутерами и скалдывал в БД. Позднее сделал систему отслеживания автобусов по радиоэфиру, и прикрутил к 2гис. Это не бесполезное занятие, а просто не дооценённая идея до которой еще не дошли массы. Если дело в экономике и дальше так пойдёт, то глонасс скорее всего прикажет долго жить, потребуются альтернативы, и ваши труды не пропадут даром, можете не сомневаться. Там человек выше советовал ESP32-c5, вполне дельное замечание. Если перенесёте проект на эту платформу, и дадите гитхаб ссылку, буду признателен.

Приложение для мобилки интересная тема. Надо бы собрать. Сканить эфир, собирать MAC + геотеги и отправлять на свой сервер. Займусь пожалуй на досуге, всё для этого есть.

Всё это делается на ESP32-C5. Бонусом WiFi 5GHz

Причём есть куча готовых решений. (я про код, если что).
Но пройти пусть самому, это конечно интересней.
Как по мне, идея - бесполезная. Но как пет-проект, вполне.

Почему бесполезная, если к этому добавить проверку на открытую сеть и попытку к ней подключиться и получить какие-то данные, то можно собрать точки бесплатного интернета. Ещё как идея, можно проверять сеть на простые пароли по словарю.

Кажется, вы сейчас предлагаете вторгаться в чужие сети и незаконно использовать их ресурсы.

Про незаконное использование ресурсов это вы придумали. Например, мне было бы просто интересно собраться статистику сетей just for fun без намерения их как-то использовать, лишь чисто научный интерес.

А потом продать накопленную информацию в Даркнете или гуголю для более точного A-GPS/Y-GPS. Или нет? Тогда, зачем лично вам вся эта собранная информация? Мне действительно интересно.

Гугл и так все то получает, если это не запрещено в настройках Settings / Location / Google Location Sharing.

Даркнету это тоже не нужно т.к. уже лет 20 примерно есть полностью волонтерские движухи по сканированию огромных территорий, заканчивающиеся выкладкой даты в централизованную базу и предоставлением доступа через API. Это все счастье валяется в сети бесплатно. Вот так, например, выглядит вайфайная Москва на картах Wigle .

Это все счастье валяется в сети бесплатно. Вот так, например, выглядит вайфайная Москва на картах Wigle .

Красивое! /s

зачем лично вам вся эта собранная информация?

Например, сделать анализ разных частей города или городов между собой и написать статью на хабре, если что-то интересное из этого получится.

идея - бесполезная.

Бесполезной она может быть для общества, желающего реализовать её с целью извлечения прибыли. Для другой части общества (включая автора идеи) она полезна в качестве обучающего проекта. Но оценка идеи появляется, только когда она становится оформленой и выложенной в общество. В остальных случаях она так и остаётся частью процесса обучения лично автора. Главное, чтобы авторы не принимали её на свой счёт и продолжали заниматься интересующим их делом.

Как по мне, идея - бесполезная. 

Сейчас много самокатов (автомобилей) на прокат.
Их сервера могут находить отдельные самокаты по списку WiFi SSID которые их окружаю.

Вы самокаты или автомобили сдаёте в аренду?

Я работал в яндекс.драйв (каршеригн 16k машин) и помню, что они делали навигацию по окружающим сетям.

У меня был проект WiFi на транспорте в г.Томск. Я собирал мак адреса сканируя эфир WiFi роутерами и скалдывал в БД. Позднее сделал систему отслеживания автобусов по радиоэфиру, и прикрутил к 2гис. Это не бесполезное занятие, а просто не дооценённая идея до которой еще не дошли массы. Если дело в экономике и дальше так пойдёт, то глонасс скорее всего прикажет долго жить, потребуются альтернативы, и ваши труды не пропадут даром, можете не сомневаться. Там человек выше советовал ESP32-c5, вполне дельное замечание. Если перенесёте проект на эту платформу, и дадите гитхаб ссылку, буду признателен.

Всё это делается на ESP32-C5

Или RTL8720DN, что даже лучше.

О помню тоже баловался подобным, только без отдельного железа, в виде приложения для Android на телефон.

Ещё делал похожий BLE сканер, с геопозиционированием.

Да. И это самое правильное решение.

Нынче всю электронику выгоднее проще и дешевле делать на модулях c Embedded Linux внутри с OS Android. Сейчас всё в смартфоне! Люди не хотят носить с собой ничего электронного, кроме своего смартфона.

Нынче делать какое-то такое приложение на микроконтроллере просто глупо. Вы 80% времени потратите на поиск ошибок в цепи электропитания на PCB и 20% времени останется на авральную разработку кода прошивки самого приложения. Разумнее просто взять смартфон и написать приложение для смартфона.

Реалии таковы, что умение программировать user-space приложения под Android на Kotlin или iOS на порядок эффективнее, чем умение программировать System Software для микроконтроллера на Си.

Но вы упираетесь в ограничения Android. Вы не можете просто так взять и поделать что угодно агрессивное в wi-fi/BT, что вам не позволит OS со своими лимитами.

Как будто нейросеть ответила.

Нынче делать какое-то такое приложение на микроконтроллере просто глупо. 

Вам не приходила в голову мысль, что все это занятие, что описано в статье - просто бессмысленно и глупо?))

Да, бессмыссленно и безполезно. Не выгодно. Одни расходы.

Но это же жутко интересно! Искренне завидую автору, как он занимается этим бесполезным занятием, читаю с удовольствием)

Реалии таковы, что умение программировать user-space приложения под Android на Kotlin или iOS на порядок эффективнее, чем умение программировать System Software для микроконтроллера на Си.

Ну не могу успокоится))

Я уже много лет просто мечтаю запрограммировать микроконтроллер на Си, и желательно на голом железе! Я даже купил их парочку, но все никак не найду время...

 мечтаю запрограммировать микроконтроллер на Си

Вот есть методичка по настройки окружения разработчика

Настройка ToolChain(а) для Win10+GCC+С+Makefile+ARM Cortex-Mx+GDB
https://habr.com/ru/articles/673522/

Я воспринял этот комментарий как критику автора в стиле "не надо заниматься этой ерундой, проще купить готовую платформу")

Вардрайвинг изобретен много лет назад. Как лаптоп решениями, так и телефонными - тот же Вигл :)

В соло, без комьюнити рисовать карту - утопия.

А почему не простенькое приложение на телефон?

Если бы я умел программировать под смартфоны, то так и сделал бы.

К стати, есть ли инструкция про то как написать консольное Andriod приложение на чистом Си? Где брать toolchain, брать SDK?

Нет. Наверно потому что под Андроид не на Си пишут.

Это из-за моды какой-то?
Компьютер это универсальный вычислитель, значит должен быть способ cross компиляции приложений из Win для Andriod.

 под Андроид на Си не пишут.

Это противоречит законам физики ?

Дорого и долго, только и всего. Готовых популярных решений нет.

По вопросу в конце темы можно посмотреть на arduino giga wifi. Насчёт gnss не уверен, зато всего остального довольно много, МК STM32H7

Да. https://wigle.net/ ничего не показывает про Москву

Он в России частично попадает под блокировку РКН. Сайт показывается, карта нет.

Стартануло у меня с LA и показывало тепловую карту. Стал менять масштаб, чтобы найти свой город на другом континенте - стало показывать DAILY LIMIT как на картинке выше. И даже если вернуться в LA. Ещё требует настойчиво залогиниться. Нахожусь не в РФ.

Ну не знаю . У меня Москва примерно так:

Это меньше, чем в каком-нибудь Сан Франциско, но явно не ноль. Кто-то бродит там с этой программой, сканирует что-то.

В Питере, кстати, по результатам сканирования получились какие-то странные "круги на полях":

У меня всё работает! (с)

А я вот опять открыл и вот опять, сначала показало а потом при зумауте сразу в лимит упало.

В Питере, кстати, по результатам сканирования получились какие-то странные "круги на полях":

Это работа радио электронной борьбы. Происходит подмена GPS координат на круги за пределами города. В Москве та же ситуация. GPS трэкеры рисуют круги над аэропортом Шереметьево.

Я глянул эти вайфайные круги на обычном спутнике. Там на замле физически находится какая-то круглая фигня диаметром несколько сот метров. Раз, два.

Это вытоптали роботы, следуя указаниям GPS! /s

Какая частота опроса окружения? И что самое важно как быстро вы ехали?)

Какая частота опроса окружения?

Раз в 2....4 секунды

И что самое важно как быстро вы ехали?)

Тестировал я из автобуса. Скорость была около 50 км в час.

По дороге до работы и обратно в SD карте оказалось 2k...3k точек доступа.

Это вы ещё pwnagotchi не видели

UFO landed and left these words here

Мне приходится эпизодически кататься на велосипеде

Сочувствуем.

Главное чтоб за шпиона не приняли. А то потом долго придется объяснять что это за устройство с проводочками...

Картина из далеких 90х. Нет не интернетов, не телефонов, ни даже нормальных магазинов с радиодеталями. Собрали с другом передатчик на 22.5 Мгц. Ну просто кварцевый резонатор такой был, другого не было) Мощность - милливат 100-300.

И еще собрали приемник, прямого преобразования. Схема очень простая, сигнал с антенны через фильтр подается на смеситель на двух встречно-параллельных диодах, гетеродин и УНЧ на трех транизисторах. Несмотря на простоту, чувствительность такого приемника очень высокая, доли микровольта.

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

Лет по 18 нам тогда было. На встречу идет бабушка и с интересом смотрит за нашими действиями. И спрашивает "А что это такое вы тут делаете?". Мы молчим, отмахиваемся. Бабушка не отстает "А я знаю, что вы тут делаете! Радиацию меряете!". Что мы ответили - не помню, но бабушка полностью уверовалась, что нас раскусила) И не отстает "Ну и как тут? Нормально?". Мы отвечаем - да-да, все в порядке) А потом бабушка вдруг - "Ну а вот в таком-то месте как?". Называет поселок неподалеку. А там вроде как ракетная часть стояла, ходили слухи, что и с ядерным оружием. Ну мы поддержали ее, ответив: "Да-да, там повышенная" )))

Да, Охотно верю.

Я отлаживал высокоточную навигацию gnss rtk.

Выбирал для полигона детские карусели во дворах. Прямо по методичке от ublox.

Кто меня только не прогонял : охранник элитного ЖК, прохожие, детвора и даже студенты.

Вот отчёт про ту работу.

Высокоточная навигация GNSS RTK

https://share.google/gOOhTVjfO8zJj8L0U

Каждый смартфон делает всё то же самое, причем куда более эффективнее. Так как там есть богатое connectivity, чтобы сливать подготовленною карту wifi сетей в здание с пятью углами.

Имхо: esp32-* (я бы выбрал c3 на плате mini, просто потому что она прикольная, хоть и глючная), или сама по себе esp8266. Плюс любой жпс модуль с питанием от 5в. Приправить сверху esp-idf + freeRTOS., хотя в общем пойдет и ардуйня.

Питание от павербанка, запись данных - на внутреннюю флешку.

А ставить доп.контроллер, общаться с есп по юарт, писать на флешку... Слишком много лишних модулей.

Зы: курсач?

ЗЗЫ: ну и чисто красоты для - ищется что-то типа L80-R в smd исполнении, рисуется двусторонняя плата и получается девайс размером примерно 20х20х20мм с торчащим наружу usb-c

Зы: курсач?

Нет. Просто очередное устройство, чтобы тестировать кодовую базу.

Тогда я искренне не понимаю смысла использовать есп в виде uart-приставки. Или просто для фана?

Другого модуля у меня просто не было.

так модуль можно легко перешить с at прошивки на свою и избежать много лишнего

Ну да, выше уже сказали про C5, C6/C61 тоже подошло бы, там стандарты посвежее (мало ли кто гоняет точку доступа в AX only), есть BLE, не менее интересный, так как это всякие умные ТВ, холодильники, тостеры и прочее что не часто меняет свое местоположение. И еспшки это самодостаточные микроконтроллеры, зачем там STM и общение через AT команды?

Какая модуляция используется в WiFi?

OFDM, что даёт куда более интересные возможности чем просто сканить точки вокруг по RSSI:

https://www.youtube.com/watch?v=sXwDrcd1t-E

А почему тогда не ангар для SD?

В ангаре в котором стоит самолет обычно есть много свободного места.
А в гараже все въезжает впритык, как раз как при установке SD карты.

Ну, гараж разный бывает...

Нет, из интернетов.

Я решил исследовать окрестности города на наличие источников WiFi излучения.

старому доброму wardriving уже более 20 лет как. помню статьи в журнале ][kep Там конечно обычно что то с внешней антенной для дальности , всякие малины, кэши и хеши.

bluetooth эфир гораздо разнообразнее

bluetooth эфир гораздо разнообразнее

Достаточно подойти к витрине МВидео, например.

любая из многочисленных "альтернатив flipper" на esp32 тоже предоставляет много вариантов для копания с wifi. Самое забавное что даже к flipper полюбили подключать внешний модуль на esp32 для работы с wifi

Что мешает Яндексу в навигаторе сделать нечто аналогичное?

Там уже давно всё это есть.

Да ладно? Такое ощущение, что наоборот, стало хуже. То в Крым из Москвы за секунду улетишь, то в Москва реке плаваешь

А вы считаете, что там оно для клиентов?

Здравствуйте! Я из Яндекса. Спасибо, что поделились идеей. Пока не могу сказать, появится ли у нас такая возможность. Обсудим её, когда будем планировать будущие обновления.

Какая же это графомания...

PS Документ со схемой недоступен в гуглдоке.

Приложение для мобилки интересная тема. Надо бы собрать. Сканить эфир, собирать MAC + геотеги и отправлять на свой сервер. Займусь пожалуй на досуге, всё для этого есть.

Держите меня в курсе.

Мой гит в профиле. Сейчас экзамены по учёбе, не шибко хорошо со временем. Летом буду всеми интересности заниматься.

Конечно! Вот отформатированный текст промта для копирования в комментарий на Habr (или любой другой форум/блог). Он готов к вставке “как есть”.

**Промт для нейросети / ТЗ на Android-приложение для вардрайвинга (Wi-Fi + GPS + отправка на PHP/MySQL)**

Коллеги, прошу помощи в генерации кода. Нужно полное Android-приложение на **Java** (API 26+) со следующим функционалом. Готов принять код от нейросети или от разработчика по этому ТЗ.

## Что должно делать приложение

1. Сканировать Wi-Fi точки доступа (MAC, SSID).
2. Одновременно получать GPS-координаты.
3. Сохранять данные в локальную SQLite.
4. Отправлять накопленное на сервер (NGINX + PHP + MySQL).
5. Работать в фоне с уведомлением (Foreground Service).
6. Иметь два экрана: первый запуск (настройка) и главный (статус + лог).
7. В настройках можно менять страну/город/адрес сервера.

## Структура БД на сервере (MySQL)

```sql
CREATE TABLE `wifi_scans` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `city` VARCHAR(100) NOT NULL,
    `mac` VARCHAR(17) NOT NULL,
    `latitude` DECIMAL(10,8) NOT NULL,
    `longitude` DECIMAL(11,8) NOT NULL,
    `timestamp` BIGINT UNSIGNED NOT NULL,
    PRIMARY KEY (`id`),
    INDEX `idx_mac` (`mac`),
    INDEX `idx_city` (`city`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Экран первого запуска (FirstRunActivity)

Показывается один раз. Поля:

  • Страна (EditText)

  • Город (EditText)

  • IP или домен сервера (EditText, пример: 192.168.1.100 или myserver.com)

Кнопка «Сохранить и продолжить». После нажатия:

  • Сохранить в SharedPreferences

  • Запустить WifiScanService

  • Перейти на MainActivity

Главный экран (MainActivity)

Элементы сверху вниз:

  • Текстовое поле «Статус: сервер (адрес)»

  • Текстовое поле «Ожидает отправки: N»

  • Кнопка «Настройки» (открывает SettingsActivity)

  • Заголовок «Лог работы»

  • RecyclerView со списком логов (последние 50, обновление каждые 2 секунды)

Каждый лог: время (HH:MM:SS) + сообщение. Цвет текста:

  • INFO – чёрный

  • SUCCESS – зелёный

  • ERROR – красный

Экран настроек (SettingsActivity)

Полностью повторяет форму первого запуска (Страна, Город, Сервер). Кнопки:

  • Отмена (закрыть окно)

  • Сохранить (обновить SharedPreferences, перезапустить WifiScanService, закрыть окно)

Фоновый сервис (WifiScanService)

  • Foreground Service с уведомлением «Wi-Fi Scanner активен»

  • Интервал сканирования 10 секунд (жёстко в коде или из настроек)

  • Шаги каждые 10 секунд:

    1. Проверить разрешения (ACCESS_FINE_LOCATION)

    2. Включить Wi-Fi, если выключен

    3. wifiManager.startScan()

    4. Получить ScanResults

    5. Получить последнюю GPS-координату (LocationManager.GPS_PROVIDER)

    6. Если GPS = null — пропустить сканирование, записать в лог «Нет GPS сигнала»

    7. Для каждого ScanResult сохранить в локальную БД (таблица wifi_cache): MAC, SSID, latitude, longitude, timestamp, страна, город

    8. Записать в лог «Сохранено X сетей»

    9. Запустить UploadManager.tryUpload()

UploadManager

  • Отдельный поток (Executors)

  • Берёт из wifi_cache до 50 записей (getUnsentRecords)

  • Формирует JSON:

[{"city":"Moscow","mac":"AA:BB:CC:DD:EE:FF","latitude":55.7558,"longitude":37.6176,"timestamp":1734567890000}]
  • Отправляет POST на URL: {сервер}/api/upload_wifi.php

  • Заголовки: Content-Type: application/json, X-API-Key: your_secret_api_key_here

  • При HTTP 200 — удаляет отправленные записи из локальной БД

  • При ошибке — оставляет для следующей попытки

  • Логирует результат (успех / ошибка)

Локальная БД (DatabaseHelper)

Таблица wifi_cache

  • id (INTEGER PRIMARY KEY)

  • mac (TEXT)

  • ssid (TEXT)

  • latitude (REAL)

  • longitude (REAL)

  • timestamp (INTEGER)

  • country (TEXT)

  • city (TEXT)

Таблица logs

  • id (INTEGER PRIMARY KEY)

  • message (TEXT)

  • type (TEXT)

  • timestamp (INTEGER)

Методы

  • addWifiRecord(WifiRecord)

  • List getUnsentRecords(int limit)

  • deleteRecords(List)

  • addLog(String message, String type)

  • List getRecentLogs(int limit)

  • int getPendingCount()

Модели

WifiRecord(String mac, String ssid, double lat, double lng, long timestamp, String country, String city)
ScanLog(String message, String type, long timestamp) // + геттеры

PreferencesManager

SharedPreferences:

  • country

  • city

  • server_url

  • is_first_run (boolean)

  • scan_interval (int, секунды, опционально)

  • upload_batch_size (int, опционально)

Методы: set/get для каждого, hasAllSettings()

PHP-скрипт (сервер)

Файл: /api/upload_wifi.php

Логика:

  1. Проверить метод POST

  2. Проверить заголовок X-API-Key

  3. Прочитать JSON из php://input

  4. Подключиться к MySQL

  5. Для каждой записи выполнить INSERT IGNORE (или ON DUPLICATE KEY UPDATE)

  6. Вернуть JSON: {"success": N, "total": M, "errors": []}

Разрешения в AndroidManifest.xml

  • ACCESS_FINE_LOCATION

  • ACCESS_COARSE_LOCATION

  • ACCESS_WIFI_STATE

  • CHANGE_WIFI_STATE

  • INTERNET

  • FOREGROUND_SERVICE

  • WAKE_LOCK

  • ACCESS_BACKGROUND_LOCATION

Технические требования

  • Язык: Java (не Kotlin)

  • minSdk: 26 (Android 8.0)

  • targetSdk: 33 или 34

  • Зависимости в build.gradle: appcompat, material, recyclerview

  • Весь код должен компилироваться в Android Studio без ошибок

Желательно

  • START_STICKY для сервиса

  • Лог хранить последние 500 записей (автоочистка старых)

  • При изменении настроек — сервис перезапускается с новыми параметрами

  • Обработка отсутствия GPS (не сохранять, писать в лог)

Что нужно получить на выходе

Полный архив проекта Android Studio:

  • Все .java файлы по пакетам

  • Все .xml layouts (activity_first_run, activity_main, activity_settings, item_log)

  • AndroidManifest.xml

  • build.gradle (app level)

  • PHP-скрипт upload_wifi.php

Промт для нейросети. ЯП Java Код должен быть готов к копипасте и сборке. Спасибо!

Sign up to leave a comment.

Articles