Guest User

hva_pcao.py

a guest
Jun 11th, 2019
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.84 KB | None | 0 0
  1. #/usr/bin/env python3
  2.  
  3.  
  4. import sys, os
  5. import struct
  6. import datetime
  7. import collections
  8.  
  9. # https://wiki.wireshark.org/Development/LibpcapFileFormat
  10. # Layout Pcap-file:
  11. # Global Header | Packet Header | Packet Data | Packet Header | Packet Data | ...
  12.  
  13. GblHdr = collections.namedtuple('GblHdr', [ 'magic_number', 'version_major', 'version_minor', 'thiszone', 'sigflags', 'snaplen', 'network' ])
  14. PktHdr = collections.namedtuple('PckHdr', [ 'ts', 'ts_sec', 'ts_usec', 'incl_len', 'orig_len' ])
  15. kGblHdrFmt = '<IHHiIII'; kGblHdrSiz = struct.calcsize(kGblHdrFmt)
  16. kPktHdrFmt = '<IIII';    kPktHdrSiz = struct.calcsize(kPktHdrFmt)
  17.    
  18. def open_offline(fname):
  19.     with open(fname, 'rb') as fp:
  20.         data = fp.read(kGblHdrSiz)
  21.         if len(data) != kGblHdrSiz: raise ValueError('Unable to read Pcap Global Header')
  22.         _gblHdr = struct.unpack(kGblHdrFmt, data)
  23.         gblHdr = GblHdr(*_gblHdr)
  24.         assert(gblHdr.magic_number == 0xa1b2c3d4); assert(gblHdr.version_major == 2); assert(gblHdr.version_minor == 4)
  25.  
  26.         while True:
  27.             data = fp.read(kPktHdrSiz)
  28.             if data == b'': return # Eof
  29.             if len(data) != kPktHdrSiz: raise ValueError('Unable to read Pcap Record Header')
  30.             _hdr = struct.unpack(kPktHdrFmt, data)
  31.             _ts = datetime.datetime.utcfromtimestamp(_hdr[0]+_hdr[1]*0.000001)
  32.             hdr = PktHdr(_ts, *_hdr)
  33.  
  34.             pkt = b''
  35.             while len(pkt) < hdr.incl_len:
  36.                 data = fp.read(hdr.incl_len-len(pkt))
  37.                 if data == '': raise ValueError('Unable to read Pcap Packet')
  38.                 pkt += data
  39.             yield hdr, pkt
  40.                
  41.  
  42.  
  43. if __name__ == '__main__':
  44.     fname = sys.argv[1] if len(sys.argv) > 1 else 'xsupport.pcap'
  45.     i=1
  46.     for hdr, pkt in open_offline(fname):
  47.         print(pkt)
  48.         i=i+1
  49.  
  50.     print(i)
Add Comment
Please, Sign In to add comment