如何在omnet ++中使用AODV协议实现重放攻击?

时间:2015-05-22 19:25:02

标签: c++ omnet++ inet

我需要一段c ++代码,用于模拟AODV网络以及进行重放攻击的恶意节点。我需要将它嵌入我的OMNet ++项目中。

我尝试在OMNet ++中更改示例项目中的原始代码,但我回到了起点。

找到帮助会很棒。

我无法在字符中包含相当长的示例代码,如果您需要查看我的试用版,请告诉我在哪里可以分享我的项目。

1 个答案:

答案 0 :(得分:1)

由于OPs问题缺少一些细节,我将在Wikipedia article's example之后为重播攻击提供模拟解决方案

  

假设Alice想要向Bob证明她的身份。鲍勃要求她   密码作为身份证明,爱丽丝尽职尽责   (可能在像哈希函数之类的某些转换之后);与此同时,   Eve正在窃听对话并保留密码(或   哈希)。在交换结束后,夏娃(冒充爱丽丝)   连接鲍勃;当被要求提供身份证明时,Eve会发送给Alice的   从最后一个会话读取的密码(或哈希),这是Bob接受的   准许进入夏娃。

我会创建一个新数据包(扩展UDPPacket)以通过向UDPPacket添加目标字段来满足您的特定应用目标:

cplusplus {{                
#include "<directory_path_for_the_udp_packet_goes_here>/UDPPacket_m.h"      // inheriting the parent class

}}

class ExtendedUDPPacket;    // you can call it whatever you want

message ExtendedUDPPacket extends UDPPacket 
{
    string sourceNode;          // name of the sender
    string destinationNode;         // name of the receiver
}

现在让我们看看给定示例中的3个不同角色:

  1. Alice:需要验证
  2. Bob:authenticator
  3. Eve:窃听者
  4. 如果我们认为每个节点都有一个保存其名称的特定ID,我们可以为每个角色执行以下操作:

    艾丽斯:

    void MalAODVRouter::handleMessage(cMessage *msg)
    {
        ExtendedUDPPacket *eUDPmsg = dynamic_cast<UDPPacket *>(msg);
        if (this->myID == eUDPmsg->getDestinationNode())      // myID is "Alice"
        {
            ExtendedUDPPacket *ExtendedUDPPacket= new UDPPacket();
            ExtendedUDPPacket->setSourceAddress(myID.c_str());
            ExtendedUDPPacket->setDestinationAddress(std::string("Bob").c_str());
    
            send(udpPacket, "ipOut");
        }
    }
    

    EVE:

    void MalAODVRouter::handleMessage(cMessage *msg)
    {
        ExtendedUDPPacket *eUDPmsg = dynamic_cast<UDPPacket *>(msg);
        if (this->myID != eUDPmsg->getDestinationNode())      // myID is "Eve"
        {
            ExtendedUDPPacket *ExtendedUDPPacket= new UDPPacket();
            ExtendedUDPPacket->setSourceAddress(std::string("Alice").c_str());  // fake the message
            ExtendedUDPPacket->setDestinationAddress(std::string("Bob").c_str());
    
            send(udpPacket, "ipOut");
        }
    }
    

    BOB:

    void MalAODVRouter::handleMessage(cMessage *msg)
    {
        ExtendedUDPPacket *eUDPmsg = dynamic_cast<UDPPacket *>(msg);
        if (eUDPmsg->getSourceNode() == 'Alice')   
        {
            ExtendedUDPPacket *ExtendedUDPPacket= new UDPPacket();
            ExtendedUDPPacket->setSourceAddress(std::string("Bob").c_str());
            ExtendedUDPPacket->setDestinationAddress(std::string("Alice").c_str());
    
    
            send(udpPacket, "ipOut");
        }
    }
    

    请记住这是一个模拟实现,您可以添加更智能的条件检查,以使应用程序更好。