擅长:python、mysql、java
<p>有一种方法可以做你想做的事,但它意味着:</p>
<ul>
<li><p>[Memory hog with one big<code>pcap</code>]:从带有<code>rdpcap()</code>的磁盘中将现有的<code>pcap</code>读入<code>scapy</code><code>PacketList()</code>,然后在接收到帧时将其写入<code>PacketList</code>。您可以随意选择将中间<code>PacketList</code>保存到<code>pcap</code>,但我认为<code>scapy</code>的<code>wrpcap()</code>中没有任何类似附加功能的功能。正如您所提到的,这种技术还意味着您将整个<code>PacketList</code>保存在内存中,直到完成。</p></li>
<li><p>[将单个<code>pcap</code>文件粘合在一起]:只在内存中保留数据包的小快照。。。您应该每X分钟将<code>pcap</code>快照保存到磁盘,然后在脚本完成时将这些单独的文件聚合在一起。</p></li>
</ul>
<p>您可以将linux中的<code>pcap</code>文件与<code>wireshark</code>包中的<a href="http://www.wireshark.org/docs/man-pages/mergecap.html" rel="noreferrer">^{<cd15>}</a>组合在一起。。。以下命令将把<code>pak1.pcap</code>和<code>pak2.pcap</code>组合成<code>all_paks.pcap</code>:</p>
<pre><code>mergecap -w all_paks.pcap pak1.pcap pak2.pcap
</code></pre>
<p>至于<a href="http://code.google.com/p/dpkt/" rel="noreferrer">^{<cd20>}</a>,我查看了它们的源代码,它可能能够以增量方式编写数据包,但我无法说明它们的代码基础有多稳定或维护有多好。。。在提交日志中,它看起来有点被忽略了(上一次提交是2011年1月9日)。</p>