为什么ruby的(版本1.9)pcap gem,访问后挂起?

时间:2010-01-15 00:56:00

标签: ruby pcap

使用ruby 1.9和最新的gem install pcap +修补程序进行编译(将->ptr / ->len转换为_PTR / _LEN),我发现做完简单后代码:

require 'pcap'
cap = Pcap::Capture.open_offline('1.dmp')
cap.each { |pkt| p pkt.src; }

exit

Pcap gem不会离开块cap.each,即输出:

...
213.248.106.202
192.168.1.50
213.248.106.202
192.168.1.50

^C
^C
^C
^C
^C

只有kill -s KILL <process_id>才能杀死进程 有什么方法可以解决这个问题吗?

P.S。 1.dmp文件使用tcpdump -w 1.dmp生成。

1 个答案:

答案 0 :(得分:1)

Pcap :: Capture#each或Pcap :: Capture#each_packet采用可选的count参数。如果它是-1,它将循环直到EOF。

您可以尝试将数字传递给每个人,看看会发生什么。

cap.each_packet(4) {|pkt|p pkt.src}

如果挂起,则扩展程序代码中可能存在问题。