ERF , 16- ERF. "type" . strix . , Ethernet , .
. , ERF , , . , , , .
import struct
import scapy.layers.all as sl
def erf_records( f ):
"""
Generator which parses ERF records from file-like ``f``
"""
while True:
hdr = f.read( 16 )
if hdr:
rec = {}
rec['ts'] = struct.unpack( '<Q', hdr[:8] )[0]
rec.update( zip( ('type',
'flags',
'rlen',
'lctr',
'wlen'),
struct.unpack( '>BBHHH', hdr[8:] ) ) )
rec['iface'] = rec['flags'] & 0x03
rec['rx_err'] = rec['flags'] & 0x10 != 0
if rec['type'] & 0x80:
ext_hdr = f.read( 8 )
rec.update( zip( (
'ext_hdr_signature',
'ext_hdr_payload_hash',
'ext_hdr_filter_color',
'ext_hdr_flow_hash'),
struct.unpack( '>B3sB3s', ext_hdr ) ) )
rec['pkt'] = f.read( rec['rlen'] - 24 )
else:
rec['pkt'] = f.read( rec['rlen'] - 16 )
if rec['type'] & 0x02:
rec['pkt'] = rec['pkt'][2:]
rec['pkt'] = sl.Ether( rec['pkt'] )
yield rec
else:
return