2011-02-06 67 views
2

我使用Ruby来处理一些PCAP文件。我需要阅读完整的文件并分析每个pcaket。Ruby PCAP读取完整的捕获文件

require 'pcap' 

inFile = Pcap::Capture.open_offline("1.pcap") 

inFile.loop(-1) do |pkt| 
#Process packet. 
end 

上面的代码在读完所有数据包后不会退出。根据Ruby pcap文档'负数会永远处理数据包或直到达到EOF'。这里可能是什么问题。

+2

我假设您的示例程序中缺少`do'并不是问题,所以我只是在那里为您编辑它。一旦修正了这个错误,我使用的转储工作得很好。所以我认为问题取决于具体转储。在这种情况下,您可能需要联系libpcap开发人员以确定他们是否可以发现转储文件存在问题,但转储损坏是我的第一次猜测。 – sarnold 2011-02-06 09:18:21

回答

2

我正在使用下面的很多变体来进行ad-hoc数据包分析。适用于我。 Ruby 1.9.3-p125,pcaprub 0.11.2。

#!/opt/local/bin/ruby1.9 
require 'pcaprub' 

fn = ARGV[1] || "pcap-000" 
pc = Pcap.open_offline(ARGV[0]) 
pc.each do |pk| 
    fn1 = fn.succ! 
    File.binwrite(fn1, pk) 
end