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所有的二跳节点加入到x的hello里作为虚假的邻居
③攻击者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);
有点看不懂
然后是