Почему рубиновый (версия 1.9) pcap gem висит после доступа к нему? - PullRequest
1 голос
/ 15 января 2010

Используя 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 Ответ

1 голос
/ 15 января 2010

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

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

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

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

...