完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这是一个关于 esp8266 的 ARP 的问题。我意识到这可能是一个相当低级的问题(即不那么正常),所以我将稍微解释一下我想要实现的目标。
如果我们假设我有一个已知的 MAC 地址或 IP 地址,我想知道相关设备是否已连接到网络。ESP8266 处于 STAtiON 模式,因此该设备可能在 WiFi 上或可能在以太网上,但这应该无关紧要。我正在使用 ESP07 和 Arduino 平台。 我的理解是 ESP 中的 ARP 表需要从设备发送/接收数据包才能存储 MAC 和 IP 对。如果我使用 ,然后假设设备是已知的,我得到结果的索引和关联的 MAC 地址。 代码:全选// search ARP records for IP int8_t result = etharp_find_addr(STATION_IF, &_ip, &_arp_mac, &_arp_ip) 让流量“可见”的一种方法是对设备执行 ping(使用内置的 )——这似乎对结果的准确性有很大帮助。事实上,如果我不执行 ping,那么大多数时候我都得不到结果。我认为这遵循的理论是,只有在看到到 IP/MAC 的流量时才会填充 ARP 表。到目前为止一切都很好。 但是,并非所有设备都会响应 ping(如果它们处于休眠状态等),因此这并不总是可靠的。相当可靠,但不是防弹的。 桌面系统的其他工具可以使用 ARP 强制向网络/设备发出请求以获得答复。使用此类工具可以更可靠地回答“具有 IP 地址的设备是否处于活动状态?”这个问题。etharp.h 中似乎有一些功能,但如果我什至考虑使用它们,例如 ,那么我会得到一个异常并且 ESP 重新启动。 代码:全选// test IP address ip_addr_t test_ip; IP4_ADDR(&test_ip, 192,168,0,111); // do a search int8_t result = etharp_request(STATION_IF, &test_ip); ...... Exception (28): epc1=0x4000df2f epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000033 depc=0x00000000 ctx: cont sp: 3fff1ff0 end: 3fff2230 offset: 01a0 >>>stack>>> 3fff2190: 3f202020 00000000 00000000 00000000 3fff21a0: 4024545b 00000033 3fff1148 40245439 3fff21b0: 00000004 3fff21e0 00000000 00000001 3fff21c0: 6101a8c0 00ffffff fe01a8c0 3fff1208 3fff21d0: 3fffdad0 00000000 3fff1148 4020fa6b 3fff21e0: 6f00a8c0 6101a8c0 3fff1148 40206bb4 3fff21f0: 3fffdad0 3fff0e4c 3fff1148 40211717 3fff2200: 3fffdad0 00000000 3fff1200 4021252d 3fff2210: 3fffdad0 00000000 3fff1200 40208770 3fff2220: feefeffe feefeffe 3fff1210 4020994c << |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1140 浏览 1 评论
578浏览 6评论
479浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
463浏览 5评论
464浏览 4评论
440浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 23:42 , Processed in 0.670070 second(s), Total 45, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号