Perlでノンブロッキングなパケットキャプチャ
パケットキャプチャを取って分析する必要があったので、Perlでノンブロッキングでパケットキャプチャする方法調べてみた。
tcpdumpの出力を取るっていう方法もあるけど、自分でパースするのは面倒なのでCPANモジュールを使う。
AnyEvent::Pcap
Net::PcapのAnyEvent版。SYNOPSISのコードからして間違ってるので注意。
使い方
#!/usr/bin/env perl -w use strict; use AnyEvent::Pcap; use AnyEvent::Pcap::Utils; my $a_pcap = AnyEvent::Pcap->new( device => "en1", packet_handler => sub { my $header = shift; my $packet = shift; my $tcp = AnyEvent::Pcap::Utils->extract_tcp_packet($packet); } ); $a_pcap->run(); AnyEvent->condvar->recv; __END__
Net::Frame::Dump::Online2
Net::Frame系のモジュールでノンブロッキングな実装。Net::Frame::Simpleが結構扱いやすい。
使い方
#!/usr/bin/env perl -w use strict; use Net::Frame::Dump::Online2; use Net::Frame::Simple; my $d = Net::Frame::Dump::Online2->new( dev => 'en1', ); $d->start; while (1) { if ( my $f = $d->next ) { print Net::Frame::Simple->newFromDump($f)->print, "\n"; } } $d->stop; __END__