Я читаю необработанные пакетные данные и преобразовываю их в формат Pcap (для этого есть функция).У меня есть список необработанных пакетов (в формате списка), и мне нужно прочитать каждый пакет и добавить его в файл pcap только в формате pcap.Я попытался использовать mergecap, но он не работает.Поэтому я попробовал другую вещь tail -c +25 file2.pcap >> file1.pcap
, и она работает.
Я конвертирую пакет [0] в pcap, сохраняю его в файле pcap с использованием приведенного ниже кода, затем делаю аналогичную вещь для оставшихся пакетов и сохраняюпри добавлении файлов pcap с помощью команды tail.Но это просто издержки (так как у меня 10 ^ 6 пакетов).
Вот что я сделал -
class Pcap:
def __init__( self, filename, link_type=PCAP_DATA_LINK_TYPE ):
self.pcap_file = open( filename, 'wb' )
self.pcap_file.write( struct.pack( '@ I H H i I I I ',
PCAP_MAGICAL_NUMBER, PCAP_MJ_VERN_NUMBER,
PCAP_MI_VERN_NUMBER, PCAP_LOCAL_CORECTIN,
PCAP_ACCUR_TIMSTAMP, PCAP_MAX_LENGTH_CAP, link_type ) )
def writelist( self, data ):
for i in data:
self.write( i )
return
def write( self, data ):
ts_sec, ts_usec = map( int, str( time.time() ).split( '.' ) )
length = len( data )
self.pcap_file.write( struct.pack( '@ I I I I', ts_sec,
ts_usec, length, length ) )
self.pcap_file.write( data )
def close(self):
self.pcap_file.close()
class try:
def start(self, packets):
p = Pcap( "PcapData.pcap" )
p.write( str( packets[0] ) )
p.pcap_file.flush()
for packet in packets[1:]:
p = Pcap( "temp.pcap" )
p.write( str( packet ) )
p.pcap_file.flush()
p.close()
os.system( "tail -c +25 temp.pcap >> PcapData.pcap" )
p.close()
Я тоже пытался использовать text2pcap для преобразования, но это не работаетв моем случае.То же самое для слияния.