0

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

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

4

1 回答 1

0

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

在 Contiki 中,使用该功能rime_sniffer_add。检查apps/powertrace/powertrace.c一个例子。

在 Contiki-NG 中,该功能已重命名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);
}
于 2021-05-26T14:18:56.463 回答