Ns3 Projects for B.E/B.Tech M.E/M.Tech PhD Scholars.  Phone-Number:9790238391   E-mail: ns3simulation@gmail.com

How to Implement Cybersecurity in ns3

To implement the cybersecurity in ns-3 consists to simulating the network security protocols and assaults, and evaluating their effect on network performance. Here is a complete procedure to implement the cybersecurity features in ns-3:

Step-by-Step Guide to Implement Cybersecurity in ns-3

  1. Install ns3

To make certain the ns-3 is installed on the system. If not downloaded and installed then installed from its official website.

  1. Define the Network Topology

Here is the network topology that contains:

  • Normal nodes (e.g., legitimate users)
  • Attacker nodes
  • Server nodes
  1. Implement Network Nodes

Create network nodes using NodeContainer.

NodeContainer normalNodes, attackerNodes, serverNodes;

normalNodes.Create(numNormalNodes);

attackerNodes.Create(numAttackerNodes);

serverNodes.Create(numServerNodes);

  1. Set Up Network Devices

Install network devices on the nodes using appropriate network interfaces. instances, use WiFi for wireless communication.

WifiHelper wifi;

wifi.SetStandard(WIFI_PHY_STANDARD_80211n_5GHZ);

WifiMacHelper mac;

mac.SetType(“ns3::AdhocWifiMac”);

YansWifiPhyHelper phy = YansWifiPhyHelper::Default();

YansWifiChannelHelper channel = YansWifiChannelHelper::Default();

phy.SetChannel(channel.Create());

NetDeviceContainer normalDevices = wifi.Install(phy, mac, normalNodes);

NetDeviceContainer attackerDevices = wifi.Install(phy, mac, attackerNodes);

NetDeviceContainer serverDevices = wifi.Install(phy, mac, serverNodes);

  1. Configure Mobility Model

Set up the mobility model for the nodes to simulate realistic movement.

MobilityHelper mobility;

mobility.SetMobilityModel(“ns3::ConstantPositionMobilityModel”);

mobility.Install(normalNodes);

mobility.Install(attackerNodes);

mobility.Install(serverNodes);

  1. Implement Security Protocols

Apply security protocols to protect the network instances, using IPsec to protected the communication among nodes.

  1. IPsec Implementation (Example)

You can simulate IPsec by encrypting and authenticating packets at the network layer.

class IPsecApplication : public Application {

public:

    void StartApplication() override {

        sendSocket = Socket::CreateSocket(GetNode(), UdpSocketFactory::GetTypeId());

        sendSocket->Connect(InetSocketAddress(destAddress, destPort));

        recvSocket = Socket::CreateSocket(GetNode(), UdpSocketFactory::GetTypeId());

        recvSocket->Bind(InetSocketAddress(Ipv4Address::GetAny(), localPort));

        recvSocket->SetRecvCallback(MakeCallback(&IPsecApplication::ReceivePacket, this));

        // Schedule the first packet send

        SendPacket();

    }

    void SetRemote(Address address, uint16_t port) {

        destAddress = address;

        destPort = port;

    }

    void SetLocalPort(uint16_t port) {

        localPort = port;

    }

    void SendPacket() {

        std::string message = “Hello, this is an encrypted message”;

        std::string encryptedMessage = EncryptMessage(message);

        Ptr<Packet> packet = Create<Packet>((uint8_t*) encryptedMessage.c_str(), encryptedMessage.size());

        sendSocket->Send(packet);

        // Schedule the next packet send

        Simulator::Schedule(Seconds(1.0), &IPsecApplication::SendPacket, this);

    }

    void ReceivePacket(Ptr<Socket> socket) {

        Ptr<Packet> packet;

        while ((packet = socket->Recv())) {

            std::string encryptedMessage = std::string((char*) packet->PeekData(), packet->GetSize());

            std::string message = DecryptMessage(encryptedMessage);

            std::cout << “Received message: ” << message << std::endl;

        }

    }

    std::string EncryptMessage(const std::string& message) {

        // Placeholder encryption logic

        return message;

    }

    std::string DecryptMessage(const std::string& encryptedMessage) {

        // Placeholder decryption logic

        return encryptedMessage;

    }

private:

    Ptr<Socket> sendSocket;

    Ptr<Socket> recvSocket;

    Address destAddress;

    uint16_t destPort;

    uint16_t localPort;

};

  1. Implement Attack Models

Simulate different types of attacks. For example, a Denial of Service (DoS) attack can be simulated by sending a large number of packets to overwhelm a server.

  1. DoS Attack Implementation (Example)

class DoSAttackApplication : public Application {

public:

    void StartApplication() override {

        sendSocket = Socket::CreateSocket(GetNode(), UdpSocketFactory::GetTypeId());

        sendSocket->Connect(InetSocketAddress(destAddress, destPort));

        // Schedule the first packet send

        SendPacket();

    }

    void SetRemote(Address address, uint16_t port) {

        destAddress = address;

        destPort = port;

    }

    void SendPacket() {

        std::string message = “This is a DoS attack packet”;

        Ptr<Packet> packet = Create<Packet>((uint8_t*) message.c_str(), message.size());

        sendSocket->Send(packet);

        // Schedule the next packet send

        Simulator::Schedule(MilliSeconds(10), &DoSAttackApplication::SendPacket, this);

    }

private:

    Ptr<Socket> sendSocket;

    Address destAddress;

    uint16_t destPort;

};

  1. Set Up Applications

Install the applications on the nodes.

ApplicationContainer normalApps, attackerApps, serverApps;

for (uint32_t i = 0; i < normalNodes.GetN(); ++i) {

    Ptr<IPsecApplication> app = CreateObject<IPsecApplication>();

    app->SetRemote(serverNodes.Get(0)->GetObject<Ipv4>()->GetAddress(1, 0).GetLocal(), 9);

    app->SetLocalPort(10);

    normalNodes.Get(i)->AddApplication(app);

    app->SetStartTime(Seconds(1.0));

    app->SetStopTime(Seconds(20.0));

    normalApps.Add(app);

}

for (uint32_t i = 0; i < attackerNodes.GetN(); ++i) {

    Ptr<DoSAttackApplication> app = CreateObject<DoSAttackApplication>();

    app->SetRemote(serverNodes.Get(0)->GetObject<Ipv4>()->GetAddress(1, 0).GetLocal(), 9);

    attackerNodes.Get(i)->AddApplication(app);

    app->SetStartTime(Seconds(5.0));

    app->SetStopTime(Seconds(20.0));

    attackerApps.Add(app);

}

PacketSinkHelper sink(“ns3::UdpSocketFactory”, InetSocketAddress(Ipv4Address::GetAny(), 9));

serverApps.Add(sink.Install(serverNodes));

serverApps.Start(Seconds(1.0));

serverApps.Stop(Seconds(20.0));

  1. Set Up Routing Protocols

Configure routing protocols for the network.

AodvHelper aodv;

InternetStackHelper internet;

internet.SetRoutingHelper(aodv);

internet.Install(normalNodes);

internet.Install(attackerNodes);

internet.Install(serverNodes);

  1. Assign IP Addresses

Assign IP addresses to the network devices.

Ipv4AddressHelper address;

address.SetBase(“10.1.1.0”, “255.255.255.0”);

Ipv4InterfaceContainer normalInterfaces = address.Assign(normalDevices);

Ipv4InterfaceContainer attackerInterfaces = address.Assign(attackerDevices);

Ipv4InterfaceContainer serverInterfaces = address.Assign(serverDevices);

  1. Run the Simulation

Configure the simulation runtime and execute it.

Simulator::Stop(Seconds(20.0));

Simulator::Run();

Simulator::Destroy();

Example of a Simple Cybersecurity Network Script

The given below is the sample scrip to complete the cybersecurity simulation in ns-3 environment:

#include “ns3/core-module.h”

#include “ns3/network-module.h”

#include “ns3/internet-module.h”

#include “ns3/wifi-module.h”

#include “ns3/mobility-module.h”

#include “ns3/applications-module.h”

#include “ns3/aodv-module.h”

using namespace ns3;

class IPsecApplication : public Application {

public:

    void StartApplication() override {

        sendSocket = Socket::CreateSocket(GetNode(), UdpSocketFactory::GetTypeId());

        sendSocket->Connect(InetSocketAddress(destAddress, destPort));

        recvSocket = Socket::CreateSocket(GetNode(), UdpSocketFactory::GetTypeId());

        recvSocket->Bind(InetSocketAddress(Ipv4Address::GetAny(), localPort));

        recvSocket->SetRecvCallback(MakeCallback(&IPsecApplication::ReceivePacket, this));

        // Schedule the first packet send

        SendPacket();

    }

    void SetRemote(Address address, uint16_t port) {

        destAddress = address;

        destPort = port;

    }

    void SetLocalPort(uint16_t port) {

        localPort = port;

    }

    void SendPacket() {

        std::string message = “Hello, this is an encrypted message”;

        std::string encryptedMessage = EncryptMessage(message);

        Ptr<Packet> packet = Create<Packet>((uint8_t*) encryptedMessage.c_str(), encryptedMessage.size());

        sendSocket->Send(packet);

        // Schedule the next packet send

        Simulator::Schedule(Seconds(1.0), &IPsecApplication::SendPacket, this);

    }

    void ReceivePacket(Ptr<Socket> socket) {

        Ptr<Packet> packet;

        while ((packet = socket->Recv())) {

            std::string encryptedMessage = std::string((char*) packet->PeekData(), packet->GetSize());

            std::string message = DecryptMessage(encryptedMessage);

            std::cout << “Received message: ” << message << std::endl;

        }

    }

    std::string EncryptMessage(const std::string& message) {

        // Placeholder encryption logic

        return message;

    }

    std::string DecryptMessage(const std::string& encryptedMessage) {

        // Placeholder decryption logic

        return encryptedMessage;

    }

private:

    Ptr<Socket> sendSocket;

    Ptr<Socket> recvSocket;

    Address destAddress;

    uint16_t destPort;

    uint16_t localPort;

};

class DoSAttackApplication : public Application {

public:

    void StartApplication() override {

        sendSocket = Socket::CreateSocket(GetNode(), UdpSocketFactory::GetTypeId());

        sendSocket->Connect(InetSocketAddress(destAddress, destPort));

        // Schedule the first packet send

        SendPacket();

    }

    void SetRemote(Address address, uint16_t port) {

        destAddress = address;

        destPort = port;

    }

    void SendPacket() {

        std::string message = “This is a DoS attack packet”;

        Ptr<Packet> packet = Create<Packet>((uint8_t*) message.c_str(), message.size());

        sendSocket->Send(packet);

 

        // Schedule the next packet send

        Simulator::Schedule(MilliSeconds(10), &DoSAttackApplication::SendPacket, this);

    }

private:

    Ptr<Socket> sendSocket;

    Address destAddress;

    uint16_t destPort;

};

int main(int argc, char *argv[]) {

    NodeContainer normalNodes, attackerNodes, serverNodes;

    normalNodes.Create(3);

    attackerNodes.Create(1);

    serverNodes.Create(1);

    // WiFi setup

    WifiHelper wifi;

    wifi.SetStandard(WIFI_PHY_STANDARD_80211n_5GHZ);

    WifiMacHelper mac;

    mac.SetType(“ns3::AdhocWifiMac”);

    YansWifiPhyHelper phy = YansWifiPhyHelper::Default();

    YansWifiChannelHelper channel = YansWifiChannelHelper::Default();

    phy.SetChannel(channel.Create());

    NetDeviceContainer normalDevices = wifi.Install(phy, mac, normalNodes);

    NetDeviceContainer attackerDevices = wifi.Install(phy, mac, attackerNodes);

    NetDeviceContainer serverDevices = wifi.Install(phy, mac, serverNodes);

    // Mobility setup

    MobilityHelper mobility;

    mobility.SetMobilityModel(“ns3::ConstantPositionMobilityModel”);

    mobility.Install(normalNodes);

    mobility.Install(attackerNodes);

    mobility.Install(serverNodes);

    // Internet stack and routing

    AodvHelper aodv;

    InternetStackHelper internet;

    internet.SetRoutingHelper(aodv);

    internet.Install(normalNodes);

    internet.Install(attackerNodes);

    internet.Install(serverNodes);

    Ipv4AddressHelper address;

    address.SetBase(“10.1.1.0”, “255.255.255.0”);

    Ipv4InterfaceContainer normalInterfaces = address.Assign(normalDevices);

    Ipv4InterfaceContainer attackerInterfaces = address.Assign(attackerDevices);

    Ipv4InterfaceContainer serverInterfaces = address.Assign(serverDevices);

    // Install applications

    ApplicationContainer normalApps, attackerApps, serverApps;

    for (uint32_t i = 0; i < normalNodes.GetN(); ++i) {

        Ptr<IPsecApplication> app = CreateObject<IPsecApplication>();

        app->SetRemote(serverNodes.Get(0)->GetObject<Ipv4>()->GetAddress(1, 0).GetLocal(), 9);

        app->SetLocalPort(10);

        normalNodes.Get(i)->AddApplication(app);

        app->SetStartTime(Seconds(1.0));

        app->SetStopTime(Seconds(20.0));

        normalApps.Add(app);

    }

    for (uint32_t i = 0; i < attackerNodes.GetN(); ++i) {

        Ptr<DoSAttackApplication> app = CreateObject<DoSAttackApplication>();

        app->SetRemote(serverNodes.Get(0)->GetObject<Ipv4>()->GetAddress(1, 0).GetLocal(), 9);

        attackerNodes.Get(i)->AddApplication(app);

        app->SetStartTime(Seconds(5.0));

        app->SetStopTime(Seconds(20.0));

        attackerApps.Add(app);

    }

    PacketSinkHelper sink(“ns3::UdpSocketFactory”, InetSocketAddress(Ipv4Address::GetAny(), 9));

    serverApps.Add(sink.Install(serverNodes));

    serverApps.Start(Seconds(1.0));

    serverApps.Stop(Seconds(20.0));

    Simulator::Stop(Seconds(20.0));

    Simulator::Run();

    Simulator::Destroy();

    return 0;

}

Overall, here we discussed the basic knowledge about how to implement the Cybersecurity in ns-3 environment and additionally we provide all kinds of Cybersecurity networks that perform in different environments. Programming help for all cybersecurity in ns-3 are worked by us.