Contiki中的数据包转发事件
Packet forwarding event in 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_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);
}
我正在 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_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);
}