Skip to main content

Blackhole Attack Mitigation in AODV Protocol Using NS3 (v3.44) on Ubuntu 24.04

Are you a network security researcher or student exploring wireless network vulnerabilities? This post walks you through how to mitigate blackhole attacks in the AODV routing protocol using NS-3 (Network Simulator 3), specifically version ns-3.44 on Ubuntu 24.04. We’ll also guide you on modifying key NS3 source files and provide insights on testing your implementation.

📺 Watch the full setup and demo on my YouTube channel for step-by-step video instructions.

🛠️ Tools and Environment

  • Network Simulator: NS-3.44

  • Operating System: Ubuntu 24.04 (64-bit recommended)

  • Routing Protocol: AODV (Ad hoc On-Demand Distance Vector)

  • Attack Type: Blackhole Attack in Wireless Ad Hoc Networks

🚨 What Is a Blackhole Attack in AODV?

A Blackhole Attack occurs when a malicious node in a wireless network advertises itself as having the shortest path to all destinations, causing data packets to be misrouted and dropped. This is a critical vulnerability in AODV-based MANETs (Mobile Ad hoc Networks).

To download the source code: 

https://github.com/tspradeepkumar/ns3_blackholeAttack/

Step-by-Step Instructions to Implement Blackhole Mitigation

✅ Step 1: Modify AODV Protocol Source Files

You need to replace the default AODV implementation with your custom one that includes blackhole attack detection and mitigation logic.

Files to Replace:

  1. aodv-routing-protocol.cc

  2. aodv-routing-protocol.h

Destination Folder:

~/ns-allinone-3.44/ns-3.44/src/aodv/model/

⚠️ Important: Backup the original files before replacing them.

✅ Step 2: Rebuild NS3 with the New AODV Implementation

Open your terminal and run the following commands to configure and build NS3:

$ cd ~/ns-allinone-3.44/ns-3.44
$ ./ns3 configure --enable-examples --enable-tests $ ./ns3 build

This compiles NS3 with your modified AODV protocol, now capable of detecting and mitigating blackhole attacks.


✅ Step 3: Test the Blackhole Attack Simulation

Create and copy two new source files for testing:

  1. blackhole.cc – Main file to simulate the blackhole scenario

  2. myapp.h – Supports UDP-based communication for traffic generation

Destination Folder:

~/ns-allinone-3.44/ns-3.44/scratch/

After placing the files, run the simulation and observe the results.


📊 Output Results: Blackhole Attack Mitigation in Action

Without Blackhole Attack:

  • Packets Sent = Packets Received

  • No Packet Loss

  • Ideal behaviour of a secure wireless network

blackhole attack
Without a blackhole attack


With Blackhole Attack:

  • Packets Dropped

  • Received Bytes < Transmitted Bytes

  • Indicates data interception or loss due to malicious nodes

blackhole attack
With a blackhole attack


📈 Flow Analysis – Flow ID vs Delay:

You can also analyse FlowMonitor output to study how delay varies across flows in both attack and mitigation scenarios.

blackhole attack
Blackhole attack flow

📺 Watch the Complete Video Tutorial 

  • Blackhole Attack NS3

  • AODV Protocol NS3 Simulation

  • NS-3.44 Blackhole Mitigation

  • Wireless Network Security Ubuntu

  • Mobile Ad Hoc Network Attack Detection

  • How to Detect Blackhole Attack in AODV

  • NS3 Blackhole Simulation Tutorial

  • Secure AODV Routing in NS-3


Comments

Popular posts from this blog

Installing ns3 in Ubuntu 22.04 | Complete Instructions

In this post, we are going to see how to install ns-3.36.1 in Ubuntu 22.04. You can follow the video for complete details Tools used in this simulation: NS3 version ns-3.36.1  OS Used: Ubuntu 22.04 LTS Installation of NS3 (ns-3.36.1) There are some changes in the ns3 installation procedure and the dependencies. So open a terminal and issue the following commands Step 1:  Prerequisites $ sudo apt update In the following packages, all the required dependencies are taken care and you can install all these packages for the complete use of ns3. $ sudo apt install g++ python3 python3-dev pkg-config sqlite3 cmake python3-setuptools git qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools gir1.2-goocanvas-2.0 python3-gi python3-gi-cairo python3-pygraphviz gir1.2-gtk-3.0 ipython3 openmpi-bin openmpi-common openmpi-doc libopenmpi-dev autoconf cvs bzr unrar gsl-bin libgsl-dev libgslcblas0 wireshark tcpdump sqlite sqlite3 libsqlite3-dev  libxml2 libxml2-dev libc6-dev libc6-dev-i386 libc...

Installation of NS2 in Ubuntu 22.04 | NS2 Tutorial 2

NS-2.35 installation in Ubuntu 22.04 This post shows how to install ns-2.35 in Ubuntu 22.04 Operating System Since ns-2.35 is too old, it needs the following packages gcc-4.8 g++-4.8 gawk and some more libraries Follow the video for more instructions So, here are the steps to install this software: To download and extract the ns2 software Download the software from the following link http://sourceforge.net/projects/nsnam/files/allinone/ns-allinone-2.35/ns-allinone-2.35.tar.gz/download Extract it to home folder and in my case its /home/pradeepkumar (I recommend to install it under your home folder) $ tar zxvf ns-allinone-2.35.tar.gz or Right click over the file and click extract here and select the home folder. $ sudo apt update $ sudo apt install build-essential autoconf automake libxmu-dev gawk To install gcc-4.8 and g++-4.8 $ sudo gedit /etc/apt/sources.list make an entry in the above file deb http://in.archive.ubuntu.com/ubuntu/ bionic main universe $ sudo apt update Since, it...

Installation of NS2 (ns-2.35) in Ubuntu 20.04

Installation of NS2 (ns-2.35) in Ubuntu 20.04 LTS Step 1: Install the basic libraries like      $] sudo apt install build-essential autoconf automake libxmu-dev Step 2: install gcc-4.8 and g++-4.8 open the file using sudo mode $] sudo nano /etc/apt/sources.list Include the following line deb http://in.archive.ubuntu.com/ubuntu bionic main universe $] sudo apt update $] sudo apt install gcc-4.8 g++-4.8 Step 3:  Unzip the ns2 packages to home folder $] tar zxvf ns-allinone-2.35.tar.gz $] cd ns-allinone-2.35/ns-2.35 Modify the following make files. ~ns-2.35/Makefile.in Change @CC@ to gcc-4.8 change @CXX@ to g++-4.8 ~nam-1.15/Makefile.in ~xgraph-12.2/Makefile.in ~otcl-1.14/Makefile.in Change in all places  @CC@ to gcc-4.8 @CPP@ or @CXX@ to g++-4.8 open the file: ~ns-2.35/linkstate/ls.h Change at the Line no 137  void eraseAll() { erase(baseMap::begin(), baseMap::end()); } to This void eraseAll() { this->erase(baseMap::begin(), baseMap::end()); } All changes ...