微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Contiki 中的数据包转发事件

如何解决Contiki 中的数据包转发事件

我正在 RPL 中做一些蠕虫攻击检测方面的工作。在 RPL 中,客户端之间的通信可能是多跳,数据包经过许多节点。

然而,只有接收方在接收到数据包时得到 tcpip_event。路由经过的节点没有得到这个事件。有没有办法检测中间节点上的数据包?

解决方法

当数据包被转发时,您无法获得通知或回调。但是,您可以在较低层接收或发送数据包时获得回调。

在 Contiki 中,为此使用函数 rime_sniffer_add。以 apps/powertrace/powertrace.c 为例。

在 Contiki-NG 中,函数已从 renamed 变为 netstack_sniffer_add

使用示例:

像这样在全局范围内声明嗅探器:

RIME_SNIFFER(packet_sniffer,input_packet,output_packet);

然后在应用程序执行开始时从您的代码中添加一次嗅探器:

rime_sniffer_add(&packet_sniffer);

函数input_packetoutput_packets是你定义的回调函数,可以用来检查数据包;例如,像这样:

static void
input_packet(void)
{
  int rssi = (int)packetbuf_attr(PACKETBUF_ATTR_RSSI);
  printf("received a packet with RSSI=%d\n",rssi);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。