2010-01-15 44 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