Contiki中的数据包转发事件

Packet forwarding event in Contiki

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

但是,只有接收方在接收数据包时得到 tcpip_event。路由经过的节点不会得到这个事件。有什么方法可以检测中间节点上的数据包吗?

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

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

在 Contiki-NG 中,函数已经 renamednetstack_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);
}