Whitespace at EOL
parent
9d563d4d9e
commit
6895ff9cbb
|
@ -39,23 +39,23 @@ class Console::CommandDispatcher::Sniffer
|
|||
|
||||
|
||||
def cmd_sniffer_interfaces(*args)
|
||||
|
||||
|
||||
ifaces = client.sniffer.interfaces()
|
||||
|
||||
print_line()
|
||||
|
||||
ifaces.each do |i|
|
||||
print_line(sprintf("%d - '%s' ( type:%d mtu:%d usable:%s dhcp:%s wifi:%s )",
|
||||
print_line(sprintf("%d - '%s' ( type:%d mtu:%d usable:%s dhcp:%s wifi:%s )",
|
||||
i['idx'], i['description'],
|
||||
i['type'], i['mtu'], i['usable'], i['dhcp'], i['wireless'])
|
||||
)
|
||||
end
|
||||
|
||||
|
||||
print_line()
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
def cmd_sniffer_start(*args)
|
||||
intf = args.shift.to_i
|
||||
if (intf == 0)
|
||||
|
@ -64,40 +64,40 @@ class Console::CommandDispatcher::Sniffer
|
|||
end
|
||||
maxp = (args.shift || 50000).to_i
|
||||
bpf = args.join(" ")
|
||||
|
||||
|
||||
client.sniffer.capture_start(intf, maxp, bpf)
|
||||
print_status("Capture started on interface #{intf} (#{maxp} packet buffer)")
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
def cmd_sniffer_stop(*args)
|
||||
intf = args[0].to_i
|
||||
if (intf == 0)
|
||||
print_error("Usage: sniffer_stop [interface-id]")
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
res = client.sniffer.capture_stop(intf)
|
||||
print_status("Capture stopped on interface #{intf}")
|
||||
print_status("There are #{res[:packets]} packets (#{res[:bytes]} bytes) remaining")
|
||||
print_status("Download or release them using 'sniffer_dump' or 'sniffer_release'")
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
def cmd_sniffer_stats(*args)
|
||||
intf = args[0].to_i
|
||||
if (intf == 0)
|
||||
print_error("Usage: sniffer_stats [interface-id]")
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
stats = client.sniffer.capture_stats(intf)
|
||||
print_status("Capture statistics for interface #{intf}")
|
||||
stats.each_key do |k|
|
||||
print_line("\t#{k}: #{stats[k]}")
|
||||
end
|
||||
|
||||
return true
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
def cmd_sniffer_release(*args)
|
||||
|
@ -106,60 +106,60 @@ class Console::CommandDispatcher::Sniffer
|
|||
print_error("Usage: sniffer_release [interface-id]")
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
res = client.sniffer.capture_release(intf)
|
||||
print_status("Flushed #{res[:packets]} packets (#{res[:bytes]} bytes) from interface #{intf}")
|
||||
|
||||
return true
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
|
||||
def cmd_sniffer_dump(*args)
|
||||
intf = args[0].to_i
|
||||
if (intf == 0 or not args[1])
|
||||
print_error("Usage: sniffer_dump [interface-id] [pcap-file]")
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
path_cap = args[1]
|
||||
path_raw = args[1] + '.raw'
|
||||
|
||||
|
||||
fd = ::File.new(path_raw, 'wb+')
|
||||
|
||||
|
||||
print_status("Flushing packet capture buffer for interface #{intf}...")
|
||||
res = client.sniffer.capture_dump(intf)
|
||||
print_status("Flushed #{res[:packets]} packets (#{res[:bytes]} bytes)")
|
||||
|
||||
|
||||
bytes_all = res[:bytes] || 0
|
||||
bytes_got = 0
|
||||
bytes_pct = 0
|
||||
|
||||
while (bytes_all > 0)
|
||||
res = client.sniffer.capture_dump_read(intf,1024*512)
|
||||
|
||||
|
||||
bytes_got += res[:bytes]
|
||||
|
||||
pct = ((bytes_got.to_f / bytes_all.to_f) * 100).to_i
|
||||
if(pct > bytes_pct)
|
||||
print_status("Downloaded #{"%.3d" % pct}% (#{bytes_got}/#{bytes_all})...")
|
||||
bytes_pct = pct
|
||||
end
|
||||
end
|
||||
break if res[:bytes] == 0
|
||||
fd.write(res[:data])
|
||||
end
|
||||
|
||||
|
||||
fd.close
|
||||
|
||||
|
||||
print_status("Download completed, converting to PCAP...")
|
||||
|
||||
|
||||
fd = nil
|
||||
if(::File.exist?(path_cap))
|
||||
fd = ::File.new(path_cap, 'ab+')
|
||||
else
|
||||
fd = ::File.new(path_cap, 'wb+')
|
||||
fd.write([0xa1b2c3d4, 2, 4, 0, 0, 65536, 1].pack('NnnNNNN'))
|
||||
end
|
||||
end
|
||||
|
||||
pkts = {}
|
||||
pkts = {}
|
||||
od = ::File.new(path_raw, 'rb')
|
||||
|
||||
|
||||
|
@ -167,27 +167,27 @@ class Console::CommandDispatcher::Sniffer
|
|||
while(true)
|
||||
buf = od.read(20)
|
||||
break if not buf
|
||||
|
||||
|
||||
idh,idl,thi,tlo,len = buf.unpack('N5')
|
||||
break if not len
|
||||
if(len > 10000)
|
||||
if(len > 10000)
|
||||
print_error("Corrupted packet data (length:#{len})")
|
||||
break
|
||||
end
|
||||
|
||||
|
||||
pkt_id = (idh << 32) +idl
|
||||
pkt_ts = Rex::Proto::SMB::Utils.time_smb_to_unix(thi,tlo)
|
||||
pkt = od.read(len)
|
||||
|
||||
|
||||
fd.write([pkt_ts,0,len,len].pack('NNNN')+pkt)
|
||||
end
|
||||
od.close
|
||||
fd.close
|
||||
|
||||
|
||||
::File.unlink(path_raw)
|
||||
print_status("PCAP file written to #{path_cap}")
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
#
|
||||
# Name for this dispatcher
|
||||
# sni
|
||||
|
|
Loading…
Reference in New Issue