Net-Inspect
view release on metacpan or search on metacpan
lib/Net/Inspect/L3/IP.pm view on Meta::CPAN
############################################################################
use strict;
use warnings;
package Net::Inspect::L3::IP;
use base 'Net::Inspect::Flow';
use fields qw(frag frag_timeout);
use Net::Inspect::Debug;
use Socket;
my $inet6_ntop;
BEGIN {
$inet6_ntop = eval {
Socket->VERSION(1.95);
Socket::inet_ntop( AF_INET6(),"\x0"x16)
&& sub { Socket::inet_ntop(AF_INET6(),shift) };
} || eval {
require Socket6;
Socket6::inet_ntop( Socket6::AF_INET6(),"\x0"x16)
&& sub { Socket6::inet_ntop(Socket6::AF_INET6(),shift) };
};
*pktin6 = $inet6_ntop ? \&_pktin6 : \&_pktin6_unsupported;
}
# field frag: hash indexed by {ip.id,saddr,daddr} with values
# [ $pos, \@fragments, $expire ]
# $pos - up to which position defragmentation is done
# @fragments - list of fragments [final,offset,data]
# final: true if this is the last fragment
# $expire - if no more fragments are received after $expire the
# packet gets discarded
lib/Net/Inspect/L3/IP.pm view on Meta::CPAN
if ($nextheader == 6 || $nextheader == 17 || $nextheader == 58) {
$proto = $nextheader;
last;
}
($nextheader,$len) = unpack("CC",$data);
substr($data,0,$len+8,''); # skip extension header
}
return $self->{upper_flow}->pktin( $data, {
time => $time,
saddr => $inet6_ntop->($saddr),
daddr => $inet6_ntop->($daddr),
proto => $proto,
ttl => $ttl,
qos => $tclass,
flowlabel => $flowlabel,
ver => 6,
});
}
sub _pktin6_unsupported {
trace("IPv6 unsupported, need to install recent Socket or Socket6 module");
( run in 0.238 second using v1.01-cache-2.11-cpan-87723dcf8b7 )