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

26 comments:

  1. any one can help me, how to simulate FIFO and LIFO queue in ns2.

    ReplyDelete
  2. i do not understand step 6 . could you plz explain that????

    ReplyDelete
  3. Beegala Yuvaraj23 May 2013 at 00:52

    Please Compile and run ...

    $ns ./configure
    $ns make clean
    $ns make


    then try to run . please ensure taking back up.

    ReplyDelete
  4. Beegala Yuvaraj25 May 2013 at 00:00

    Now i came to know your problem. you already edited ur code with some other blog way ..you added hacker instead of malicious.follow only one thing.if u mix both result will be vain.

    You must add following code
    ----------------------------------- change mallicious to hacker
    if(strcmp(argv[1], “hacker”) == 0) {
    malicious = true;
    return TCL_OK;
    }

    In the following place

    if(argc == 2) {
    Tcl& tcl = Tcl::instance();

    if(strncasecmp(argv[1], “id”, 2) == 0) {
    tcl.resultf(“%d”, index);
    return TCL_OK;
    }

    // ABOVE CODE GOES HERE :
    if(strcmp(argv[1], “hacker”) == 0) {
    malicious = true;
    return TCL_OK;
    }

    }

    ReplyDelete
  5. Beegala Yuvaraj25 May 2013 at 00:05

    #$ns_ at 0.0 “[$n2 set ragent_] malicious”

    change this line according to urs

    $ns at 0.0 "[$(your node number) set ragent_] malicious"

    ReplyDelete
  6. blackhole implementation gives error message.

    /home/ubuntu/Desktop/error.png

    ReplyDelete
    Replies
    1. Beegala Yuvaraj20 June 2013 at 10:04

      Please post the screen shot of the error

      Delete
  7. Beegala Yuvaraj22 June 2013 at 10:08

    BLACK HOLE varibale is defined twice in your files. please check it should be added only once in aodv.h file and should be used in aodv.cc .....

    ReplyDelete
  8. Beegala Yuvaraj25 June 2013 at 06:07

    Please check the node number here in my example $n2 means second node. it may vary in ur file . please see to it.

    ReplyDelete
  9. Sir,

    i forgot to mention that i'm using AOMDV protocol in my project..

    ReplyDelete
    Replies
    1. Beegala Yuvaraj27 June 2013 at 10:15

      hi neeta, can u please explain which program u r not able to run . please snsure that ur AOMDV s working and u r able to execute TCL file and generate trace files. For Black Hole attack plz usse AODV protocol, so that u can get more help online

      Delete
  10. I am sorry to reply u late as i am busy with my work . please try with some other source as of now . i ll get back with sol as soon as possible

    ReplyDelete
  11. Hello sir, i have implemented the blackhole attack as you said but while running the tcl script i'm getting the following error:

    Direction for pkt-flow not specified; Sending pkt up the stack on default.

    Direction for pkt-flow not specified; Sending pkt up the stack on default.

    Direction for pkt-flow not specified; Sending pkt up the stack on default.

    Direction for pkt-flow not specified; Sending pkt up the stack on default.

    Direction for pkt-flow not specified; Sending pkt up the stack on default.

    check_pktTx:Invalid MAC Control subtype

    plz help me to solve this problem...

    ReplyDelete
  12. Hello Sir, I have implemented blackhole attack in AODV protocol successfully.. Now I want to overcome this blackhole attack by making some modifications in AODV protocol. For that, i want to add a new routing table in the protocol. How can i do it?
    Plz suggest me...

    ReplyDelete
  13. The code added in Step-6 is dead code. It never gets executed. What actually happens is that complete communication ceases. This does not seem to be blackhole. Kindly check.

    ReplyDelete
  14. I want to know how to create co-operative black hole attack in aodv

    ReplyDelete
  15. Hello Mr.Yuvraj! I want the code for blackhole attack on aodv protocol in tcl script. Please send me the code . Thanks and regards in advance.

    ReplyDelete
    Replies
    1. did u get that code..?
      if u have please send me at vishesh.gupta_mtcs17@gla.ac.in

      Delete
  16. Hello sir; there is a solution for this attack?

    ReplyDelete
  17. hello Mr.Yuvraj! could help me to modify AOMDV To Simulate Black Hole Behavior in NS2?
    thank you

    ReplyDelete
    Replies
    1. hello Anonymous! could help me to modify AOMDV To Simulate Black Hole Behavior in NS2?
      thank you

      Delete
  18. hello sir,
    kindly tell me how to detect and mitigate black hole attack in DSR protocol using ns2?

    ReplyDelete
  19. everyone give me IASAODV.cc
    thank everyone

    ReplyDelete
  20. could help me to modify AOMDV To Simulate Black Hole Behavior in NS2?
    thank you

    ReplyDelete
  21. Hello Sir, i'm presently working on black hole, i have an algorithm and i'm stuck for over 8 months, please i need your help sir, will appreciate your response.

    Thank you.

    ReplyDelete
  22. Hello Sir, I followed the steps as provided above, but i get the error below:

    aodv/aodv.cc: In member function ‘virtual void AODV::recv(Packet*, Handler*)’:
    aodv/aodv.cc:579:32: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    if ( (u_int32_t)ih->saddr() == index)
    ^
    aodv/aodv.cc:643:27: error: a function-definition is not allowed here before ‘{’ token
    AODV::recvAODV(Packet *p) {
    ^
    aodv/aodv.cc:1429:1: error: expected ‘}’ at end of input
    }
    ^
    make: *** [aodv/aodv.o] Error 1

    Kindly assist.

    ReplyDelete