Net-Packet

NAME

Net::Packet - Decoding network frames/packets.

SYNOPSIS

# use Net::Packet::Ethernet :short;
# use Net::Packet::IPv4 :short;
# use Net::Packet::UDP :short;

my $pkt = Buf.new([...]);

my $eth = Ethernet.decode($pkt);
printf "%s -> %s: ", $eth.src.Str, $eth.dst.Str;

my $ip  = IPv4.decode($eth.data, $eth);
printf "%s -> %s: ", $ip.src.Str, $ip.src.Str;

my $udp = UDP.decode($ip.data, $ip);
printf "%d -> %d\n", $udp.src_port, $udp.dst_port;

Prints '11:22:33:AA:BB:CC -> 44:55:66:EE:DD:FF: 11.22.33.44 -> 55.66.77.88: 443 -> 49875'. Following code prints the same:

# use Net::Ethernet :short;

my $pkt = Buf.new([...]);

my $eth = Ethernet.decode($pkt);
printf "%s -> %s: ", $eth.src.Str, $eth.dst.Str;

if $eth.pl ~~ IPv4 { # .pl (for PayLoad) decodes the payload
   printf "%s -> %s: ", $eth.pl.src.Str, $eth.pl.dst.Str;

   if $eth.pl.pl ~~ UDP {
      printf "%d -> %d\n", $eth.pl.pl.src_port, $eth.pl.pl.dst_port;
   }
}

EXPORTS

use Net::Packet :util;

exports:

sub unpack_n(); # See description
sub unpack_N(); # See description

DESCRIPTION

module Net::Packet

Subroutines

unpack_n($buf, Int $i) returns Int
  Decodes a 16-bit integer from $buf, starting at $buf[$i].

unpack_N($buf, Int $i) returns Int
  Decodes a 32-bit integer from $buf, starting at $buf[$i].

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.