Contiki OS: 设置混杂模式并接收所有 UDP 数据包
Contiki OS: Set Promiscuous Mode and receive all UDP Packets
我正在尝试执行以下操作:
a) 将 Contiki 设置为混杂模式。
b) 然后检索所有发送的 UDP 和 RPL 数据包,不仅发送到当前节点,还发送到通信范围内的其他两个节点之间。
我有以下代码:
NETSTACK_RADIO.set_value(RADIO_PARAM_RX_MODE, 0);
simple_udp_register(&unicast_connection, 3001,
NULL, 3000, receiver);
其中 receiver 是一个合适的回调函数。我可以收集发送到当前节点的UDP数据包,但仍然无法接收我通信范围内其他节点之间发送的数据包。
设置 RADIO_PARAM_RX_MODE
仅控制无线电驱动程序过滤掉哪些数据包。 OS 网络堆栈中有多个层,无线电驱动程序只是其中的第一层。接下来是 RDC 和 MAC,它们仍然过滤掉发往其他节点的数据包,并且没有 API 来禁用它。
解决方案是要么修改 MAC 以禁止丢弃未寻址到本地模式的数据包,要么编写您自己的简单 MAC。后者就是什么Sensniff(Contiki数据包嗅探器)does - see its README and source code。顺便说一句,如果你只想记录所有收到的数据包,只需使用 Sensniff!
我正在尝试执行以下操作:
a) 将 Contiki 设置为混杂模式。
b) 然后检索所有发送的 UDP 和 RPL 数据包,不仅发送到当前节点,还发送到通信范围内的其他两个节点之间。
我有以下代码:
NETSTACK_RADIO.set_value(RADIO_PARAM_RX_MODE, 0);
simple_udp_register(&unicast_connection, 3001,
NULL, 3000, receiver);
其中 receiver 是一个合适的回调函数。我可以收集发送到当前节点的UDP数据包,但仍然无法接收我通信范围内其他节点之间发送的数据包。
设置 RADIO_PARAM_RX_MODE
仅控制无线电驱动程序过滤掉哪些数据包。 OS 网络堆栈中有多个层,无线电驱动程序只是其中的第一层。接下来是 RDC 和 MAC,它们仍然过滤掉发往其他节点的数据包,并且没有 API 来禁用它。
解决方案是要么修改 MAC 以禁止丢弃未寻址到本地模式的数据包,要么编写您自己的简单 MAC。后者就是什么Sensniff(Contiki数据包嗅探器)does - see its README and source code。顺便说一句,如果你只想记录所有收到的数据包,只需使用 Sensniff!