Tuesday 23 April 2013

Black Hole Attack Implementation in NS2

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 */
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"


                          Download & Install

Thursday 18 April 2013

How to avoid Hidden Terminal Problem in NS2

Hidden Terminal Problem


Consider a scenario of 3 nodes A,B,C . A and C are in the same transmission medium and they are hidden to each other due to the presence of B in between them.

A want to send some data to B. B is free and it accepts the data from A mean while C wants to send data to B. C does not  that A is already sending some data to B. Whenever C starts sending data to B, the data packets from both A and C get collide at B which results in data loss.

                                                      A ---> B <---C

One  Solution for above scenario

It can be solved using CTS(clear to send) /RTS(request to send)  but the load will be high as number of packets increase in the network.

                 A send RTS request packet  to B for  data transmission. once B receives it , it will send CTS to all  nodes in its transmission range. C came to know that B is receiving some data from some one and it  sleep for some time and try to send RTS to B for transmission of data.


Other Possible Solutions To avoid Hidden Terminal Problem in NS2

1) Increase the Transmission power in ut tcl file.    set Rx_ "value" increase this power value.
2) Move the nodes in ur environment setup. moving nodes can sense the carriers easily  there by reduce the problem
3) Use Omni Directional Antenna instead of Directional in ur tcl fine under antenna set up.

Saturday 13 April 2013

AODV TCL file Downloads

Hi all,
             Here you can download all the files for AODV protocol with various group size.please find the below link to download all the files.
                               
                             

                              All Files Download & Installations

                           
                                                   AODV TCL script downloads : Click Here