首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将原始数据包转换为pcap格式并附加到pcap文件

将原始数据包转换为pcap格式并附加到pcap文件
EN

Stack Overflow用户
提问于 2018-05-28 12:27:54
回答 1查看 1.2K关注 0票数 0

我正在读取原始数据包数据并将其转换为Pcap格式(为此有一个函数)。我有一个原始数据包的列表(以列表格式),我需要读取每个数据包,并将其附加到pcap格式的pcap文件中。我试过使用mergecap,但它不起作用。所以我尝试了另一种方法,tail -c +25 file2.pcap >> file1.pcap,它起作用了。

我将一个包转换为pcap,使用下面的代码将其存储在pcap文件中,然后对其余的包执行类似的操作,并继续使用tail命令附加pcap文件。但这只是一个开销(因为我有10^6个包)。

我是这么做的-

代码语言:javascript
复制
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进行转换,但在我的例子中不起作用。mergecap也是如此。

EN

回答 1

Stack Overflow用户

发布于 2020-01-17 23:50:49

您的代码不正确,特别是在start方法上,请检查以下注释

代码语言:javascript
复制
def start(self, packets):
  p = Pcap( "PcapData.pcap" )
  p.write( str( packets[0] ) )
  p.pcap_file.flush()
  for packet in packets[1:]:
     # You create a pcap file with one packet
     p = Pcap( "temp.pcap" )
     p.write( str( packet ) )
     p.pcap_file.flush()
     p.close()
     # this os.system is wrong, you can not merge pcap files like that
     # you are appending the header file also, use mergepcap
     os.system( "tail -c +25 temp.pcap >> PcapData.pcap" )
  p.close()

以下是一个建议的解决方案

代码语言:javascript
复制
def start(self, packets):
  p = Pcap( "PcapData.pcap" )
  p.write( str( packets[0] ) )
  p.pcap_file.flush()
  for packet in packets[1:]:
     p.write( str( packet ) )
  p.pcap_file.flush()
  p.close()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50559126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档