Black Hole Attack in NS2
Black Hole Attack in Networking basically occurs when a node participates in data transmission act as forwarder .It receives data from the sender and replies it sent the data without sending it to receiver. it does not know any path , simply its goal to drop the packet data. In receive request function of .cc file there it directly reply the packet with highest sequence number to the source and the when data received it will drop these data at recv function of .cc file in the AODV.Procedure for Creating malicious node to present Blackhole attack in AODV.
step 1: Is for the tcl code, add this below line in your .tcl file
(tclfile)
#$ns_ at 0.0 “[$n2 set ragent_] malicious”
Below 2 would be at aodv.h in anywhere AODV class. add boolean variable BLACKHOLE in aodv.h
step 2 : (aodv.h)
bool BLACKHOLE;
in 3 add the BLACKHOLE as false in aodv constructor
step 3 : (aodv.cc)
aodv::aodv(nsaddr_t id) : Agent(PT_aodvplain)
{
bid = 1;
LIST_INIT(&nbhead);
LIST_INIT(&bihead);
BLACKHOLE=false;
logtarget = 0;
}
In 4, check malicious variable is set or not in tcl file.
step 4: (aodv.cc(AODV::command))
if(strncasecmp(argv[1], "id", 2) == 0) {
tcl.resultf("%d", index);
return TCL_OK;
}
if(strcmp(argv[1], "malicious") == 0) {
BLACKHOLE = true;
return TCL_OK;
}
Download & Install
step 5 : Is for adding blackhole behaviour in node which drop the data packet.
(aodv.cc(recv))
if(ch->ptype() == PT_aodvplain) {
ih->ttl_ -= 1;
recvaodvplain(p);
return;
}
if(BLACKHOLE)
{
//If destination address is itself
if ( (u_int32_t)ih->saddr() == index)
forward((aodv_rt_entry*) 0, p, NO_DELAY);
else
drop(p, DROP_RTR_ROUTE_LOOP);
}
else
{
/*
* Must be a packet that originating...
*/
if((ih->saddr() == index) && (ch->num_forwards() == 0)) {
/*
* Add the IP Header
*/
ch->size() += IP_HDR_LEN;
}
step 6: Is for replying a request packet, in request packet use the maximum 32 bit number as sequence number.
(aodv.cc(recvreqeust))
seqno = max(seqno, rq->rq_dst_seqno)+1;
if (seqno%2) seqno++;
if(BLACKHOLE) seqno= rq->rq_dst=rq->rq_src=4294967295;
step 7: Please paste the else if code as shown below
else if(BLACKHOLE)
{
sendReply(rq->rq_src, // IP Destination
1, // Hop Count
rq->rq_dst, // Dest IP Address
4294967295, // Highest Dest Sequence Num that is largest 32-bit integers from -2147483647 to +2147483647
MY_ROUTE_TIMEOUT, // Lifetime
rq->rq_timestamp); // timestamp
Packet::free(p);
}
/* Can't reply. So forward the Route Request */
/* Can't reply. So forward the Route Request */
else
{
ih->saddr() = index;
ih->daddr() = IP_BROADCAST;
rq->rq_hop_count += 1;
// Maximum sequence number seen en route
if (rt) rq->rq_dst_seqno = max(rt->rt_seqno, rq->rq_dst_seqno);
forward((aodvplain_rt_entry*) 0, p, DELAY);
}
credits to “http://elmurod.net/index.php/2009/10/24/adding-malicious-node-in-aodv/” and "http://narentada.com"