1

我正在尝试执行以下操作:

a) 将 Contiki 设置为混杂模式。

b) 然后检索所有发送的 UDP 和 RPL 数据包,不仅发送到当前节点,还发送到通信范围内的其他两个节点之间。

我有以下代码:

NETSTACK_RADIO.set_value(RADIO_PARAM_RX_MODE, 0);   
simple_udp_register(&unicast_connection, 3001,
                  NULL, 3000, receiver);

其中接收者是一个适当的回调函数。我能够收集发送到当前节点的 UDP 数据包,但仍然无法接收在我的通信范围内的其他节点之间发送的数据包。

4

1 回答 1

2

设置RADIO_PARAM_RX_MODEonly 控制无线电驱动程序过滤掉哪些数据包。操作系统网络堆栈中有多个层,其中无线电驱动程序只是第一层。接下来是 RDC 和 MAC,它们仍然会过滤掉发往其他节点的数据包,并且没有 API 可以禁用它。

解决方案是修改 MAC 以禁止丢弃未寻址到本地模式的数据包或编写您自己的简单 MAC。后者是 Sensniff(Contiki 数据包嗅探器)所做的 - 请参阅它的 README 和源代码。顺便说一句,如果您只想记录所有收到的数据包,只需使用 Sensniff!

于 2018-04-26T21:44:28.040 回答