mt_racket 1.0.12a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README +76 -0
- data/examples/arp-send +24 -0
- data/examples/arp-send2 +30 -0
- data/examples/cdp +39 -0
- data/examples/cdp-spew +52 -0
- data/examples/dhcp +42 -0
- data/examples/dhcp-spew +48 -0
- data/examples/dns +38 -0
- data/examples/egp +30 -0
- data/examples/hsrp +43 -0
- data/examples/hsrp_takeover +69 -0
- data/examples/icmp-recv +34 -0
- data/examples/icmp-spew +50 -0
- data/examples/icmpv6 +84 -0
- data/examples/icmpv6-spew +50 -0
- data/examples/igmpv1 +27 -0
- data/examples/igmpv2 +27 -0
- data/examples/igrp-send +25 -0
- data/examples/ipv6 +35 -0
- data/examples/nat-pimp +32 -0
- data/examples/ntp +38 -0
- data/examples/ntp2 +42 -0
- data/examples/sctp +32 -0
- data/examples/stp-send +21 -0
- data/examples/synflood +147 -0
- data/examples/tcp +43 -0
- data/examples/tcp2udp +65 -0
- data/examples/udp +46 -0
- data/examples/vrrp +34 -0
- data/examples/vtp +28 -0
- data/lib/racket/l2/eightotwodotthree.rb +48 -0
- data/lib/racket/l2/ethernet.rb +62 -0
- data/lib/racket/l2/llc.rb +50 -0
- data/lib/racket/l2/misc.rb +67 -0
- data/lib/racket/l2/snap.rb +40 -0
- data/lib/racket/l2/vlan.rb +61 -0
- data/lib/racket/l2/vtp.rb +124 -0
- data/lib/racket/l2.rb +30 -0
- data/lib/racket/l3/arp.rb +63 -0
- data/lib/racket/l3/cdp.rb +85 -0
- data/lib/racket/l3/egp.rb +53 -0
- data/lib/racket/l3/ipv4.rb +132 -0
- data/lib/racket/l3/ipv6.rb +66 -0
- data/lib/racket/l3/misc.rb +159 -0
- data/lib/racket/l3/stp.rb +81 -0
- data/lib/racket/l3.rb +30 -0
- data/lib/racket/l4/gre.rb +65 -0
- data/lib/racket/l4/icmp.rb +295 -0
- data/lib/racket/l4/icmpv6.rb +446 -0
- data/lib/racket/l4/igmpv1.rb +79 -0
- data/lib/racket/l4/igmpv2.rb +76 -0
- data/lib/racket/l4/igrp.rb +138 -0
- data/lib/racket/l4/misc.rb +35 -0
- data/lib/racket/l4/sctp.rb +163 -0
- data/lib/racket/l4/tcp.rb +152 -0
- data/lib/racket/l4/udp.rb +81 -0
- data/lib/racket/l4/vrrp.rb +95 -0
- data/lib/racket/l4.rb +30 -0
- data/lib/racket/l5/bootp.rb +106 -0
- data/lib/racket/l5/dns.rb +110 -0
- data/lib/racket/l5/hsrp.rb +73 -0
- data/lib/racket/l5/misc.rb +35 -0
- data/lib/racket/l5/nat-pmp.rb +41 -0
- data/lib/racket/l5/ntp.rb +59 -0
- data/lib/racket/l5.rb +30 -0
- data/lib/racket/misc/lv.rb +108 -0
- data/lib/racket/misc/misc.rb +62 -0
- data/lib/racket/misc/orderedhash.rb +63 -0
- data/lib/racket/misc/raw.rb +35 -0
- data/lib/racket/misc/tlv.rb +103 -0
- data/lib/racket/misc/vt.rb +114 -0
- data/lib/racket/misc.rb +30 -0
- data/lib/racket/racket.rb +166 -0
- data/lib/racket/racketpart.rb +66 -0
- data/lib/racket.rb +4 -0
- data/test/l2/ts_ethernet.rb +22 -0
- data/test/l2/ts_misc.rb +23 -0
- data/test/l2/ts_vlan.rb +15 -0
- data/test/l3/ts_ipv4.rb +44 -0
- data/test/l3/ts_ipv6.rb +26 -0
- data/test/l3/ts_misc.rb +31 -0
- data/test/l4/ts_icmp.rb +38 -0
- data/test/l4/ts_tcp.rb +55 -0
- data/test/l4/ts_udp.rb +40 -0
- data/test/misc/ts_lv.rb +59 -0
- data/test/misc/ts_orderedhash.rb +33 -0
- data/test/misc/ts_tlv.rb +47 -0
- data/test/misc/ts_vt.rb +56 -0
- data/test/ts_all.rb +14 -0
- metadata +153 -0
@@ -0,0 +1,50 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# $Id$
|
4
|
+
#
|
5
|
+
# Given a source and destination IP address
|
6
|
+
# and a data size, spew all 65536 possible ICMPv6
|
7
|
+
|
8
|
+
require 'rubygems'
|
9
|
+
require 'racket'
|
10
|
+
|
11
|
+
include Racket
|
12
|
+
if (ARGV.size != 4)
|
13
|
+
puts "Usage #{$0} <interface> <src_ip> <dst_ip> <icmp data size>"
|
14
|
+
exit!
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
def tick
|
19
|
+
@it += 1
|
20
|
+
@it = 0 if @it >= @ticks.size
|
21
|
+
print "\r#{@ticks[@it]}"
|
22
|
+
STDOUT.flush
|
23
|
+
end
|
24
|
+
|
25
|
+
def rand_icmp6(n)
|
26
|
+
n.l4 = L4::ICMPv6.new(Misc.randstring(40))
|
27
|
+
n.l4.payload = Misc.randstring(ARGV[3].to_i)
|
28
|
+
n.l4.fix!(n.l3.src_ip, n.l3.dst_ip)
|
29
|
+
n.sendpacket
|
30
|
+
tick
|
31
|
+
end
|
32
|
+
|
33
|
+
@it = 0
|
34
|
+
@ticks = %w( / - \\ | )
|
35
|
+
|
36
|
+
n = Racket::Racket.new
|
37
|
+
n.iface = ARGV[0]
|
38
|
+
n.l2 = L2::Ethernet.new(Misc.randstring(14))
|
39
|
+
n.l2.ethertype = 0x86DD
|
40
|
+
n.l3 = L3::IPv6.new
|
41
|
+
n.l3.src_ip= L3::Misc.ipv62long(ARGV[1])
|
42
|
+
n.l3.dst_ip= L3::Misc.ipv62long(ARGV[2])
|
43
|
+
n.l3.nhead = 58
|
44
|
+
|
45
|
+
puts "Spewing..."
|
46
|
+
while (true)
|
47
|
+
rand_icmp6(n)
|
48
|
+
end
|
49
|
+
|
50
|
+
# vim: set ts=2 et sw=2:
|
data/examples/igmpv1
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# $Id$
|
4
|
+
#
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'racket'
|
8
|
+
|
9
|
+
include Racket
|
10
|
+
if (ARGV.size != 4)
|
11
|
+
puts "Usage #{$0} <src_ip> <dst_ip> <igmp code> <gaddr>"
|
12
|
+
exit!
|
13
|
+
end
|
14
|
+
|
15
|
+
n = Racket::Racket.new
|
16
|
+
n.l3 = L3::IPv4.new
|
17
|
+
|
18
|
+
n.l3.src_ip = ARGV[0]
|
19
|
+
n.l3.dst_ip = ARGV[1]
|
20
|
+
n.l3.protocol = 2
|
21
|
+
|
22
|
+
n.l4 = L4::IGMPv1.new
|
23
|
+
n.l4.type = ARGV[2].to_i
|
24
|
+
n.l4.gaddr = ARGV[3]
|
25
|
+
|
26
|
+
f = n.sendpacket
|
27
|
+
puts "Sent #{f} bytes"
|
data/examples/igmpv2
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# $Id$
|
4
|
+
#
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'racket'
|
8
|
+
|
9
|
+
include Racket
|
10
|
+
if (ARGV.size != 4)
|
11
|
+
puts "Usage #{$0} <src_ip> <dst_ip> <igmp code> <gaddr>"
|
12
|
+
exit!
|
13
|
+
end
|
14
|
+
|
15
|
+
n = Racket::Racket.new
|
16
|
+
n.l3 = L3::IPv4.new
|
17
|
+
|
18
|
+
n.l3.src_ip = ARGV[0]
|
19
|
+
n.l3.dst_ip = ARGV[1]
|
20
|
+
n.l3.protocol = 2
|
21
|
+
|
22
|
+
n.l4 = L4::IGMPv1.new
|
23
|
+
n.l4.type = ARGV[2].to_i
|
24
|
+
n.l4.gaddr = ARGV[3]
|
25
|
+
|
26
|
+
f = n.sendpacket
|
27
|
+
puts "Sent #{f} bytes"
|
data/examples/igrp-send
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# $Id$
|
4
|
+
#
|
5
|
+
# Send IGRP packets. Needs work... obviously.
|
6
|
+
require 'rubygems'
|
7
|
+
require 'racket'
|
8
|
+
|
9
|
+
include Racket
|
10
|
+
n = Racket::Racket.new
|
11
|
+
n.iface = "eth0"
|
12
|
+
|
13
|
+
n.l2 = L2::Ethernet.new(Misc.randstring(14))
|
14
|
+
n.l2.ethertype = 0x800
|
15
|
+
|
16
|
+
n.l3 = L3::IPv4.new
|
17
|
+
n.l3.protocol = 9
|
18
|
+
|
19
|
+
n.l4 = L4::IGRP.new()
|
20
|
+
n.l4.version = 1
|
21
|
+
n.l4.opcode = 1
|
22
|
+
n.l4.add_system(0xFFFFFF, 1, 2, 3, 4, 5, 6)
|
23
|
+
n.l4.add_exterior(0x12345, 6, 7, 8, 9, 0xa, 0xb)
|
24
|
+
n.l4.add_interior(0x67890, 6, 7, 8, 9, 0xa, 0xb)
|
25
|
+
n.sendpacket
|
data/examples/ipv6
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# $Id$
|
4
|
+
#
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'racket'
|
8
|
+
|
9
|
+
include Racket
|
10
|
+
unless (ARGV.size == 2)
|
11
|
+
puts "Usage: #{$0} <srcip> <dstip>"
|
12
|
+
exit
|
13
|
+
end
|
14
|
+
|
15
|
+
n = Racket::Racket.new
|
16
|
+
n.iface = "eth0"
|
17
|
+
|
18
|
+
n.l2 = L2::Ethernet.new(Misc.randstring(14))
|
19
|
+
n.l2.ethertype = 0x86DD
|
20
|
+
|
21
|
+
n.l3 = L3::IPv6.new
|
22
|
+
n.l3.src_ip = L3::Misc.ipv62long(ARGV[0])
|
23
|
+
n.l3.dst_ip = L3::Misc.ipv62long(ARGV[1])
|
24
|
+
n.l3.nhead = 17
|
25
|
+
|
26
|
+
n.l4 = L4::UDP.new
|
27
|
+
n.l4.src_port = 12345
|
28
|
+
n.l4.dst_port = 123
|
29
|
+
n.l4.fix!(n.l3.src_ip, n.l3.dst_ip)
|
30
|
+
|
31
|
+
f = n.sendpacket
|
32
|
+
n.layers.compact.each do |l|
|
33
|
+
puts l.pretty
|
34
|
+
end
|
35
|
+
#puts "Sent #{f}"
|
data/examples/nat-pimp
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
require 'rubygems'
|
4
|
+
require 'racket'
|
5
|
+
|
6
|
+
include Racket
|
7
|
+
if (ARGV.size != 5)
|
8
|
+
puts "Usage #{$0} <src_ip> <dst_ip> <op> <internal_port> <external_port>"
|
9
|
+
exit!
|
10
|
+
end
|
11
|
+
|
12
|
+
n = Racket::Racket.new
|
13
|
+
n.iface = "eth0"
|
14
|
+
n.l3 = L3::IPv4.new
|
15
|
+
n.l3.src_ip= ARGV[0]
|
16
|
+
n.l3.dst_ip = ARGV[1]
|
17
|
+
n.l3.version = 0x4
|
18
|
+
n.l3.hlen = 0x5
|
19
|
+
n.l3.protocol = 0x11
|
20
|
+
n.l3.flags = 0x0
|
21
|
+
n.l3.foffset = 0x0
|
22
|
+
n.l4 = L4::UDP.new
|
23
|
+
n.l4.src_port = 5350
|
24
|
+
n.l4.dst_port = 5351
|
25
|
+
n.l5 = L5::NATPMPMappingRequest.new(:opcode => ARGV[2].to_i, :internal_port => ARGV[3].to_i, :external_port => ARGV[4].to_i)
|
26
|
+
n.l5.opcode = ARGV[2].to_i
|
27
|
+
n.l5.lifetime = 999999
|
28
|
+
n.l4.payload = n.l5
|
29
|
+
n.l4.fix!(n.l3.src_ip, n.l3.dst_ip)
|
30
|
+
n.l4.payload = ""
|
31
|
+
n.sendpacket
|
32
|
+
# vim: set ts=2 et sw=2:
|
data/examples/ntp
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# $Id$
|
4
|
+
#
|
5
|
+
# Send lolcat NTP packets
|
6
|
+
|
7
|
+
require 'rubygems'
|
8
|
+
require 'racket'
|
9
|
+
|
10
|
+
include Racket
|
11
|
+
unless (ARGV.size == 2)
|
12
|
+
puts "Usage: #{$0} <srcip> <dstip>"
|
13
|
+
exit
|
14
|
+
end
|
15
|
+
|
16
|
+
n = Racket::Racket.new
|
17
|
+
n.iface = "eth0"
|
18
|
+
|
19
|
+
n.l3 = L3::IPv4.new
|
20
|
+
n.l3.src_ip = ARGV[0]
|
21
|
+
n.l3.dst_ip = ARGV[1]
|
22
|
+
n.l3.protocol = 0x11
|
23
|
+
|
24
|
+
n.l4 = L4::UDP.new
|
25
|
+
n.l4.src_port = 12345
|
26
|
+
n.l4.dst_port = 123
|
27
|
+
|
28
|
+
n.l5 = L5::NTP.new("I'm in your ntp, stealin ur time")
|
29
|
+
|
30
|
+
n.l4.payload = n.l5
|
31
|
+
n.l4.fix!(n.l3.src_ip, n.l3.dst_ip)
|
32
|
+
n.l4.payload = ""
|
33
|
+
|
34
|
+
f = n.sendpacket
|
35
|
+
n.layers.compact.each do |l|
|
36
|
+
puts l.pretty
|
37
|
+
end
|
38
|
+
puts "Sent #{f}"
|
data/examples/ntp2
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# $Id$
|
4
|
+
#
|
5
|
+
# Send lolcat NTP packets
|
6
|
+
|
7
|
+
require 'rubygems'
|
8
|
+
require 'racket'
|
9
|
+
|
10
|
+
include Racket
|
11
|
+
unless (ARGV.size == 2)
|
12
|
+
puts "Usage: #{$0} <srcip> <dstip>"
|
13
|
+
exit
|
14
|
+
end
|
15
|
+
|
16
|
+
n = Racket::Racket.new
|
17
|
+
n.iface = "eth0"
|
18
|
+
|
19
|
+
n.l3 = L3::IPv4.new
|
20
|
+
n.l3.src_ip = ARGV[0]
|
21
|
+
n.l3.dst_ip = ARGV[1]
|
22
|
+
n.l3.protocol = 0x11
|
23
|
+
n.l3.add_option(4, "wt")
|
24
|
+
n.l3.add_option(136, "aa")
|
25
|
+
n.l3.add_option(130, "123456789")
|
26
|
+
n.l3.add_option(148, "yz")
|
27
|
+
|
28
|
+
n.l4 = L4::UDP.new
|
29
|
+
n.l4.src_port = 12345
|
30
|
+
n.l4.dst_port = 123
|
31
|
+
|
32
|
+
n.l5 = L5::NTP.new("I'm in your ntp, stealin ur time")
|
33
|
+
|
34
|
+
n.l4.payload = n.l5
|
35
|
+
n.l4.fix!(n.l3.src_ip, n.l3.dst_ip)
|
36
|
+
n.l4.payload = ""
|
37
|
+
|
38
|
+
f = n.sendpacket
|
39
|
+
n.layers.compact.each do |l|
|
40
|
+
puts l.pretty
|
41
|
+
end
|
42
|
+
puts "Sent #{f}"
|
data/examples/sctp
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# $Id$
|
4
|
+
#
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'racket'
|
8
|
+
|
9
|
+
include Racket
|
10
|
+
unless (ARGV.size == 4)
|
11
|
+
puts "Usage: #{$0} <srcip> <srcport> <dstip> <dstport>"
|
12
|
+
exit
|
13
|
+
end
|
14
|
+
|
15
|
+
n = Racket::Racket.new
|
16
|
+
n.iface = "eth0"
|
17
|
+
|
18
|
+
n.l3 = L3::IPv4.new
|
19
|
+
n.l3.src_ip = ARGV[0]
|
20
|
+
n.l3.dst_ip = ARGV[2]
|
21
|
+
n.l3.protocol = 132
|
22
|
+
|
23
|
+
n.l4 = L4::SCTP.new
|
24
|
+
n.l4.src_port = ARGV[1].to_i
|
25
|
+
n.l4.dst_port = ARGV[3].to_i
|
26
|
+
#n.l4.add_chunk(1, 2, 8, "blah")
|
27
|
+
|
28
|
+
f = n.sendpacket
|
29
|
+
n.layers.compact.each do |l|
|
30
|
+
puts l.pretty
|
31
|
+
end
|
32
|
+
puts "Sent #{f}"
|
data/examples/stp-send
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# $Id$
|
4
|
+
#
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'racket'
|
8
|
+
|
9
|
+
include Racket
|
10
|
+
n = Racket::Racket.new
|
11
|
+
n.iface = "eth0"
|
12
|
+
|
13
|
+
n.layers[2] = L2::EightOTwoDotThree.new
|
14
|
+
n.layers[3] = L2::LLC.new()
|
15
|
+
n.layers[4] = L2::SNAP.new()
|
16
|
+
n.layers[4].pid = 0x010b
|
17
|
+
|
18
|
+
n.layers[5] = L3::STP.new()
|
19
|
+
n.layers[5].version = 2
|
20
|
+
|
21
|
+
n.sendpacket
|
data/examples/synflood
ADDED
@@ -0,0 +1,147 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
# $Id$
|
3
|
+
# Simple SYN flooder with randomness built in, using Racket
|
4
|
+
# Use at your own risk
|
5
|
+
#
|
6
|
+
# Jon Hart <jhart@spoofed.org>
|
7
|
+
|
8
|
+
require 'rubygems'
|
9
|
+
require 'racket'
|
10
|
+
require 'monitor'
|
11
|
+
require 'optparse'
|
12
|
+
require 'ostruct'
|
13
|
+
|
14
|
+
include Racket
|
15
|
+
|
16
|
+
class Options
|
17
|
+
def self.parse(name, args)
|
18
|
+
options = OpenStruct.new
|
19
|
+
options.verbose = false
|
20
|
+
options.srcport = nil
|
21
|
+
options.dstport = nil
|
22
|
+
options.srcip = nil
|
23
|
+
options.dstip = nil
|
24
|
+
options.packets = nil
|
25
|
+
options.threads = 1
|
26
|
+
|
27
|
+
opts = OptionParser.new do |opts|
|
28
|
+
opts.banner = "#{File.basename(name)}"
|
29
|
+
opts.banner += "Usage: #{name} [options]"
|
30
|
+
|
31
|
+
opts.on("--srcip SOURCEIP", "Source IP address (default: random)") do |o|
|
32
|
+
options.srcip = o
|
33
|
+
end
|
34
|
+
|
35
|
+
opts.on("--dstip DESTIP", "Destination IP address (required)") do |o|
|
36
|
+
options.dstip = o
|
37
|
+
end
|
38
|
+
|
39
|
+
opts.on("--srcport SRCPORT", "Source port (default: random)") do |o|
|
40
|
+
options.srcport = o.to_i
|
41
|
+
end
|
42
|
+
|
43
|
+
opts.on("--dstport DSTPORT", "Destination port (default: random)") do |o|
|
44
|
+
options.dstport = o.to_i
|
45
|
+
end
|
46
|
+
|
47
|
+
opts.on("--threads NUMTHREADS", "Number of writing threads (default: 1)") do |o|
|
48
|
+
options.threads = o.to_i
|
49
|
+
end
|
50
|
+
|
51
|
+
opts.on("--packets NUMPACKETS", "Number of packets to send (default: infinite)") do |o|
|
52
|
+
options.packets = o.to_i
|
53
|
+
end
|
54
|
+
opts.on_tail("-h", "--help", "Show this help message.") { puts opts; exit }
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
begin
|
59
|
+
opts.parse!(args)
|
60
|
+
rescue OptionParser::ParseError => e
|
61
|
+
puts "#{e}\n\n#{opts}"
|
62
|
+
exit(1)
|
63
|
+
end
|
64
|
+
options.help = opts
|
65
|
+
options
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
@options = Options.parse($0, ARGV)
|
70
|
+
|
71
|
+
if (@options.dstip.nil?)
|
72
|
+
puts "Destination IP required"
|
73
|
+
puts @options.help
|
74
|
+
exit(1)
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
@p = Racket::Racket.new
|
79
|
+
@p.iface = "eth0"
|
80
|
+
|
81
|
+
@p.l3 = L3::IPv4.new
|
82
|
+
@p.l3.src_ip = @options.srcip.nil? ? "0.0.0.0" : @options.srcip
|
83
|
+
@p.l3.dst_ip = @options.dstip.nil? ? "0.0.0.0" : @options.dstip
|
84
|
+
@p.l3.protocol = 6
|
85
|
+
|
86
|
+
@p.l4 = L4::TCP.new
|
87
|
+
@p.l4.dst_port = @options.dstport.nil? ? 0 : @options.dstport
|
88
|
+
@p.l4.src_port = @options.srcport.nil? ? 0 : @options.srcport
|
89
|
+
@p.l4.flag_syn = 1
|
90
|
+
|
91
|
+
t1 = Time.new
|
92
|
+
i = 0
|
93
|
+
|
94
|
+
class Flood < Monitor
|
95
|
+
attr_reader :count
|
96
|
+
def initialize
|
97
|
+
@count = 0
|
98
|
+
super
|
99
|
+
end
|
100
|
+
|
101
|
+
def flood(packet, options)
|
102
|
+
@packet = packet
|
103
|
+
@options = options
|
104
|
+
begin
|
105
|
+
if ( (! @options.packets.nil?) && @options.packets < @count)
|
106
|
+
break
|
107
|
+
end
|
108
|
+
|
109
|
+
if (@options.srcip.nil?)
|
110
|
+
@packet.l3.src_ip = L3::Misc.long2ipv4(rand(2**32))
|
111
|
+
end
|
112
|
+
|
113
|
+
if (@options.srcport.nil?)
|
114
|
+
@packet.l4.src_port = 1024 + rand(65535-1024)
|
115
|
+
end
|
116
|
+
|
117
|
+
if (@options.dstport.nil?)
|
118
|
+
@packet.l4.dst_port = 1024 + rand(65535-1024)
|
119
|
+
end
|
120
|
+
|
121
|
+
@packet.l4.fix!(@packet.l3.src_ip, @packet.l3.dst_ip, "")
|
122
|
+
|
123
|
+
synchronize do
|
124
|
+
@count += 1
|
125
|
+
@packet.sendpacket
|
126
|
+
end
|
127
|
+
end while (true)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
|
132
|
+
t1 = Time.new
|
133
|
+
f = Flood.new
|
134
|
+
threads = []
|
135
|
+
(1.upto(@options.threads)).each do |t|
|
136
|
+
threads << Thread.new { f.flood(@p, @options) }
|
137
|
+
end
|
138
|
+
|
139
|
+
threads.each do |t|
|
140
|
+
t.join
|
141
|
+
end
|
142
|
+
t2 = Time.new
|
143
|
+
|
144
|
+
time = t2 - t1
|
145
|
+
|
146
|
+
puts "Sent #{f.count} packets in #{time} seconds (#{"%.0f" % (f.count/time).to_f} pps)"
|
147
|
+
|
data/examples/tcp
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# $Id$
|
4
|
+
#
|
5
|
+
# Send a DNS request
|
6
|
+
|
7
|
+
require 'rubygems'
|
8
|
+
require 'racket'
|
9
|
+
|
10
|
+
include Racket
|
11
|
+
unless (ARGV.size == 3)
|
12
|
+
puts "Usage: #{$0} <srcip> <dstip> <domain>"
|
13
|
+
exit
|
14
|
+
end
|
15
|
+
|
16
|
+
n = Racket::Racket.new
|
17
|
+
n.iface = "eth0"
|
18
|
+
|
19
|
+
n.l3 = Racket::L3::IPv4.new
|
20
|
+
n.l3.src_ip = ARGV[0]
|
21
|
+
n.l3.dst_ip = ARGV[1]
|
22
|
+
n.l3.protocol = 0x6
|
23
|
+
|
24
|
+
n.l4 = Racket::L4::TCP.new
|
25
|
+
n.l4.src_port = 48484
|
26
|
+
n.l4.seq = 0xabcdef
|
27
|
+
n.l4.ack = 0xfedcba
|
28
|
+
n.l4.flag_ack = 1
|
29
|
+
n.l4.flag_psh = 1
|
30
|
+
n.l4.dst_port = 53
|
31
|
+
n.l4.window = 4445
|
32
|
+
|
33
|
+
n.l5 = Racket::L5::DNS.new
|
34
|
+
n.l5.tx_id = 1234
|
35
|
+
#n.l5.add_question(ARGV[2], 1, 1)
|
36
|
+
n.l4.add_option(2, "\xff\xee")
|
37
|
+
n.l4.fix!(n.l3.src_ip, n.l3.dst_ip, n.l5)
|
38
|
+
|
39
|
+
f = n.sendpacket
|
40
|
+
n.layers.compact.each do |l|
|
41
|
+
puts l.pretty
|
42
|
+
end
|
43
|
+
puts "Sent #{f}"
|
data/examples/tcp2udp
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# $Id$
|
4
|
+
#
|
5
|
+
#
|
6
|
+
# Spew TCP packets back at the source but in UDP form. Gross.
|
7
|
+
# Pointless.
|
8
|
+
|
9
|
+
|
10
|
+
require 'rubygems'
|
11
|
+
require 'pcaprub'
|
12
|
+
require 'racket'
|
13
|
+
|
14
|
+
include Racket
|
15
|
+
|
16
|
+
|
17
|
+
if (ARGV.size < 1)
|
18
|
+
puts "Usage: #{$0} <iface> [filter]"
|
19
|
+
exit
|
20
|
+
end
|
21
|
+
|
22
|
+
begin
|
23
|
+
p = Pcap::open_live(ARGV[0], 1500, true, 1000)
|
24
|
+
unless (ARGV[1].nil?)
|
25
|
+
p.setfilter(ARGV[1])
|
26
|
+
end
|
27
|
+
rescue Exception => e
|
28
|
+
puts "Pcap: Cannot open device #{ARGV[0]}: #{e}"
|
29
|
+
exit
|
30
|
+
end
|
31
|
+
|
32
|
+
p.each do |pkt|
|
33
|
+
if (p.datalink == Pcap::DLT_EN10MB)
|
34
|
+
eth = L2::Ethernet.new(pkt)
|
35
|
+
case eth.ethertype
|
36
|
+
when 0x0800:
|
37
|
+
orig_ipv4 = L3::IPv4.new(eth.payload)
|
38
|
+
if (orig_ipv4.protocol == 6)
|
39
|
+
n = Racket::Racket.new
|
40
|
+
orig_tcp = L4::TCP.new(orig_ipv4.payload)
|
41
|
+
|
42
|
+
if (!orig_tcp.payload.nil?)
|
43
|
+
n.l3 = L3::IPv4.new
|
44
|
+
n.l4 = L4::UDP.new
|
45
|
+
n.l4.src_port = orig_tcp.dst_port
|
46
|
+
n.l4.dst_port = orig_tcp.src_port
|
47
|
+
n.l3.src_ip = orig_ipv4.dst_ip
|
48
|
+
n.l3.dst_ip = orig_ipv4.src_ip
|
49
|
+
n.l3.protocol = 17
|
50
|
+
|
51
|
+
n.l4.payload = orig_tcp.payload
|
52
|
+
n.l4.fix!(n.l3.src_ip, n.l3.dst_ip)
|
53
|
+
|
54
|
+
f = n.sendpacket
|
55
|
+
puts "Sent #{f}"
|
56
|
+
n.layers.compact.each do |l|
|
57
|
+
puts l.pretty
|
58
|
+
end
|
59
|
+
exit
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
# vim: set ts=2 et sw=2:
|
data/examples/udp
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# $Id$
|
4
|
+
#
|
5
|
+
# Send random garbage to a UDP port
|
6
|
+
|
7
|
+
require 'rubygems'
|
8
|
+
require 'racket'
|
9
|
+
|
10
|
+
include Racket
|
11
|
+
unless (ARGV.size == 4)
|
12
|
+
puts "Usage: #{$0} <srcip> <dstip> <dst_port> <size>"
|
13
|
+
exit
|
14
|
+
end
|
15
|
+
|
16
|
+
# create a new Racket object and pick an interface
|
17
|
+
n = Racket::Racket.new
|
18
|
+
n.iface = "eth0"
|
19
|
+
|
20
|
+
# skip right to layer3, layer2 will be done automatically
|
21
|
+
# build a new IPv4 layer, and assign src and dst ip from the command line
|
22
|
+
n.l3 = L3::IPv4.new
|
23
|
+
n.l3.src_ip = ARGV[0]
|
24
|
+
n.l3.dst_ip = ARGV[1]
|
25
|
+
n.l3.protocol = 0x11
|
26
|
+
|
27
|
+
# tack on UDP
|
28
|
+
n.l4 = L4::UDP.new
|
29
|
+
# randomize source port
|
30
|
+
n.l4.src_port = 1024 + rand(65535-1024)
|
31
|
+
# take destination port from the commandline
|
32
|
+
n.l4.dst_port = ARGV[2].to_i
|
33
|
+
# build a random amount of garbage for the payload
|
34
|
+
n.l4.payload = Misc.randstring(ARGV[3].to_i)
|
35
|
+
|
36
|
+
# fix 'er up (checksum, length) prior to sending
|
37
|
+
n.l4.fix!(n.l3.src_ip, n.l3.dst_ip)
|
38
|
+
|
39
|
+
# off you go
|
40
|
+
f = n.sendpacket
|
41
|
+
|
42
|
+
# print out what we built
|
43
|
+
n.layers.compact.each do |l|
|
44
|
+
puts l.pretty
|
45
|
+
end
|
46
|
+
puts "Sent #{f}"
|
data/examples/vrrp
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# $Id$
|
4
|
+
#
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'racket'
|
8
|
+
|
9
|
+
include Racket
|
10
|
+
unless (ARGV.size == 3)
|
11
|
+
puts "Usage: #{$0} <srcip> <dstip> <type>"
|
12
|
+
exit
|
13
|
+
end
|
14
|
+
|
15
|
+
n = Racket::Racket.new
|
16
|
+
n.iface = "eth0"
|
17
|
+
|
18
|
+
n.l3 = L3::IPv4.new
|
19
|
+
n.l3.src_ip = ARGV[0]
|
20
|
+
n.l3.dst_ip = ARGV[1]
|
21
|
+
n.l3.protocol = 112
|
22
|
+
|
23
|
+
n.l4 = L4::VRRP.new
|
24
|
+
n.l4.type = ARGV[2].to_i
|
25
|
+
n.l4.auth_type = 1
|
26
|
+
n.l4.add_ip("1.2.3.4")
|
27
|
+
n.l4.add_auth("haha")
|
28
|
+
#n.l4.payload = [ L3::Misc.ipv42long("1.2.3.4") ].pack("N")
|
29
|
+
|
30
|
+
f = n.sendpacket
|
31
|
+
n.layers.compact.each do |l|
|
32
|
+
puts l.pretty
|
33
|
+
end
|
34
|
+
puts "Sent #{f}"
|
data/examples/vtp
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# $Id$
|
4
|
+
#
|
5
|
+
# Send amusing CDP packets
|
6
|
+
require 'rubygems'
|
7
|
+
require '../lib/racket'
|
8
|
+
|
9
|
+
include Racket
|
10
|
+
n = Racket::Racket.new
|
11
|
+
n.iface = "eth0"
|
12
|
+
|
13
|
+
n.layers[2] = L2::EightOTwoDotThree.new(Misc.randstring(14))
|
14
|
+
n.layers[2].dst_mac = "01:00:0c:cc:cc:cc"
|
15
|
+
n.layers[3] = L2::LLC.new()
|
16
|
+
n.layers[4] = L2::SNAP.new()
|
17
|
+
n.layers[4].pid = 0x2003
|
18
|
+
|
19
|
+
n.layers[5] = L2::VTPSubsetAdvertisement.new
|
20
|
+
n.layers[5].version = 1
|
21
|
+
n.layers[5].revision = 12345
|
22
|
+
n.layers[5].add_vlan_info(0xFF, 3, 5, 6, 7, "blafadfadsfasdf")
|
23
|
+
|
24
|
+
n.layers.compact.each do |l|
|
25
|
+
puts l.pretty
|
26
|
+
end
|
27
|
+
|
28
|
+
n.sendpacket
|