【问题标题】:How to overhear a neighbor mote Tx/Rx in Contiki?如何在 Contiki 中偷听邻居 mote Tx/Rx?
【发布时间】:2018-07-18 13:21:28
【问题描述】:

我想知道在RPL网络中,一个节点向另一个节点发送一个数据包后(例如RPL-Collect/udp-sender),如何知道预期节点是否会转发此数据包?我认为需要偷听邻居传输,但是在 Contiki/Cooja 中实现此场景的另一种简单方法是什么?

【问题讨论】:

    标签: packet-sniffers contiki neighbours cooja


    【解决方案1】:

    除了正常操作之外,要偷听数据包,您还需要做几件事:

    1. 确保无线电已打开并处于正确的频道。如果你使用永远在线的 CSMA 或 ContikiMAC,你不需要做任何特别的事情。 TSCH 最小时间表也是如此。否则,对于 TSCH,您需要在正确的时隙和正确的信道偏移中安排一个 Rx 单元。

    2. 以某种方式侵入 MAC 层以打印或记帐不是发给您的数据包 - 通常 MAC 层会静默丢弃此类数据包。

    3. 确保关闭硬件帧过滤(无线电处于混杂模式)。

    例子:

    radio_value_t radio_rx_mode;
    /* Entering promiscuous mode so that the radio accepts all frames */
    NETSTACK_RADIO.get_value(RADIO_PARAM_RX_MODE, &radio_rx_mode);
    NETSTACK_RADIO.set_value(RADIO_PARAM_RX_MODE, radio_rx_mode & (~RADIO_RX_MODE_ADDRESS_FILTER));
    

    如果您只需要偷听数据包而不需要正常操作的东西,那就更简单了。然后你可以使用SenSniff

    【讨论】:

    • 优秀...谢谢@kfx。例如,我想知道 RPL 中的哪个微尘不转发通过邻居偷听接收到的数据包。我考虑了你的几件事,这意味着我有几个问题!
    • 1.我正在使用ContikiMAC,顺便在我的进程线程中添加NETSTACK_RDC.off(1)。 2. 在 contikimac.cinput_packet() 函数中,我更改了接受所有数据包的基本语句,即使不是发给我们的数据包,但我不知道如何打印和计算这个缓冲数据很少的操作。 3. 我认为通过在 project-conf (promiscuous mode) 中将 CC2420_CONF_AUTOACK 设置为零来关闭硬件帧过滤,顺便添加@ 987654325@ 可以使用吗?你有什么意见?
    • @Hamed 你还有问题吗?不,自动确认和帧过滤是两种不同的设置。如果认为即使帧过滤关闭,autoack 也会起作用。所以,不要关闭自动确认。但如果您出于某种原因需要,请启用CONTIKIMAC_CONF_SEND_SW_ACK
    • 进入混杂模式时,数据包传递率会显着下降,udp-senders 数据包根本没有传递到接收器。在我的 Cooja 模拟的 Timeline 窗口中,interfered 观察到的越来越多。有没有办法解决这个或其他方式来听取其他邻居的意见?
    • 这很奇怪。您确定不更改自动确认设置吗?只是帧过滤,对吧?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 2012-11-11
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多