DCFM

2021年9月15日11:32:41

若有一个节点是桥节点 那就有可能发生dcfm检测出来也没有用的情况

   

论文阅读后总结:

攻击者必须位于受害者的广播距离内,发布假HELLO消息,声称自己离受害者的所有两跳邻居都很近。

   

此外,一个虚构的节点被通告,使攻击者在MPR选择中比其他可能的合法候选具有优势。

   

通过分析受害者的单跳邻居的TC消息,可以很容易地了解受害者的两跳邻居,

可以直接从受害者自己广播的HELLO消息中构造出该邻居的列表。

   

MPR选择规则将导致受害者专门选择攻击者作为其唯一的MPR

因为它是允许覆盖所有受害者的两跳邻居(包括虚拟节点)的最小集合

   

   

攻击者可以通过在其TC消息中不包含受害者来隔离受害者。

本质上,攻击者不通知网络可以通过它到达受害者,因为没有其他节点向受害者发布路径,它是被隔离的。

其他节点,没有看到与受害者的链接信息,就会得出结论,它已经离开了网络,并删除它的地址从他们的路由表。

虽然距离受害者一跳和两跳的节点将继续与它交换信息,但它们不会进一步传播信息,因为它们没有被指定为MPR

   

   

   

我自己理解的实现顺序:

假定攻击节点x 我们暂时选择攻击一个节点a 他第一跳邻居列表中的第一个节点

添加一个独立的虚拟节点fx(加入到hello中)

   

通过受害节点a的单跳邻居的TC消息的tc消息,得到a的所有二跳节点,(可以从受害者自己广播的HELLO消息中构造出该邻居的列表)

a所有的二跳节点加入到xhello里作为虚假的邻居

   

攻击者x通过在其TC消息中不包含受害者来隔离受害者a

   

   

   

实现细节:

①添加一个独立的虚拟节点fx(加入到hello中)

在olsr.cc中 OLSR::send_hello() { 加入一个虚拟节点

   

先想办法找到节点收到消息后会怎么处理

首先运行

OLSR::recv(Packet* p, Handler* h) {

只要收到数据包,这个函数就会被调用。它识别接收到的数据包的类型并相应地处理它。

   

然后因为是olsr数据包 运行

OLSR::recv_olsr(Packet* p) {

路由代理已经收到了一个olsr数据包,从而使得要调用 recv_olsr_pkt()

   

然后要处理hello消息

OLSR::process_hello(OLSR_msg& msg, nsaddr_t receiver_iface, nsaddr_t sender_iface) {

   

然后链路感知

link_sensing(msg, receiver_iface, sender_iface);

有点看不懂

   

然后是

posted @ 2022-08-31 11:49  atomxing  阅读(61)  评论(0编辑  收藏  举报