logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Net::Frame::Layer::IPv4 - Internet Protocol v4 layer object

Attributes

id  IP ID of the datagram.

       ttl Time to live.

       srcdst Source and destination IP addresses.

       protocol
           Of which type the layer 4 is.

       checksum
           IP checksum.

       flags
           IP Flags.

       offset
           IP fragment offset.

       version
           IP version, here it is 4.

       tos Type of service flag.

       length
           Total length in bytes of the packet, including IP headers (that is, layer 3 + layer 4 + layer 7).

       hlen
           Header length in number of words, including IP options.

       options
           IP options, as a hexadecimal string.

       noFixLen
           Since  the  byte  ordering of length attribute varies from system to system, a subroutine inside this
           module detects which byte order to use.  Sometimes,  like  when  you  build  Net::Frame::Layer::8021Q
           layers,  you  may  have the need to avoid this. So set it to 1 in order to avoid fixing. Default is 0
           (that is to fix).

       The following are inherited attributes. See Net::Frame::Layer for more information.

       rawpayloadnextLayer

Author

       Patrice <GomoR> Auffret

Constants

       Load them: use Net::Frame::Layer::IPv4 qw(:consts);

       NF_IPv4_PROTOCOL_ICMPv4NF_IPv4_PROTOCOL_IGMPNF_IPv4_PROTOCOL_IPIPNF_IPv4_PROTOCOL_TCPNF_IPv4_PROTOCOL_EGPNF_IPv4_PROTOCOL_IGRPNF_IPv4_PROTOCOL_CHAOSNF_IPv4_PROTOCOL_UDPNF_IPv4_PROTOCOL_IDPNF_IPv4_PROTOCOL_DCCPNF_IPv4_PROTOCOL_IPv6NF_IPv4_PROTOCOL_IPv6ROUTINGNF_IPv4_PROTOCOL_IPv6FRAGMENTNF_IPv4_PROTOCOL_IDRPNF_IPv4_PROTOCOL_RSVPNF_IPv4_PROTOCOL_GRENF_IPv4_PROTOCOL_ESPNF_IPv4_PROTOCOL_AHNF_IPv4_PROTOCOL_ICMPv6NF_IPv4_PROTOCOL_EIGRPNF_IPv4_PROTOCOL_OSPFNF_IPv4_PROTOCOL_ETHERIPNF_IPv4_PROTOCOL_PIMNF_IPv4_PROTOCOL_VRRPNF_IPv4_PROTOCOL_STPNF_IPv4_PROTOCOL_SCTPNF_IPv4_PROTOCOL_UDPLITE
           Various protocol type constants.

       NF_IPv4_MORE_FRAGMENTNF_IPv4_DONT_FRAGMENTNF_IPv4_RESERVED_FRAGMENT
           Various possible flags.

Description

       This modules implements the encoding and decoding of the IPv4 layer.

       RFC: ftp://ftp.rfc-editor.org/in-notes/rfc791.txt

       See also Net::Frame::Layer for other attributes and methods.

Methods

newnew (hash)
           Object constructor. You can pass attributes that  will  overwrite  default  ones.  See  SYNOPSIS  for
           default values.

       getHeaderLength
           Returns the header length in bytes, not including IP options.

       getOptionsLength
           Returns the length in bytes of IP options. 0 if none.

       computeLengths ({ payloadLength => VALUE })
           In  order to compute lengths attributes within IPv4 header, you need to pass via a hashref the number
           of bytes contained in IPv4 payload (that is, the sum of all layers after the IPv4 one).

       computeChecksums
           Computes the IPv4 checksum.

       The following are inherited methods. Some of them may be overridden in this layer, and  some  others  may
       not be meaningful in this layer. See Net::Frame::Layer for more information.

       layercomputeLengthscomputeChecksumspackunpackencapsulategetLengthgetPayloadLengthprintdump

Name

       Net::Frame::Layer::IPv4 - Internet Protocol v4 layer object

See Also

       Net::Frame::Layer

Synopsis

          use Net::Frame::Layer::IPv4 qw(:consts);

          # Build a layer
          my $layer = Net::Frame::Layer::IPv4->new(
             version  => 4,
             tos      => 0,
             id       => getRandom16bitsInt(),
             length   => NF_IPv4_HDR_LEN,
             hlen     => 5,
             flags    => 0,
             offset   => 0,
             ttl      => 128,
             protocol => NF_IPv4_PROTOCOL_TCP,
             checksum => 0,
             src      => '127.0.0.1',
             dst      => '127.0.0.1',
             options  => '',
             noFixLen => 0,
          );
          $layer->pack;

          print 'RAW: '.$layer->dump."\n";

          # Read a raw layer
          my $layer = Net::Frame::Layer::IPv4->new(raw => $raw);

          print $layer->print."\n";
          print 'PAYLOAD: '.unpack('H*', $layer->payload)."\n"
             if $layer->payload;

See Also