#!/usr/bin/perl
use strict;
use warnings;
use Linux::SocketFilter;
use Linux::SocketFilter::Assembler qw( assemble );
use IO::Socket::Packet;
use Socket qw( SOCK_DGRAM );
my $sock = IO::Socket::Packet->new(
IfIndex => 0,
Type => SOCK_DGRAM,
) or die "Cannot socket - $!";
$sock->attach_filter( assemble( <<"EOF" ) );
LD AD[PROTOCOL]
JEQ 0x0800, 0, 1
RET 20
JEQ 0x86dd, 0, 1
RET 40
RET 0
EOF
while( my $addr = $sock->recv( my $buffer, 40 ) ) {
printf "Packet: %v02x\n", $buffer;
}