我正在做一些关于 RPL 中的蠕虫攻击检测的工作。在 RPL 中,客户端之间的通信可能是多跳的,数据包要经过许多节点。
但是,只有接收方tcpip_event
接收到数据包。路由经过的节点不会得到这个事件。有没有办法检测中间节点上的数据包?
我正在做一些关于 RPL 中的蠕虫攻击检测的工作。在 RPL 中,客户端之间的通信可能是多跳的,数据包要经过许多节点。
但是,只有接收方tcpip_event
接收到数据包。路由经过的节点不会得到这个事件。有没有办法检测中间节点上的数据包?
转发数据包时,您无法收到通知或回调。但是,当较低层接收或发送数据包时,您可以获得回调。
在 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_packet
和output_packets
是您定义的回调,可用于检查数据包;例如,像这样:
static void
input_packet(void)
{
int rssi = (int)packetbuf_attr(PACKETBUF_ATTR_RSSI);
printf("received a packet with RSSI=%d\n", rssi);
}