发现网络上的设备

时间:2016-12-10 18:40:11

标签: c networking esp8266 arduino-esp8266

我有一台ESP8266设备,我用Arduino / C ++编程。

我感兴趣的是,它是否有可能以某种方式发现与我的ESP8266在同一网络上的设备。 在笔记本电脑上我只是听ARP广播,​​但我不知道ESP8266 SDK (或任何其他' hacky'方式)是否可行

1 个答案:

答案 0 :(得分:1)

如果您对低级别数据包感兴趣,您确实可以挂接网络接口的输入和输出功能。这取决于您希望如何完成设备发现。应该是

  1. 有效的ping扫描(nmap -sn 192.168.0.0/24
  2. 活动端口扫描(nmap -sS -p0-65000 192.168.0.0/24
  3. 被动ARP扫描
  4. 所有的组合?
  5. 我假设您将使用被动ARP扫描技术。

    我在esp-open-rtos SDK项目中已经完成的工作是挂钩网络接口的输入和输出功能(esp_interface.clow_level_output()ethernetif_input())。我还根据你在这些函数中得到的数据编写了一个数据包嗅探器(它在flash中写出了一个.pcap文件)。由于整个lwIP堆栈是esp-open-rtos内部的开源,因此挂钩到IP堆栈(尤其是ARP数据包功能,请参阅lwip/src/netif/etharp.c!)非常简单,如果您需要,我建议您使用此SDK快速获得结果。

    对于专业的Espressif SDK,您可以将ESP置于promiscious模式,并为所有收到的数据包提供回调函数(wifi_promiscuous_rx_cb函数)。然后,您可以根据需要分析这些数据包。重要的功能是wifi_promiscuous_enable(bool enable)wifi_set_promiscuous_rx_cb(wifi_promiscuous_rx_cb)。这些记录在https://espressif.com/sites/default/files/documentation/20b-esp8266_rtos_sdk_api_reference_v1.4.0_0.pdf(第72和73页)的官方ESP-RTOS文档中。但是,使用此SDK无法挂接到其IP堆栈,因此您必须事先进行数据包分析。

    这些都是hacky,但鉴于“我想听ARP广播”的性质,没有别的办法。其他方式可能是主动ping扫描,您必须在esp-open-rtos中使用lwIP或在Esitaryif SDK中使用其他espconn函数。

相关问题