【问题标题】:Ruby PCAP Reading a complete capture fileRuby PCAP 读取完整的捕获文件
【发布时间】:2012-02-23 04:08:48
【问题描述】:

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

require 'pcap'

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

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

上述代码在读取所有数据包后不会退出。根据 Ruby pcap 文档“负计数永远处理数据包或直到达到 EOF”。这可能是什么问题。

【问题讨论】:

  • 我认为您的示例程序中缺少的do 不是问题,所以我只是在其中为您编辑了它。一旦修复了该错误,我使用的转储就可以正常工作。所以我认为问题取决于相关的特定转储。在这种情况下,您可能需要联系 libpcap 开发人员,看看他们是否可以发现您的转储文件存在问题,但我的第一个猜测是转储损坏。
  • 您使用的是哪个 PCAP 库?你看过任何替代宝石吗? rubygems.org/search?query=pcap
  • @sarnold:这将是一个很好的答案
  • @andomar,我对将模糊的猜测发布为 answers 感到不安——如果@Indika 报告转储文件太无效而无法解析,我会很乐意将其移至一个答案:) 但与此同时我不相信我是对的。
  • 感谢所有 cmets 并对程序中的错误表示歉意。我在 [link] wiki.wireshark.org/… 尝试了 PCAP 文件。我在 Wireshark 示例捕获中尝试了几个捕获文件。但是得到了同样的结果。我在 Ruby 1.9.2 中使用 gem pcap (0.7.3)。

标签: ruby pcap


【解决方案1】:

我经常使用下面的变体进行临时数据包分析。为我工作。 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

【讨论】:

    猜你喜欢
    • 2010-10-15
    • 2017-08-15
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 2013-05-27
    • 2014-02-04
    • 2011-07-11
    相关资源
    最近更新 更多