⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipv6.pm

📁 SinFP是一种新的识别对方计算机操作系统类型的工具
💻 PM
字号:
## $Id: IPv6.pm,v 1.3.2.4 2006/06/11 09:46:30 gomor Exp $#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   nextHeader   payloadLength   hopLimit   src   dst);__PACKAGE__->cgBuildIndices;__PACKAGE__->cgBuildAccessorsScalar(\@AS);no strict 'vars';sub new {   my $self = shift->SUPER::new(      version      => 6,      trafficClass => 0,      flowLabel    => 0,      nextHeader   => NP_IPv6_PROTOCOL_TCP,      hopLimit     => 0xff,      src          => $Env->ip6,      dst          => '::1',      @_,   );   $self;}sub getLength        { NP_IPv6_HDR_LEN           }sub getPayloadLength { shift->[$__payloadLength] }sub _computePayloadLength {   my $self = shift;   my ($frame) = @_;   my $len = 0;   $len += $frame->l4->getLength if $frame->l4;   $len += $frame->l7->getLength if $frame->l7;   $self->[$__payloadLength] = $len;}sub computeLengths {   my $self = shift;   my ($frame) = @_;   $frame->l4->computeLengths($frame) or return undef;   $self->_computePayloadLength($frame);   1;}sub pack {   my $self = shift;   my $vtf1 = packIntToNet($self->[$__version],      'C',  0,  4);   my $vtf2 = packIntToNet($self->[$__trafficClass], 'C',  4,  8);   my $vtf3 = packIntToNet($self->[$__flowLabel],    'N', 12, 20);   $self->[$__raw] = $self->SUPER::pack('B32nCCa*a*',      $vtf1.$vtf2.$vtf3,      $self->[$__payloadLength],      $self->[$__nextHeader],      $self->[$__hopLimit],      inet6Aton($self->[$__src]),      inet6Aton($self->[$__dst]),   ) or return undef;   1;}sub unpack {   my $self = shift;   my ($vtf, $pl, $nh, $hl, $sa, $da, $payload) =      $self->SUPER::unpack('B32nCCa16a16 a*', $self->[$__raw])         or return undef;   $self->[$__version]       = unpackIntFromNet($vtf, 'C',  0,  4,  4);   $self->[$__trafficClass]  = unpackIntFromNet($vtf, 'C',  4,  0,  8);   $self->[$__flowLabel]     = unpackIntFromNet($vtf, 'N', 12, 12, 20);   $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(),      #NP_IPv4_PROTOCOL_ICMPv6() => NP_LAYER_ICMPv6(),   };   $types->{shift->[$__nextHeader]} || NP_LAYER_UNKNOWN();}sub print {   my $self = shift;             my $i = $self->is;          my $l = $self->layer;       sprintf      "$l:+$i: version:%d  trafficClass:%.2d  flowLabel:%.5d  nextHeader:%.2d\n".      "$l: $i: [%s => %s]\n".      "$l: $i: length:%d",         $self->version,         $self->trafficClass,         $self->flowLabel,         $self->nextHeader,         $self->src,         $self->dst,         $self->getLength,   ;}1;=head1 NAMENet::Packet::IPv6 - Internet Protocol v6 layer 3 object=head1 SYNOPSIS   use Net::Packet::IPv6;   #燘uild layer to inject to network   my $ip6 = Net::Packet::IPv6->new(      dst => $hostname6,   );   # Decode from network to create the object   # Usually, you do not use this, it is used by Net::Packet::Frame   my $ip6Decoded = Net::Packet::IPv6->new(raw = $rawFromNetwork);   print $ip6->print, "\n";=head1 DESCRIPTIONThis modules implements the encoding and decoding of the IPv6 layer.RFC: ftp://ftp.rfc-editor.org/in-notes/rfc2460.txtSee also B<Net::Packet::Layer> and B<Net::Packet::Layer3> for other attributes and methods.=head1 ATTRIBUTES=over 4=item B<version>Version of Internet Protocol header.=item B<trafficClass>Traffic class field. Was Type of Service in IPv4.=item B<flowLabel>Flow label class field. Was IP ID in IPv4.=item B<nextHeader>The type of next header. Was protocol in IPv4.=item B<payloadLength>Length in bytes of encapsulated layers (that is, layer 4 + layer 7).=item B<hopLimit>Was TTL field in IPv4.=item B<src>=item B<dst>Source and destination addresses.=back=head1 METHODS=over 4=item B<new>Object constructor. You can pass attributes that will overwrite default ones. Default values:version:      6trafficClass: 0flowLabel:    0nextHeader:   NP_IPv6_PROTOCOL_TCPhopLimit:     0xffsrc:          $Env->ip6dst:          '::1'=item B<getPayloadLength>Returns the length in bytes of encapsulated layers (that is layer 4 + layer 7).=item B<pack>Packs all attributes into a raw format, in order to inject to network. Returns 1 on success, undef otherwise.=item B<unpack>Unpacks raw data from network and stores attributes into the object. Returns 1 on success, undef otherwise.=back=head1 CONSTANTSLoad them: use Net::Packet::Consts qw(:ipv6);=over 4=item B<NP_IPv6_PROTOCOL_TCP>=item B<NP_IPv6_PROTOCOL_UDP>Constants for B<nextHeader> attribute.=back=head1 AUTHOR   Patrice E<lt>GomoRE<gt> Auffret      =head1 COPYRIGHT AND LICENSE      Copyright (c) 2004-2006, Patrice E<lt>GomoRE<gt> Auffret      You may distribute this module under the terms of the Artistic license.See LICENSE.Artistic file in the source distribution archive.      =head1 RELATED MODULES        L<NetPacket>, L<Net::RawIP>, L<Net::RawSock>      =cut

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -