Net::Pcap does the job, but it's confusing and difficult to operate. This module solves that problem in a relatively general way. I wanted a way to build libpcap filters really quickly. It shouldn't take two hours to crank one out, particularly since I imagine they all kinda look the same. So, I wrote this to simplify writing sniffers really quickly. use strict; use warnings; use Net::Pcap::Easy; my $npe = Net::Pcap::Easy->new( dev => "lo", filter => "host 127.0.0.1 and icmp", packets_per_loop => 10, bytes_to_capture => 1024, icmp_callback => sub { my ($npe, $ether, $ip, $icmp) = @_; print "ICMP: $ether->{src_mac}:$ip->{src_ip} -> $ether->{dest_mac}:$ip->{dest_ip}\n"; }, ); 1 while $npe->loop;