2010-01-15 42 views
1

使用Ruby 1.9和最新的gem install pcap +修复编译(转换->ptr/->len_PTR/_LEN),我发现,做一些简单的代码之后:为什么红宝石(ver 1.9)pcap宝石,在访问后挂起?

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

exit 

PCAP宝石不会离开块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

Pcap :: Capture#each或Pcap :: Capture#each_packet接受一个可选的count参数。如果它是-1,则循环直到EOF。

你可以尝试给每个数字传递一个数字,看看会发生什么。

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

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

+0

实际上,each_packet(至少在最新版本中)并不包含数字 - 当创建Pcap对象时,会有一个内部的@count变量被初始化。 – tjarratt 2011-05-30 04:35:30