Мне нужен фрагмент кода C ++, который имитирует сеть AODV с вредоносным узлом, который выполняет атаку воспроизведения. Мне нужно встроить это в мой проект OMNet ++.
Я пытался изменить исходный код в примере проекта в OMNet ++, но я вернулся к исходной точке.
Будет здорово найти помощь.
Я не могу включить пример кода, он довольно длинный в символах, если вы хотите увидеть мои испытания до сих пор, покажите мне, где я могу поделиться своим проектом.
Поскольку в вопросе ОП не хватает некоторых деталей, я предложу имитационное решение после Пример статьи из Википедии для Повторите атаку:
Предположим, Алиса хочет доказать свою личность Бобу. Боб просит ее
пароль как удостоверение личности, которое Алиса покорно предоставляет
(возможно, после некоторого преобразования, такого как хеш-функция); Между тем,
Ева подслушивает разговор и хранит пароль (или
хэш). После того, как обмен закончен, Ева (выдавая себя за Алису)
подключается к Бобу; когда ее спрашивают о личности, Ева отправляет Алису
пароль (или хэш), прочитанный с последнего сеанса, который Боб принимает таким образом
предоставляя доступ к Еве.
Я бы создал новый пакет (расширяющий 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 разные роли в данном примере:
Если мы считаем, что у каждого узла есть определенный идентификатор, который содержит его имя, мы можем сделать следующее для каждой роли:
АЛИСА:
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");
}
}
ЕВА:
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");
}
}
БОБ:
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");
}
}
Имейте в виду, что это фиктивная реализация, вы можете добавить более умные условные проверки, чтобы приложение работало лучше.