Почему драгоценный камень pcap ruby ​​​​(ver 1.9) зависает после доступа к нему?

Используя 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 не покидает блок 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.


person Bubonic Pestilence    schedule 15.01.2010    source источник


Ответы (1)


Pcap::Capture#each или Pcap::Capture#each_packet принимает необязательный аргумент счетчика. Если это -1, он зацикливается до EOF.

Вы можете попробовать передать число каждому и посмотреть, что произойдет.

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

Если это зависает, возможно, проблема в коде расширения.

person BaroqueBobcat    schedule 15.01.2010
comment
На самом деле, each_packet (по крайней мере, в последней версии) не принимает число — есть внутренняя переменная @count, которая инициализируется при создании самого объекта Pcap. - person tjarratt; 30.05.2011