返回

为方便读者,本教材中连续四行及以上程序源码(脚本),本网站将直接提供,直接输入使用。

(1)第69页倒数第7行开始共4行代码如下:
if(strcmp(argv[1],"blackhole")==0){
blackhole=true;
return TCL_OK;
}
(2)第70页第18行开始4行代码如下:
if(blackhole == true){
drop(p,DROP_RTR_ROUTE_LOOP);
return;
}
(3)第70页倒数第11行共11行代码如下:
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);
}
(4)第71页第11行代码开始共10行代码如下:
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;
}
            }
(5)第71页倒数第2行到第74页第4行实验完整代码如下:
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
(6)第74页倒数第15行到第76页倒数第9行实验完整代码如下:
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