为方便读者,本教材中连续四行及以上程序源码(脚本),本网站将直接提供,直接输入使用。
if(strcmp(argv[1],"blackhole")==0){
blackhole=true;
return TCL_OK;
}
if(blackhole == true){
drop(p,DROP_RTR_ROUTE_LOOP);
return;
}
else if(blackhole==true){
seqno=max(seqno,rq->rq_dst_seqno)+1;
if(seqno%2) seqno++;
sendReply(rq->rq_src,
1,
rq->rq_dst,
seqno,
MY_ROUTE_TIMEOUT,
rq->rq_timestamp);
Packet::free(p);
}
if(grayhole==true){
float time=CURRENT_TIME;
srand((unsigned)CURRENT_TIME);
int random_integer=rand();
int drop_flag=(random_integer%2);
if(drop_flag){
drop(p,DROP_RTR_ROUTE_LOOP);
return;
}
}
set val(chan) Channel/WirelessChannel
set val(prop) Propagation/TwoRayGround
set val(netif) Phy/WirelessPhy
set val(mac) Mac/802_11
set val(ifq) Queue/DropTail/PriQueue
set val(ll) LL
set val(ant) Antenna/OmniAntenna
set val(ifqlen) 100
set val(nn) 4
set val(rp) AODV
set val(x) 1000
set val(y) 500
set val(stop) 20.0
set ns [new Simulator]
set topo [new Topography]
$topo load_flatgrid $val(x) $val(y)
create-god $val(nn)
set tracefile [open Blackhole.tr w]
$ns trace-all $tracefile
set namfile [open Blackhole.nam w]
$ns namtrace-all $namfile
$ns namtrace-all-wireless $namfile $val(x) $val(y)
set chan [new $val(chan)]
$ns node-config -adhocRouting $val(rp) \
-llType $val(ll) \
-macType $val(mac) \
-ifqType $val(ifq) \
-ifqLen $val(ifqlen) \
-antType $val(ant) \
-propType $val(prop) \
-phyType $val(netif) \
-channel $chan \
-topoInstance $topo \
-agentTrace ON \
-routerTrace ON \
-macTrace OFF \
-movementTrace OFF
set n0 [$ns node]
$n0 set X_ 200
$n0 set Y_ 250
$n0 set Z_ 0.0
$ns initial_node_pos $n0 40
set n1 [$ns node]
$n1 set X_ 400
$n1 set Y_ 250
$n1 set Z_ 0.0
$ns initial_node_pos $n1 40
set n2 [$ns node]
$n2 set X_ 600
$n2 set Y_ 250
$n2 set Z_ 0.0
$ns initial_node_pos $n2 40
set n3 [$ns node]
$n3 set X_ 800
$n3 set Y_ 250
$n3 set Z_ 0.0
$ns initial_node_pos $n3 40
$ns at 6.0 "[$n1 set ragent_] blackhole";# 开启黑洞攻击
$ns at 6.0 "$n1 label \"Blackhole Node\"";# nam动画标注
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set null1 [new Agent/Null]
$ns attach-agent $n3 $null1
$ns connect $udp0 $null1
$udp0 set packetSize_ 1500
set cbr0 [new Application/Traffic/CBR]
$cbr0 attach-agent $udp0
$cbr0 set packetSize_ 1000
$cbr0 set rate_ 500Kb
$cbr0 set random_ null
$ns at 1.0 "$cbr0 start"
$ns at 20.0 "$cbr0 stop"
proc finish {} {
global ns tracefile namfile
$ns flush-trace
close $tracefile
close $namfile
exit 0
}
for {set i 0} {$i < $val(nn) } { incr i } {
$ns at $val(stop) "\$n$i reset"
}
$ns at $val(stop) "$ns nam-end-wireless $val(stop)"
$ns at $val(stop) "finish"
$ns at $val(stop) "puts \"done\" ; $ns halt"
$ns run
set val(chan) Channel/WirelessChannel
set val(prop) Propagation/TwoRayGround
set val(netif) Phy/WirelessPhy
set val(mac) Mac/802_11
set val(ifq) Queue/DropTail/PriQueue
set val(ll) LL
set val(ant) Antenna/OmniAntenna
set val(ifqlen) 100
set val(nn) 4
set val(rp) AODV
set val(x) 1000
set val(y) 500
set val(stop) 20.0
set ns [new Simulator]
set topo [new Topography]
$topo load_flatgrid $val(x) $val(y)
create-god $val(nn)
set tracefile [open Grayhole.tr w]
$ns trace-all $tracefile
set namfile [open Grayhole.nam w]
$ns namtrace-all $namfile
$ns namtrace-all-wireless $namfile $val(x) $val(y)
set chan [new $val(chan)]
$ns node-config -adhocRouting $val(rp) \
-llType $val(ll) \
-macType $val(mac) \
-ifqType $val(ifq) \
-ifqLen $val(ifqlen) \
-antType $val(ant) \
-propType $val(prop) \
-phyType $val(netif) \
-channel $chan \
-topoInstance $topo \
-agentTrace ON \
-routerTrace ON \
-macTrace OFF \
-movementTrace OFF
set n0 [$ns node]
$n0 set X_ 200
$n0 set Y_ 250
$n0 set Z_ 0.0
$ns initial_node_pos $n0 40
set n1 [$ns node]
$n1 set X_ 400
$n1 set Y_ 250
$n1 set Z_ 0.0
$ns initial_node_pos $n1 40
set n2 [$ns node]
$n2 set X_ 600
$n2 set Y_ 250
$n2 set Z_ 0.0
$ns initial_node_pos $n2 40
set n3 [$ns node]
$n3 set X_ 800
$n3 set Y_ 250
$n3 set Z_ 0.0
$ns initial_node_pos $n3 40
$ns at 6.0 "[$n1 set ragent_] grayhole "
$ns at 6.0 "$n1 label \"Grayhole Node\""
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set null1 [new Agent/Null]
$ns attach-agent $n3 $null1
$ns connect $udp0 $null1
$udp0 set packetSize_ 1500
set cbr0 [new Application/Traffic/CBR]
$cbr0 attach-agent $udp0
$cbr0 set packetSize_ 1000
$cbr0 set rate_ 500Kb
$cbr0 set random_ null
$ns at 1.0 "$cbr0 start"
$ns at 20.0 "$cbr0 stop"
proc finish {} {
global ns tracefile namfile
$ns flush-trace
close $tracefile
close $namfile
exit 0
}
for {set i 0} {$i < $val(nn) } { incr i } {
$ns at $val(stop) "\$n$i reset"
}
$ns at $val(stop) "$ns nam-end-wireless $val(stop)"
$ns at $val(stop) "finish"
$ns at $val(stop) "puts \"done\" ; $ns halt"
$ns run