Преобразование необработанных пакетов в формат pcap и добавление в файл pcap - PullRequest
0 голосов
/ 28 мая 2018

Я читаю необработанные пакетные данные и преобразовываю их в формат 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 для преобразования, но это не работаетв моем случае.То же самое для слияния.

...