Net-Packet
view release on metacpan or search on metacpan
lib/Net/Packet/IPv6.pm view on Meta::CPAN
#
package Net::Packet::IPv6;
use strict;
use warnings;
require Net::Packet::Layer3;
our @ISA = qw(Net::Packet::Layer3);
use Net::Packet::Env qw($Env);
use Net::Packet::Utils qw(unpackIntFromNet packIntToNet
inet6Aton inet6Ntoa);
use Net::Packet::Consts qw(:ipv6 :layer);
BEGIN {
*protocol = \&nextHeader;
}
our @AS = qw(
version
trafficClass
flowLabel
lib/Net/Packet/IPv6.pm view on Meta::CPAN
my $version = Bit::Vector->new_Dec(4, $self->[$__version]);
my $trafficClass = Bit::Vector->new_Dec(8, $self->[$__trafficClass]);
my $flowLabel = Bit::Vector->new_Dec(20, $self->[$__flowLabel]);
my $v32 = $version->Concat_List($trafficClass, $flowLabel);
$self->[$__raw] = $self->SUPER::pack('NnCCa*a*',
$v32->to_Dec,
$self->[$__payloadLength],
$self->[$__nextHeader],
$self->[$__hopLimit],
inet6Aton($self->[$__src]),
inet6Aton($self->[$__dst]),
) or return undef;
1;
}
sub unpack {
my $self = shift;
my ($vTcFl, $pl, $nh, $hl, $sa, $da, $payload) =
$self->SUPER::unpack('NnCCa16a16 a*', $self->[$__raw])
or return undef;
my $v32 = Bit::Vector->new_Dec(32, $vTcFl);
$self->[$__flowLabel] = $v32->Chunk_Read(20, 0);
$self->[$__trafficClass] = $v32->Chunk_Read( 8, 20);
$self->[$__version] = $v32->Chunk_Read( 4, 28);
$self->[$__payloadLength] = $pl;
$self->[$__nextHeader] = $nh;
$self->[$__hopLimit] = $hl;
$self->[$__src] = inet6Ntoa($sa);
$self->[$__dst] = inet6Ntoa($da);
$self->[$__payload] = $payload;
1;
}
sub encapsulate {
my $types = {
NP_IPv6_PROTOCOL_TCP() => NP_LAYER_TCP(),
NP_IPv6_PROTOCOL_UDP() => NP_LAYER_UDP(),
lib/Net/Packet/TCP.pm view on Meta::CPAN
# $Id: TCP.pm 2002 2015-02-15 16:50:35Z gomor $
#
package Net::Packet::TCP;
use strict;
use warnings;
require Net::Packet::Layer4;
our @ISA = qw(Net::Packet::Layer4);
use Net::Packet::Utils qw(inetChecksum getRandomHighPort getRandom32bitsInt
inetAton inet6Aton);
use Net::Packet::Consts qw(:tcp :layer);
our @AS = qw(
src
dst
flags
win
seq
ack
off
lib/Net/Packet/TCP.pm view on Meta::CPAN
$phpkt = $self->SUPER::pack('a4a4CCn',
inetAton($l3->src),
inetAton($l3->dst),
0,
$l3->protocol,
$l3->getPayloadLength,
) or return undef;
}
elsif ($l3->isIpv6) {
$phpkt = $self->SUPER::pack('a*a*NnCC',
inet6Aton($l3->src),
inet6Aton($l3->dst),
$l3->payloadLength,
0,
0,
$l3->nextHeader,
) or return undef;
}
}
# Handle checksumming with DescL4
else {
my $totalLength = $self->getLength;
lib/Net/Packet/TCP.pm view on Meta::CPAN
$phpkt = $self->SUPER::pack('a4a4CCn',
inetAton($env->ip),
inetAton($env->desc->target),
0,
$env->desc->protocol,
$totalLength,
) or return undef;
}
elsif ($env->desc->isFamilyIpv6) {
$phpkt = $self->SUPER::pack('a*a*NnCC',
inet6Aton($env->ip6),
inet6Aton($env->desc->target),
$totalLength,
0,
0,
$env->desc->protocol,
) or return undef;
}
}
# Reset the checksum if already filled by a previous pack
$self->[$__checksum] = 0;
lib/Net/Packet/UDP.pm view on Meta::CPAN
#
# $Id: UDP.pm 2002 2015-02-15 16:50:35Z gomor $
#
package Net::Packet::UDP;
use strict;
use warnings;
require Net::Packet::Layer4;
our @ISA = qw(Net::Packet::Layer4);
use Net::Packet::Utils qw(inetChecksum getRandomHighPort inetAton inet6Aton);
use Net::Packet::Consts qw(:udp :layer);
our @AS = qw(
src
dst
length
checksum
);
__PACKAGE__->cgBuildIndices;
__PACKAGE__->cgBuildAccessorsScalar(\@AS);
lib/Net/Packet/UDP.pm view on Meta::CPAN
$phpkt = $self->SUPER::pack('a4a4CCn',
inetAton($l3->src),
inetAton($l3->dst),
0,
$l3->protocol,
$self->[$__length],
) or return undef;
}
elsif ($l3->isIpv6) {
$phpkt = $self->SUPER::pack('a*a*NnCC',
inet6Aton($l3->src),
inet6Aton($l3->dst),
$l3->payloadLength,
0,
0,
$l3->nextHeader,
) or return undef;
}
}
else {
my $totalLength = $self->getLength;
$totalLength += $l7->getLength if $l7;
lib/Net/Packet/UDP.pm view on Meta::CPAN
$phpkt = $self->SUPER::pack('a4a4CCn',
inetAton($env->ip),
inetAton($env->desc->target),
0,
$env->desc->protocol,
$totalLength,
) or return undef;
}
elsif ($env->desc->isFamilyIpv6) {
$phpkt = $self->SUPER::pack('a*a*NnCC',
inet6Aton($env->ip6),
inet6Aton($env->desc->target),
$totalLength,
0,
0,
$env->desc->protocol,
) or return undef;
}
}
# Reset the checksum if already filled by a previous pack
$self->[$__checksum] = 0;
lib/Net/Packet/Utils.pm view on Meta::CPAN
getHostIpv6Addr
getRandomHighPort
getRandom32bitsInt
getRandom16bitsInt
convertMac
unpackIntFromNet
packIntToNet
inetChecksum
inetAton
inetNtoa
inet6Aton
inet6Ntoa
explodeIps
explodePorts
getGatewayIp
getGatewayMac
getIpMac
debugDeviceList
);
our %EXPORT_TAGS = (
all => [ @EXPORT_OK ],
lib/Net/Packet/Utils.pm view on Meta::CPAN
return $ipv6;
}
else {
carp("@{[(caller(0))[3]]}: unable to resolv `$name' hostname\n");
}
return undef;
}
sub inetAton { inet_aton(shift()) }
sub inetNtoa { inet_ntoa(shift()) }
sub inet6Aton { inet_pton(AF_INET6, shift()) }
sub inet6Ntoa { inet_ntop(AF_INET6, shift()) }
sub getRandomHighPort {
my $highPort = int rand 0xffff;
$highPort += 1024 if $highPort < 1025;
return $highPort;
}
sub getRandom32bitsInt { int rand 0xffffffff }
sub getRandom16bitsInt { int rand 0xffff }
lib/Net/Packet/Utils.pm view on Meta::CPAN
Tries to resolve hostname passed as an argument. Returns its IPv6 address.
=item B<inetAton> (scalar)
Returns numeric value of IP address passed as an argument.
=item B<inetNtoa> (scalar)
Returns IP address of numeric value passed as an argument.
=item B<inet6Aton> (scalar)
Returns numeric value of IPv6 address passed as an argument.
=item B<inet6Ntoa> (scalar)
Returns IPv6 address of numeric value passed as an argument.
=item B<getRandomHighPort>
Returns a port number for direct use as source in a TCP or UDP header (that is a port between 1025 and 65535).
=item B<getRandom32bitsInt>
Returns a random integer of 32 bits in length.
( run in 0.279 second using v1.01-cache-2.11-cpan-87723dcf8b7 )