6 use NetPacket::Ethernet;
13 my $server = IO::Socket::INET->new(
16 PeerAddr => 'led-wall' )
17 or die "can't setup server";
24 unless (defined $dev) {
25 $dev = Net::Pcap::lookupdev(\$err);
27 die 'Unable to determine network device for monitoring - ', $err;
31 my ($address, $netmask);
32 my $object = Net::Pcap::open_live($dev, 1500, 0, 0, \$err);
38 #make your private network range in the filter below
39 '(not src net 192.168.0.0/16)',
42 ) && die 'Unable to compile packet capture filter';
44 Net::Pcap::setfilter($object, $filter) &&
45 die 'Unable to set packet capture filter';
47 unless (defined $object) {
48 die 'Unable to create packet capture on device ', $dev, ' - ', $err;
51 #print $server "ticklex";
53 Net::Pcap::loop($object, -1, \&packets, $server) ||
54 die 'Unable to perform packet capture';
57 my ($user_data, $pixel) = @_;
58 $led_timer[$pixel] = time() + 30;
60 for (my $i=0; $i<1024; $i++) {
61 if (($led_timer[$i] < time()) && ($led_timer[$i]>0)) {
62 print $user_data "R:$i,0";
63 print $user_data "G:$i,0";
64 print $user_data "B:$i,0";
71 unpack N => pack CCCC => split /\./ => shift;
75 my ($user_data, $header, $packet) = @_;
76 my $ether_data = NetPacket::Ethernet::strip($packet);
77 my $ip = NetPacket::IP->decode($ether_data);
81 if($ip->{proto} == 6) {
82 my $tcp = NetPacket::TCP->decode($ip->{'data'});
84 $num = $tcp->{'src_port'} / 64;
86 $intensity = floor((((sprintf("%.2f",($num-$pixel))*100)) * 256) / 100);
87 print $user_data "R:$pixel,$intensity";
89 } elsif ($ip->{proto} == 17) {
90 my $udp = NetPacket::UDP->decode($ip->{'data'});
92 $num = $udp->{'src_port'} / 64;
94 $intensity = floor((((sprintf("%.2f",($num-$pixel))*100)) * 256) / 100);
95 print $user_data "G:$pixel,$intensity";
98 $num = ip2dec($ip->{'src_ip'}) / 4194304;
100 $intensity = floor((((sprintf("%.2f",($num-$pixel))*100)) * 256) / 100);
101 print $user_data "B:$pixel,$intensity";
103 led_timeout($user_data, $pixel);