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

How to Implement Edge Computing security in ns3

To implement the edge computing security in ns3 contains creating safe communication among edge devices, edge servers, and possibly an attacker. Encryption, authentication, intrusion detection are in the security mechanisms. The given step-by-step procedure to setting up and simulating edge computing security in ns3.

Step-by-Step Implementation:

Step 1: Set Up the ns3 Environment

Make sure ns3 is installed. Elsewhere follow the authorized installation notes.

Step 2: Define the Network Topology

Nodes are expressive the edge servers, edge devices and possibly an attacker are includes to make a network topology.

#include “ns3/core-module.h”

#include “ns3/network-module.h”

#include “ns3/internet-module.h”

#include “ns3/point-to-point-module.h”

#include “ns3/applications-module.h”

using namespace ns3;

NS_LOG_COMPONENT_DEFINE (“EdgeComputingSecurityExample”);

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

CommandLine cmd;

cmd.Parse (argc, argv);

// Create nodes

NodeContainer edgeDevices;

edgeDevices.Create (2); // Edge devices

NodeContainer edgeServers;

edgeServers.Create (2); // Edge servers

NodeContainer attacker;

attacker.Create (1); // Attacker node

// Create point-to-point links

PointToPointHelper pointToPoint;

pointToPoint.SetDeviceAttribute (“DataRate”, StringValue (“10Mbps”));

pointToPoint.SetChannelAttribute (“Delay”, StringValue (“2ms”));

NetDeviceContainer devices;

devices.Add (pointToPoint.Install (NodeContainer (edgeDevices.Get (0), edgeServers.Get (0))));

devices.Add (pointToPoint.Install (NodeContainer (edgeDevices.Get (1), edgeServers.Get (1))));

devices.Add (pointToPoint.Install (NodeContainer (edgeServers.Get (0), edgeServers.Get (1))));

devices.Add (pointToPoint.Install (NodeContainer (edgeServers.Get (1), attacker.Get (0))));

// Install Internet stack

InternetStackHelper stack;

stack.Install (edgeDevices);

stack.Install (edgeServers);

stack.Install (attacker);

// Assign IP addresses

Ipv4AddressHelper address;

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

Ipv4InterfaceContainer interfaces = address.Assign (devices);

// Create and configure applications…

Simulator::Run ();

Simulator::Destroy ();

return 0;

}

Step 3: Simulate Communication

For simulate the communication among the edge servers and edge devices to make applications.

Edge Device Application:

class EdgeDeviceApplication : public Application {

public:

EdgeDeviceApplication () : m_socket (0) {}

virtual ~EdgeDeviceApplication () {}

protected:

virtual void StartApplication () {

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

InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 8080);

m_socket->Bind (local);

m_socket->SetRecvCallback (MakeCallback (&EdgeDeviceApplication::HandleRead, this));

Simulator::Schedule (Seconds (2.0), &EdgeDeviceApplication::SendData, this);

}

virtual void StopApplication () {

if (m_socket) {

m_socket->Close ();

m_socket = 0;

}

}

private:

void SendData () {

Ptr<Packet> packet = Create<Packet> ((uint8_t*)”edge-data”, 9);

m_socket->SendTo (packet, 0, InetSocketAddress (Ipv4Address (“10.1.1.2”), 8080)); // Send to edge server

Simulator::Schedule (Seconds (5.0), &EdgeDeviceApplication::SendData, this);

}

void HandleRead (Ptr<Socket> socket) {

Ptr<Packet> packet;

Address from;

while ((packet = socket->RecvFrom (from))) {

NS_LOG_INFO (“Edge Device received: ” << packet->GetSize ());

}

}

Ptr<Socket> m_socket;

};

Edge Server Application:

class EdgeServerApplication : public Application {

public:

EdgeServerApplication () : m_socket (0) {}

virtual ~EdgeServerApplication () {}

protected:

virtual void StartApplication () {

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

InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 8080);

m_socket->Bind (local);

m_socket->SetRecvCallback (MakeCallback (&EdgeServerApplication::HandleRead, this));

}

virtual void StopApplication () {

if (m_socket) {

m_socket->Close ();

m_socket = 0;

}

}

private:

void HandleRead (Ptr<Socket> socket) {

Ptr<Packet> packet;

Address from;

while ((packet = socket->RecvFrom (from))) {

NS_LOG_INFO (“Edge Server received: ” << packet->GetSize ());

// Process data and respond if necessary

std::string responseData = “processed-data”;

Ptr<Packet> responsePacket = Create<Packet> ((uint8_t*)responseData.c_str (), responseData.size ());

m_socket->SendTo (responsePacket, 0, InetSocketAddress::ConvertFrom (from));

}

}

Ptr<Socket> m_socket;

};

Step 4: Implement Security Mechanisms

Encryption, intrusion detection and authentication to create security mechanisms.

Authentication:

class AuthApplication : public Application {

public:

AuthApplication () : m_socket (0) {}

virtual ~AuthApplication () {}

protected:

virtual void StartApplication () {

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

InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 7070);

m_socket->Bind (local);

m_socket->SetRecvCallback (MakeCallback (&AuthApplication::HandleRead, this));

}

virtual void StopApplication () {

if (m_socket) {

m_socket->Close ();

m_socket = 0;

}

}

private:

void HandleRead (Ptr<Socket> socket) {

Ptr<Packet> packet;

Address from;

while ((packet = socket->RecvFrom (from))) {

std::string data = std::string ((char*) packet->PeekData ());

if (Authenticate (data)) {

NS_LOG_INFO (“Authentication successful from ” << InetSocketAddress::ConvertFrom (from).GetIpv4 ());

ForwardPacket (packet);

} else {

NS_LOG_WARN (“Authentication failed from ” << InetSocketAddress::ConvertFrom (from).GetIpv4 ());

}

}

}

bool Authenticate (const std::string& data) {

// Simplified authentication logic

return data == “valid-credentials”;

}

void ForwardPacket (Ptr<Packet> packet) {

Ptr<Socket> socket = Socket::CreateSocket (GetNode (), UdpSocketFactory::GetTypeId ());

InetSocketAddress remote = InetSocketAddress (Ipv4Address (“10.1.1.2”), 8080); // Forward to another node

socket->Connect (remote);

socket->Send (packet);

socket->Close ();

}

Ptr<Socket> m_socket;

};

Encryption:

class EncryptionApplication : public Application {

public:

EncryptionApplication () : m_socket (0) {}

virtual ~EncryptionApplication () {}

protected:

virtual void StartApplication () {

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

InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 6060);

m_socket->Bind (local);

m_socket->SetRecvCallback (MakeCallback (&EncryptionApplication::HandleRead, this));

}

virtual void StopApplication () {

if (m_socket) {

m_socket->Close ();

m_socket = 0;

}

}

private:

void HandleRead (Ptr<Socket> socket) {

Ptr<Packet> packet;

Address from;

while ((packet = socket->RecvFrom (from))) {

std::string data = std::string ((char*) packet->PeekData ());

std::string decryptedData = Decrypt (data);

NS_LOG_INFO (“Received encrypted data: ” << data << “, decrypted data: ” << decryptedData);

}

}

std::string Decrypt (const std::string& data) {

// Simplified decryption logic

return data; // Assume data is already decrypted for simplicity

}

Ptr<Socket> m_socket;

};

Intrusion Detection System (IDS):

class IDSApplication : public Application {

public:

IDSApplication () : m_socket (0) {}

virtual ~IDSApplication () {}

protected:

virtual void StartApplication () {

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

InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 5050);

m_socket->Bind (local);

m_socket->SetRecvCallback (MakeCallback (&IDSApplication::HandleRead, this));

}

virtual void StopApplication () {

if (m_socket) {

m_socket->Close ();

m_socket = 0;

}

}

private:

void HandleRead (Ptr<Socket> socket) {

Ptr<Packet> packet;

Address from;

while ((packet = socket->RecvFrom (from))) {

std::string data = std::string ((char*) packet->PeekData ());

if (DetectIntrusion (data)) {

NS_LOG_WARN (“Intrusion detected from ” << InetSocketAddress::ConvertFrom (from).GetIpv4 ());

} else {

NS_LOG_INFO (“Normal traffic from ” << InetSocketAddress::ConvertFrom (from).GetIpv4 ());

}

}

}

bool DetectIntrusion (const std::string& data) {

// Simplified intrusion detection logic

return data == “malicious-pattern”;

}

Ptr<Socket> m_socket;

};

Step 5: Deploy Applications

In the network to instantiate and deploy the presentations on the suitable nodes.

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

CommandLine cmd;

cmd.Parse (argc, argv);

// Create nodes

NodeContainer edgeDevices;

edgeDevices.Create (2); // Edge devices

NodeContainer edgeServers;

edgeServers.Create (2); // Edge servers

NodeContainer attacker;

attacker.Create (1); // Attacker node

// Create point-to-point links

PointToPointHelper pointToPoint;

pointToPoint.SetDeviceAttribute (“DataRate”, StringValue (“10Mbps”));

pointToPoint.SetChannelAttribute (“Delay”, StringValue (“2ms”));

NetDeviceContainer devices;

devices.Add (pointToPoint.Install (NodeContainer (edgeDevices.Get (0), edgeServers.Get (0))));

devices.Add (pointToPoint.Install (NodeContainer (edgeDevices.Get (1), edgeServers.Get (1))));

devices.Add (pointToPoint.Install (NodeContainer (edgeServers.Get (0), edgeServers.Get (1))));

devices.Add (pointToPoint.Install (NodeContainer (edgeServers.Get (1), attacker.Get (0))));

// Install Internet stack

InternetStackHelper stack;

stack.Install (edgeDevices);

stack.Install (edgeServers);

stack.Install (attacker);

// Assign IP addresses

Ipv4AddressHelper address;

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

Ipv4InterfaceContainer interfaces = address.Assign (devices);

// Create and configure the Edge Device application

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

Ptr<EdgeDeviceApplication> deviceApp = CreateObject<EdgeDeviceApplication> ();

edgeDevices.Get (i)->AddApplication (deviceApp);

deviceApp->SetStartTime (Seconds (1.0));

deviceApp->SetStopTime (Seconds (20.0));

}

// Create and configure the Edge Server application

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

Ptr<EdgeServerApplication> serverApp = CreateObject<EdgeServerApplication> ();

edgeServers.Get (i)->AddApplication (serverApp);

serverApp->SetStartTime (Seconds (1.0));

serverApp->SetStopTime (Seconds (20.0));

}

// Create and configure the Auth application

Ptr<AuthApplication> authApp = CreateObject<AuthApplication> ();

edgeServers.Get (1)->AddApplication (authApp);

authApp->SetStartTime (Seconds (1.0));

authApp->SetStopTime (Seconds (20.0));

// Create and configure the Encryption application

Ptr<EncryptionApplication> encryptionApp = CreateObject<EncryptionApplication> ();

edgeServers.Get (1)->AddApplication (encryptionApp);

encryptionApp->SetStartTime (Seconds (1.0));

encryptionApp->SetStopTime (Seconds (20.0));

// Create and configure the IDS application

Ptr<IDSApplication> idsApp = CreateObject<IDSApplication> ();

edgeServers.Get (1)->AddApplication (idsApp);

idsApp->SetStartTime (Seconds (1.0));

idsApp->SetStopTime (Seconds (20.0));

Simulator::Run ();

Simulator::Destroy ();

return 0;

}

Step 6: Simulate an Attack

From the attacker node to test the security instruments, and to copy an attack

class AttackerApplication : public Application {

public:

AttackerApplication () : m_socket (0) {}

virtual ~AttackerApplication () {}

protected:

virtual void StartApplication () {

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

m_peer = InetSocketAddress (Ipv4Address (“10.1.1.2”), 8080); // Target edge server

m_socket->Connect (m_peer);

Simulator::Schedule (Seconds (3.0), &AttackerApplication::SendMaliciousPacket, this);

}

virtual void StopApplication () {

if (m_socket) {

m_socket->Close ();

m_socket = 0;

}

}

private:

void SendMaliciousPacket () {

std::string maliciousData = “malicious-pattern”; // Simplified malicious pattern

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

m_socket->Send (packet);

}

Ptr<Socket> m_socket;

Address m_peer;

};

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

CommandLine cmd;

cmd.Parse (argc, argv);

// Create nodes

NodeContainer edgeDevices;

edgeDevices.Create (2); // Edge devices

NodeContainer edgeServers;

edgeServers.Create (2); // Edge servers

NodeContainer attacker;

attacker.Create (1); // Attacker node

// Create point-to-point links

PointToPointHelper pointToPoint;

pointToPoint.SetDeviceAttribute (“DataRate”, StringValue (“10Mbps”));

pointToPoint.SetChannelAttribute (“Delay”, StringValue (“2ms”));

NetDeviceContainer devices;

devices.Add (pointToPoint.Install (NodeContainer (edgeDevices.Get (0), edgeServers.Get (0))));

devices.Add (pointToPoint.Install (NodeContainer (edgeDevices.Get (1), edgeServers.Get (1))));

devices.Add (pointToPoint.Install (NodeContainer (edgeServers.Get (0), edgeServers.Get (1))));

devices.Add (pointToPoint.Install (NodeContainer (edgeServers.Get (1), attacker.Get (0))));

// Install Internet stack

InternetStackHelper stack;

stack.Install (edgeDevices);

stack.Install (edgeServers);

stack.Install (attacker);

// Assign IP addresses

Ipv4AddressHelper address;

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

Ipv4InterfaceContainer interfaces = address.Assign (devices);

// Create and configure the Edge Device application

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

Ptr<EdgeDeviceApplication> deviceApp = CreateObject<EdgeDeviceApplication> ();

edgeDevices.Get (i)->AddApplication (deviceApp);

deviceApp->SetStartTime (Seconds (1.0));

deviceApp->SetStopTime (Seconds (20.0));

}

// Create and configure the Edge Server application

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

Ptr<EdgeServerApplication> serverApp = CreateObject<EdgeServerApplication> ();

edgeServers.Get (i)->AddApplication (serverApp);

serverApp->SetStartTime (Seconds (1.0));

serverApp->SetStopTime (Seconds (20.0));

}

// Create and configure the Auth application

Ptr<AuthApplication> authApp = CreateObject<AuthApplication> ();

edgeServers.Get (1)->AddApplication (authApp);

authApp->SetStartTime (Seconds (1.0));

authApp->SetStopTime (Seconds (20.0));

// Create and configure the Encryption application

Ptr<EncryptionApplication> encryptionApp = CreateObject<EncryptionApplication> ();

edgeServers.Get (1)->AddApplication (encryptionApp);

encryptionApp->SetStartTime (Seconds (1.0));

encryptionApp->SetStopTime (Seconds (20.0));

// Create and configure the IDS application

Ptr<IDSApplication> idsApp = CreateObject<IDSApplication> ();

edgeServers.Get (1)->AddApplication (idsApp);

idsApp->SetStartTime (Seconds (1.0));

idsApp->SetStopTime (Seconds (20.0));

// Create and configure the Attacker application

Ptr<AttackerApplication> attackerApp = CreateObject<AttackerApplication> ();

attacker.Get (0)->AddApplication (attackerApp);

attackerApp->SetStartTime (Seconds (3.0));

attackerApp->SetStopTime (Seconds (4.0));

Simulator::Run ();

Simulator::Destroy ();

return 0;

}

In this drafts to outline in the approach to prepare the Edge Computing Security in ns3. We execute these meaningful to reach the Edge computing security and we learn more about edge device application, encryption and to simulate attack. We are eager to contribute the lively compacted and concentration to state the Edge Computing Security in ns3.

If you need help with setting up security for Edge Computing in an ns3 simulation environment, we’ve got your back! Our developers are ready to assist you with project performance, so just send over all the important details. We’re experts in encryption, authentication, and intrusion detection. And if you’re stuck on coming up with project ideas, feel free to reach out for some support!