packetfu 1.1.9 → 1.1.10

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.
Files changed (77) hide show
  1. data/bench/octets.rb +9 -9
  2. data/examples/100kpackets.rb +12 -12
  3. data/examples/ackscan.rb +16 -16
  4. data/examples/arp.rb +35 -35
  5. data/examples/arphood.rb +36 -36
  6. data/examples/dissect_thinger.rb +6 -6
  7. data/examples/new-simple-stats.rb +23 -23
  8. data/examples/packetfu-shell.rb +25 -25
  9. data/examples/simple-sniffer.rb +9 -9
  10. data/examples/simple-stats.rb +23 -23
  11. data/examples/slammer.rb +3 -3
  12. data/lib/packetfu.rb +127 -127
  13. data/lib/packetfu/capture.rb +169 -169
  14. data/lib/packetfu/config.rb +52 -52
  15. data/lib/packetfu/inject.rb +56 -56
  16. data/lib/packetfu/packet.rb +528 -528
  17. data/lib/packetfu/pcap.rb +579 -579
  18. data/lib/packetfu/protos/arp.rb +90 -90
  19. data/lib/packetfu/protos/arp/header.rb +158 -158
  20. data/lib/packetfu/protos/arp/mixin.rb +36 -36
  21. data/lib/packetfu/protos/eth.rb +44 -44
  22. data/lib/packetfu/protos/eth/header.rb +243 -243
  23. data/lib/packetfu/protos/eth/mixin.rb +3 -3
  24. data/lib/packetfu/protos/hsrp.rb +69 -69
  25. data/lib/packetfu/protos/hsrp/header.rb +107 -107
  26. data/lib/packetfu/protos/hsrp/mixin.rb +29 -29
  27. data/lib/packetfu/protos/icmp.rb +71 -71
  28. data/lib/packetfu/protos/icmp/header.rb +82 -82
  29. data/lib/packetfu/protos/icmp/mixin.rb +14 -14
  30. data/lib/packetfu/protos/invalid.rb +49 -49
  31. data/lib/packetfu/protos/ip.rb +69 -69
  32. data/lib/packetfu/protos/ip/header.rb +291 -291
  33. data/lib/packetfu/protos/ip/mixin.rb +40 -40
  34. data/lib/packetfu/protos/ipv6.rb +50 -50
  35. data/lib/packetfu/protos/ipv6/header.rb +188 -188
  36. data/lib/packetfu/protos/ipv6/mixin.rb +29 -29
  37. data/lib/packetfu/protos/tcp.rb +176 -176
  38. data/lib/packetfu/protos/tcp/ecn.rb +35 -35
  39. data/lib/packetfu/protos/tcp/flags.rb +74 -74
  40. data/lib/packetfu/protos/tcp/header.rb +268 -268
  41. data/lib/packetfu/protos/tcp/hlen.rb +32 -32
  42. data/lib/packetfu/protos/tcp/mixin.rb +46 -46
  43. data/lib/packetfu/protos/tcp/option.rb +321 -321
  44. data/lib/packetfu/protos/tcp/options.rb +95 -95
  45. data/lib/packetfu/protos/tcp/reserved.rb +35 -35
  46. data/lib/packetfu/protos/udp.rb +116 -116
  47. data/lib/packetfu/protos/udp/header.rb +91 -91
  48. data/lib/packetfu/protos/udp/mixin.rb +3 -3
  49. data/lib/packetfu/structfu.rb +280 -280
  50. data/lib/packetfu/utils.rb +226 -217
  51. data/lib/packetfu/version.rb +41 -41
  52. data/packetfu.gemspec +2 -1
  53. data/spec/ethpacket_spec.rb +48 -48
  54. data/spec/packet_spec.rb +57 -57
  55. data/spec/packet_subclasses_spec.rb +8 -8
  56. data/spec/packetfu_spec.rb +59 -59
  57. data/spec/structfu_spec.rb +268 -268
  58. data/spec/tcp_spec.rb +75 -75
  59. data/test/all_tests.rb +13 -13
  60. data/test/func_lldp.rb +3 -3
  61. data/test/ptest.rb +2 -2
  62. data/test/test_arp.rb +116 -116
  63. data/test/test_capture.rb +45 -45
  64. data/test/test_eth.rb +68 -68
  65. data/test/test_hsrp.rb +9 -9
  66. data/test/test_icmp.rb +52 -52
  67. data/test/test_inject.rb +18 -18
  68. data/test/test_invalid.rb +16 -16
  69. data/test/test_ip.rb +36 -36
  70. data/test/test_ip6.rb +48 -48
  71. data/test/test_octets.rb +21 -21
  72. data/test/test_packet.rb +154 -154
  73. data/test/test_pcap.rb +170 -170
  74. data/test/test_structfu.rb +97 -97
  75. data/test/test_tcp.rb +320 -320
  76. data/test/test_udp.rb +76 -76
  77. metadata +4 -3
@@ -8,15 +8,15 @@ IPV4_STR = "1.2.3.4"
8
8
 
9
9
  iters = 50_000
10
10
  Benchmark.bm do |bm|
11
- bm.report("Octets.new.read(...) ") {iters.times {PacketFu::Octets.new.read(IPV4_RAW)}}
12
- bm.report("Octets.new.read_quad(...) ") {iters.times {PacketFu::Octets.new.read_quad(IPV4_STR)}}
11
+ bm.report("Octets.new.read(...) ") {iters.times {PacketFu::Octets.new.read(IPV4_RAW)}}
12
+ bm.report("Octets.new.read_quad(...) ") {iters.times {PacketFu::Octets.new.read_quad(IPV4_STR)}}
13
13
 
14
- octets = PacketFu::Octets.new
15
- bm.report("octets#read(...) ") {iters.times {octets.read(IPV4_RAW)}}
16
- bm.report("octets#read_quad(...) ") {iters.times {octets.read_quad(IPV4_STR)}}
14
+ octets = PacketFu::Octets.new
15
+ bm.report("octets#read(...) ") {iters.times {octets.read(IPV4_RAW)}}
16
+ bm.report("octets#read_quad(...) ") {iters.times {octets.read_quad(IPV4_STR)}}
17
17
 
18
- octets.read(IPV4_RAW)
19
- bm.report("octets#to_x() ") {iters.times {octets.to_x}}
20
- bm.report("octets#to_i() ") {iters.times {octets.to_i}}
21
- bm.report("octets#to_s() ") {iters.times {octets.to_s}}
18
+ octets.read(IPV4_RAW)
19
+ bm.report("octets#to_x() ") {iters.times {octets.to_x}}
20
+ bm.report("octets#to_i() ") {iters.times {octets.to_i}}
21
+ bm.report("octets#to_s() ") {iters.times {octets.to_s}}
22
22
  end
@@ -14,18 +14,18 @@ start_time = Time.now.utc
14
14
  count = 0
15
15
 
16
16
  100.times do
17
- @pcaps = []
18
- 1000.times do
19
- u = UDPPacket.new
20
- u.ip_src = [rand(2**32-1)].pack("N")
21
- u.ip_dst = [rand(2**32-1)].pack("N")
22
- u.recalc
23
- @pcaps << u
24
- end
25
- pfile = PcapFile.new
26
- res = pfile.array_to_file(:filename => "/tmp/out.pcap", :array => @pcaps, :append => true)
27
- count += res.last
28
- puts "Wrote #{count} packets in #{Time.now.utc - start_time} seconds"
17
+ @pcaps = []
18
+ 1000.times do
19
+ u = UDPPacket.new
20
+ u.ip_src = [rand(2**32-1)].pack("N")
21
+ u.ip_dst = [rand(2**32-1)].pack("N")
22
+ u.recalc
23
+ @pcaps << u
24
+ end
25
+ pfile = PcapFile.new
26
+ res = pfile.array_to_file(:filename => "/tmp/out.pcap", :array => @pcaps, :append => true)
27
+ count += res.last
28
+ puts "Wrote #{count} packets in #{Time.now.utc - start_time} seconds"
29
29
  end
30
30
 
31
31
  read_bytes_start = Time.now.utc
@@ -10,25 +10,25 @@ require 'packetfu'
10
10
  #cap = Capture.new(:iface=>'wlan0') # or whatever your interface is
11
11
  # Run this on the third
12
12
  def do_scan
13
- puts "Generating packets..."
14
- pkt_array = gen_packets.sort_by {rand}
15
- puts "Dumping them on the wire..."
16
- inj = PacketFu::Inject.new(:iface => ARGV[0])
17
- inj.array_to_wire(:array=>pkt_array)
18
- puts "Done!"
13
+ puts "Generating packets..."
14
+ pkt_array = gen_packets.sort_by {rand}
15
+ puts "Dumping them on the wire..."
16
+ inj = PacketFu::Inject.new(:iface => ARGV[0])
17
+ inj.array_to_wire(:array=>pkt_array)
18
+ puts "Done!"
19
19
  end
20
20
 
21
21
  def gen_packets
22
- config = PacketFu::Utils.whoami?(:iface=>ARGV[0])
23
- pkt = PacketFu::TCPPacket.new(:config=>config, :flavor=>"Windows")
24
- pkt.payload ="all I wanna do is ACK ACK ACK and a RST and take your money"
25
- pkt.ip_daddr="209.85.165.0" # One of Google's networks
26
- pkt.tcp_flags.ack=1
27
- pkt.tcp_dst=81
28
- pkt_array = []
29
- 256.times do |i|
30
- pkt.ip_dst.o4=i
31
- pkt.tcp_src = rand(5000 - 1025) + 1025
22
+ config = PacketFu::Utils.whoami?(:iface=>ARGV[0])
23
+ pkt = PacketFu::TCPPacket.new(:config=>config, :flavor=>"Windows")
24
+ pkt.payload ="all I wanna do is ACK ACK ACK and a RST and take your money"
25
+ pkt.ip_daddr="209.85.165.0" # One of Google's networks
26
+ pkt.tcp_flags.ack=1
27
+ pkt.tcp_dst=81
28
+ pkt_array = []
29
+ 256.times do |i|
30
+ pkt.ip_dst.o4=i
31
+ pkt.tcp_src = rand(5000 - 1025) + 1025
32
32
  pkt.recalc
33
33
  pkt_array << pkt.to_s
34
34
  end
@@ -9,11 +9,11 @@ require './examples' # For path setting slight-of-hand
9
9
  require 'packetfu'
10
10
 
11
11
  def usage
12
- if ARGV[0].nil?
13
- raise ArgumentError, "You need an IP address to start with."
14
- elsif !Process.euid.zero?
15
- raise SecurityError, "You need to be root to run this."
16
- end
12
+ if ARGV[0].nil?
13
+ raise ArgumentError, "You need an IP address to start with."
14
+ elsif !Process.euid.zero?
15
+ raise SecurityError, "You need to be root to run this."
16
+ end
17
17
  end
18
18
 
19
19
  usage unless target_ip = ARGV[0] # Need a target IP.
@@ -24,36 +24,36 @@ $packetfu_default = PacketFu::Config.new(PacketFu::Utils.whoami?).config
24
24
 
25
25
  def arp(target_ip)
26
26
 
27
- arp_pkt = PacketFu::ARPPacket.new(:flavor => "Windows")
28
- arp_pkt.eth_saddr = arp_pkt.arp_saddr_mac = $packetfu_default[:eth_saddr]
29
- arp_pkt.eth_daddr = "ff:ff:ff:ff:ff:ff"
30
- arp_pkt.arp_daddr_mac = "00:00:00:00:00:00"
31
-
32
- arp_pkt.arp_saddr_ip = $packetfu_default[:ip_saddr]
33
- arp_pkt.arp_daddr_ip = target_ip
34
-
35
- # Stick the Capture object in its own thread.
36
-
37
- cap_thread = Thread.new do
38
- cap = PacketFu::Capture.new(:start => true,
39
- :filter => "arp src #{target_ip} and ether dst #{arp_pkt.eth_saddr}")
40
- arp_pkt.to_w # Shorthand for sending single packets to the default interface.
41
- target_mac = nil
42
- while target_mac.nil?
43
- if cap.save > 0
44
- arp_response = PacketFu::Packet.parse(cap.array[0])
45
- target_mac = arp_response.arp_saddr_mac if arp_response.arp_saddr_ip = target_ip
46
- end
47
- sleep 0.1 # Check for a response ten times per second.
48
- end
49
- puts "#{target_ip} is-at #{target_mac}"
50
- # That's all we need.
51
- exit 0
52
- end
53
-
54
- # Timeout for cap_thread
55
- sleep 3; puts "Oh noes! Couldn't get an arp out of #{target_ip}. Maybe it's not here."
56
- exit 1
27
+ arp_pkt = PacketFu::ARPPacket.new(:flavor => "Windows")
28
+ arp_pkt.eth_saddr = arp_pkt.arp_saddr_mac = $packetfu_default[:eth_saddr]
29
+ arp_pkt.eth_daddr = "ff:ff:ff:ff:ff:ff"
30
+ arp_pkt.arp_daddr_mac = "00:00:00:00:00:00"
31
+
32
+ arp_pkt.arp_saddr_ip = $packetfu_default[:ip_saddr]
33
+ arp_pkt.arp_daddr_ip = target_ip
34
+
35
+ # Stick the Capture object in its own thread.
36
+
37
+ cap_thread = Thread.new do
38
+ cap = PacketFu::Capture.new(:start => true,
39
+ :filter => "arp src #{target_ip} and ether dst #{arp_pkt.eth_saddr}")
40
+ arp_pkt.to_w # Shorthand for sending single packets to the default interface.
41
+ target_mac = nil
42
+ while target_mac.nil?
43
+ if cap.save > 0
44
+ arp_response = PacketFu::Packet.parse(cap.array[0])
45
+ target_mac = arp_response.arp_saddr_mac if arp_response.arp_saddr_ip = target_ip
46
+ end
47
+ sleep 0.1 # Check for a response ten times per second.
48
+ end
49
+ puts "#{target_ip} is-at #{target_mac}"
50
+ # That's all we need.
51
+ exit 0
52
+ end
53
+
54
+ # Timeout for cap_thread
55
+ sleep 3; puts "Oh noes! Couldn't get an arp out of #{target_ip}. Maybe it's not here."
56
+ exit 1
57
57
  end
58
58
 
59
59
  arp(target_ip)
@@ -11,20 +11,20 @@ require 'open-uri'
11
11
  $oui_prefixes = {}
12
12
  $arp_results = []
13
13
  def build_oui_list
14
- if ARGV[2].nil?
15
- puts "Fetching the oui.txt from IEEE, it'll be a second. Avoid this with #{$0} [iface] [network] <filename>."
16
- oui_file = open("http://standards.ieee.org/regauth/oui/oui.txt")
17
- else
18
- oui_file = File.open(ARGV[2], "rb")
19
- end
20
- oui_file.each do |oui_line|
21
- maybe_oui = oui_line.scan(/^[0-9a-f]{2}\-[0-9a-f]{2}\-[0-9a-f]{2}/i)[0]
22
- unless maybe_oui.nil?
23
- oui_value = maybe_oui
24
- oui_vendor = oui_line.split(/\(hex\)\s*/n)[1] || "PRIVATE"
25
- $oui_prefixes[oui_value] = oui_vendor.chomp
26
- end
27
- end
14
+ if ARGV[2].nil?
15
+ puts "Fetching the oui.txt from IEEE, it'll be a second. Avoid this with #{$0} [iface] [network] <filename>."
16
+ oui_file = open("http://standards.ieee.org/regauth/oui/oui.txt")
17
+ else
18
+ oui_file = File.open(ARGV[2], "rb")
19
+ end
20
+ oui_file.each do |oui_line|
21
+ maybe_oui = oui_line.scan(/^[0-9a-f]{2}\-[0-9a-f]{2}\-[0-9a-f]{2}/i)[0]
22
+ unless maybe_oui.nil?
23
+ oui_value = maybe_oui
24
+ oui_vendor = oui_line.split(/\(hex\)\s*/n)[1] || "PRIVATE"
25
+ $oui_prefixes[oui_value] = oui_vendor.chomp
26
+ end
27
+ end
28
28
  end
29
29
 
30
30
  build_oui_list
@@ -32,30 +32,30 @@ build_oui_list
32
32
  $root_ok = true if Process.euid.zero?
33
33
 
34
34
  def arp_everyone
35
- my_net = PacketFu::Config.new(PacketFu::Utils.whoami?(:iface =>(ARGV[0] || 'wlan0')))
36
- threads = []
37
- network = ARGV[1] || "192.168.2"
38
- print "Arping around..."
39
- 253.times do |i|
40
- threads[i] = Thread.new do
41
- this_host = network + ".#{i+1}"
42
- print "."
43
- colon_mac = PacketFu::Utils.arp(this_host,my_net.config)
44
- unless colon_mac.nil?
45
- hyphen_mac = colon_mac.tr(':','-').upcase[0,8]
46
- else
47
- hyphen_mac = colon_mac = "NOTHERE"
48
- end
49
- $arp_results << "%s : %s / %s" % [this_host,colon_mac,$oui_prefixes[hyphen_mac]]
50
- end
51
- end
52
- threads.each {|thr| thr.join}
35
+ my_net = PacketFu::Config.new(PacketFu::Utils.whoami?(:iface =>(ARGV[0] || 'wlan0')))
36
+ threads = []
37
+ network = ARGV[1] || "192.168.2"
38
+ print "Arping around..."
39
+ 253.times do |i|
40
+ threads[i] = Thread.new do
41
+ this_host = network + ".#{i+1}"
42
+ print "."
43
+ colon_mac = PacketFu::Utils.arp(this_host,my_net.config)
44
+ unless colon_mac.nil?
45
+ hyphen_mac = colon_mac.tr(':','-').upcase[0,8]
46
+ else
47
+ hyphen_mac = colon_mac = "NOTHERE"
48
+ end
49
+ $arp_results << "%s : %s / %s" % [this_host,colon_mac,$oui_prefixes[hyphen_mac]]
50
+ end
51
+ end
52
+ threads.each {|thr| thr.join}
53
53
  end
54
54
 
55
55
  if $root_ok
56
- arp_everyone
57
- puts "\n"
58
- sleep 3
59
- $arp_results.sort.each {|a| puts a unless a =~ /NOTHERE/}
56
+ arp_everyone
57
+ puts "\n"
58
+ sleep 3
59
+ $arp_results.sort.each {|a| puts a unless a =~ /NOTHERE/}
60
60
  end
61
61
 
@@ -14,10 +14,10 @@ include PacketFu
14
14
 
15
15
  packets = PcapFile.file_to_array fname
16
16
  packets.each do |packet|
17
- puts "_" * 75
18
- puts packet.inspect
19
- puts "_" * 75
20
- pkt = Packet.parse(packet)
21
- puts pkt.dissect
22
- sleep sleep_interval
17
+ puts "_" * 75
18
+ puts packet.inspect
19
+ puts "_" * 75
20
+ pkt = Packet.parse(packet)
21
+ puts pkt.dissect
22
+ sleep sleep_interval
23
23
  end
@@ -13,38 +13,38 @@ require './examples' # For path setting slight-of-hand
13
13
  require 'packetfu'
14
14
 
15
15
  def print_results(stats)
16
- stats.each_pair { |k,v| puts "%-12s: %10d" % [k,v] }
16
+ stats.each_pair { |k,v| puts "%-12s: %10d" % [k,v] }
17
17
  end
18
18
 
19
19
  # Takes a file name, parses the packets, and records the packet
20
20
  # type based on its PacketFu class.
21
21
  def count_packet_types(file)
22
- stats = {}
23
- count = 0
24
- elapsed = 0
25
- start_time = Time.now
26
- PacketFu::PcapFile.read_packets(file) do |pkt|
27
- kind = pkt.proto.last.to_sym
28
- stats[kind] ? stats[kind] += 1 : stats[kind] = 1
29
- count += 1
30
- elapsed = (Time.now - start_time).to_i
31
- if count % 5_000 == 0
32
- puts "After #{count} packets (#{elapsed} seconds elapsed):"
33
- print_results(stats)
34
- end
35
- end
36
- puts "Final results for #{count} packets (#{elapsed} seconds elapsed):"
37
- print_results(stats)
22
+ stats = {}
23
+ count = 0
24
+ elapsed = 0
25
+ start_time = Time.now
26
+ PacketFu::PcapFile.read_packets(file) do |pkt|
27
+ kind = pkt.proto.last.to_sym
28
+ stats[kind] ? stats[kind] += 1 : stats[kind] = 1
29
+ count += 1
30
+ elapsed = (Time.now - start_time).to_i
31
+ if count % 5_000 == 0
32
+ puts "After #{count} packets (#{elapsed} seconds elapsed):"
33
+ print_results(stats)
34
+ end
35
+ end
36
+ puts "Final results for #{count} packets (#{elapsed} seconds elapsed):"
37
+ print_results(stats)
38
38
  end
39
39
 
40
40
  if File.readable?(infile = (ARGV[0] || 'in.pcap'))
41
- title = "Packets by packet type in '#{infile}'"
42
- puts "-" * title.size
43
- puts title
44
- puts "-" * title.size
45
- count_packet_types(infile)
41
+ title = "Packets by packet type in '#{infile}'"
42
+ puts "-" * title.size
43
+ puts title
44
+ puts "-" * title.size
45
+ count_packet_types(infile)
46
46
  else
47
- raise RuntimeError, "Need an infile, like so: #{$0} in.pcap"
47
+ raise RuntimeError, "Need an infile, like so: #{$0} in.pcap"
48
48
  end
49
49
 
50
50
 
@@ -49,12 +49,12 @@ require './examples'
49
49
  require 'packetfu'
50
50
 
51
51
  module PacketFu
52
- def whoami?(args={})
53
- Utils.whoami?(args)
54
- end
55
- def arp(arg)
56
- Utils.arp(arg)
57
- end
52
+ def whoami?(args={})
53
+ Utils.whoami?(args)
54
+ end
55
+ def arp(arg)
56
+ Utils.arp(arg)
57
+ end
58
58
  end
59
59
 
60
60
  include PacketFu
@@ -64,7 +64,7 @@ include PacketFu
64
64
  # http://jisho.org/words?jap=+%E3%83%91%E3%82%B1%E3%83%83%E3%83%88%E3%83%95&eng=&dict=edict
65
65
  #
66
66
  def packetfu_ascii_art
67
- puts <<EOM
67
+ puts <<EOM
68
68
  _______ _______ _______ _ _______ _________ _______
69
69
  ( ____ )( ___ )( ____ \\| \\ /\\( ____ \\\\__ __/( ____ \\|\\ /|
70
70
  | ( )|| ( ) || ( \\/| \\ / /| ( \\/ ) ( | ( \\/| ) ( |
@@ -82,33 +82,33 @@ def packetfu_ascii_art
82
82
  a mid-level packet manipulation library for ruby
83
83
 
84
84
  EOM
85
- end
85
+ end
86
86
 
87
87
  @pcaprub_loaded = PacketFu.pcaprub_loaded?
88
88
  # Displays a helpful banner.
89
89
  def banner
90
- packetfu_ascii_art
91
- puts ">>> PacketFu Shell #{PacketFu.version}."
92
- if Process.euid.zero? && @pcaprub_loaded
93
- puts ">>> Use $packetfu_default.config for salient networking details."
94
- print "IP: %-15s Mac: %s" % [$packetfu_default.ip_saddr, $packetfu_default.eth_saddr]
95
- puts " Gateway: %s" % $packetfu_default.eth_daddr
96
- print "Net: %-15s" % [Pcap.lookupnet($packetfu_default.iface)][0]
97
- print " " * 13
98
- puts "Iface: %s" % [($packetfu_default.iface)]
99
- puts ">>> Packet capturing/injecting enabled."
100
- else
101
- print ">>> Packet capturing/injecting disabled. "
102
- puts Process.euid.zero? ? "(no PcapRub)" : "(not root)"
103
- end
104
- puts "<>" * 36
90
+ packetfu_ascii_art
91
+ puts ">>> PacketFu Shell #{PacketFu.version}."
92
+ if Process.euid.zero? && @pcaprub_loaded
93
+ puts ">>> Use $packetfu_default.config for salient networking details."
94
+ print "IP: %-15s Mac: %s" % [$packetfu_default.ip_saddr, $packetfu_default.eth_saddr]
95
+ puts " Gateway: %s" % $packetfu_default.eth_daddr
96
+ print "Net: %-15s" % [Pcap.lookupnet($packetfu_default.iface)][0]
97
+ print " " * 13
98
+ puts "Iface: %s" % [($packetfu_default.iface)]
99
+ puts ">>> Packet capturing/injecting enabled."
100
+ else
101
+ print ">>> Packet capturing/injecting disabled. "
102
+ puts Process.euid.zero? ? "(no PcapRub)" : "(not root)"
103
+ end
104
+ puts "<>" * 36
105
105
  end
106
106
 
107
107
  # Silly wlan0 workaround
108
108
  begin
109
- $packetfu_default = PacketFu::Config.new(Utils.whoami?) if(@pcaprub_loaded && Process.euid.zero?)
109
+ $packetfu_default = PacketFu::Config.new(Utils.whoami?) if(@pcaprub_loaded && Process.euid.zero?)
110
110
  rescue RuntimeError
111
- $packetfu_default = PacketFu::Config.new(Utils.whoami?(:iface => 'wlan0')) if(@pcaprub_loaded && Process.euid.zero?)
111
+ $packetfu_default = PacketFu::Config.new(Utils.whoami?(:iface => 'wlan0')) if(@pcaprub_loaded && Process.euid.zero?)
112
112
  end
113
113
 
114
114
  banner
@@ -8,15 +8,15 @@ include PacketFu
8
8
  iface = ARGV[0] || "eth0"
9
9
 
10
10
  def sniff(iface)
11
- cap = Capture.new(:iface => iface, :start => true)
12
- cap.stream.each do |p|
13
- pkt = Packet.parse p
14
- if pkt.is_ip?
15
- next if pkt.ip_saddr == Utils.ifconfig(iface)[:ip_saddr]
16
- packet_info = [pkt.ip_saddr, pkt.ip_daddr, pkt.size, pkt.proto.last]
17
- puts "%-15s -> %-15s %-4d %s" % packet_info
18
- end
19
- end
11
+ cap = Capture.new(:iface => iface, :start => true)
12
+ cap.stream.each do |p|
13
+ pkt = Packet.parse p
14
+ if pkt.is_ip?
15
+ next if pkt.ip_saddr == Utils.ifconfig(iface)[:ip_saddr]
16
+ packet_info = [pkt.ip_saddr, pkt.ip_daddr, pkt.size, pkt.proto.last]
17
+ puts "%-15s -> %-15s %-4d %s" % packet_info
18
+ end
19
+ end
20
20
  end
21
21
 
22
22
  sniff(iface)