2016-12-10 9 views
1

У меня есть устройство ESP8266, которое я программирую на Arduino/C++.Обнаружение устройств в сети

Мне интересно, если можно каким-то образом обнаружить устройства, которые находятся в той же сети, что и мой ESP8266. На ноутбуке я просто просто слушал трансляции ARP, но я не знаю, возможно ли это с помощью ESP8266 SDK (или любого другого «взломанного» способа).

ответ

1

Если вас интересуют низкоуровневые пакеты, вы действительно можете подключить функции ввода и вывода вашего сетевого интерфейса. Это зависит от того, как вы хотите, чтобы ваше устройство было обнаружено. Должна ли она быть

  1. Активный пинг сканирование (nmap -sn 192.168.0.0/24)
  2. Активное сканирование портов (nmap -sS -p0-65000 192.168.0.0/24)
  3. Пассивная ARP-сканирования
  4. Сочетание всех?

Предполагаю, что вы пойдете с пассивной техникой сканирования ARP.

То, что я уже сделал в проекте особ-открытого RTOS SDK является для подключения входных и выходных функций сетевых интерфейсов (esp_interface.c, low_level_output() и ethernetif_input()). Я также написал пакетный снифер, основанный на данных, которые вы получаете внутри этих функций (он записывает файл .pcap во флеше). Поскольку весь стек lwIP является открытым исходным кодом внутри esp-open-rtos, подключение к стеку IP (и особенно функции пакета ARP, см. lwip/src/netif/etharp.c!) Чрезвычайно просто, и я бы рекомендовал использовать этот SDK, если вы хотите быстро получить результаты ,

Для правильного SDK Espressif вы можете поместить свой ESP в ненадежный режим и дать ему функцию обратного вызова (функция wifi_promiscuous_rx_cb) для всех принятых пакетов. Затем вы можете проанализировать эти пакеты, как пожелаете. Важными функциями являются wifi_promiscuous_enable(bool enable) и wifi_set_promiscuous_rx_cb(wifi_promiscuous_rx_cb). Они документированы в официальной документации ESP-RTOS по адресу https://espressif.com/sites/default/files/documentation/20b-esp8266_rtos_sdk_api_reference_v1.4.0_0.pdf (стр. 72 и 73). Однако с помощью этого SDK вы не можете подключиться к своему стеку IP, поэтому вам действительно нужно выполнить пакетный анализ.

Обе эти вещи хакерские, но с учетом характера «Я хочу слушать радиопередачи ARP» другого пути нет. Другими способами может быть активное сканирование ping, для которого вам придется использовать lwIP в esp-open-rtos или другие функции espconn в надлежащем SDK Espressif.

+0

Я уже думал о том, «кто заботится, давайте подключимся к SDK, но я не знал, с чего начать или как он создан. Итак, вы говорите, что каждый входящий пакет проходит через ethernetif_input, а все, что я отправляю будет отправлено через low_level_output? Если это так, это потрясающе, я обязательно его проверю;) –

+1

@ original.roland Это действительно так, вы можете проверить мой измененный 'esp_interface' на https://gist.github.com/ gamer-cndg/3bc9c339980b7d60acbe035ede2498bd. Выходы выглядят как '[IP-IN] От: 192.168.0.123 до 239.255.255.250 Proto 11',' [IP-IN] От: 192.168.0.121 до 192.168.0.102 Proto 06', '[TCP -IN] От порта 7637 до 8080'' [ETH-IN]: От bc: 5f: f4: 5a: 4a: 0c К ff: ff: ff: ff: ff: ff Тип ARP Len 60' и т. Д. –