Beispiel #1
0
        /// <summary>
        /// Simple constructor for the UDP header.
        /// </summary>
        public UdpHeader()
            : base()
        {
            srcPort = 0;
            destPort = 0;
            udpLength = 0;
            udpChecksum = 0;

            ipv6PacketHeader = null;
            ipv4PacketHeader = null;
        }
Beispiel #2
0
 /// <summary>
 /// Constructor for the ICMPv6 header which also takes a reference to the
 /// encompassing IPv6 header. This is necessary since the IPv6 protocol
 /// defines a pseudo header checksum which requires the checksum to be
 /// calculated over fields in the ICMPv6 header and payload as well as
 /// fields from the IPv6 packet.
 /// </summary>
 /// <param name="packetHeader">Reference to the Ipv6Header object encompassing the ICMPv6 packet</param>
 public Icmpv6Header(Ipv6Header packetHeader)
     : base()
 {
     icmpType = 0;
     icmpCode = 0;
     icmpChecksum = 0;
     ipv6Header = packetHeader;
 }
Beispiel #3
0
        /// <summary>
        /// This routine creates an instance of the Ipv6Header class from a byte
        /// array that is a received IGMP packet. This is useful when a packet
        /// is received from the network and the header object needs to be
        /// constructed from those values.
        /// </summary>
        /// <param name="ipv6Packet">Byte array containing the binary IPv6 header</param>
        /// <param name="bytesCopied">Number of bytes used in header</param>
        /// <returns>Returns the Ipv6Header object created from the byte array</returns>
        public static Ipv6Header Create(byte[] ipv6Packet, ref int bytesCopied)
        {
            Ipv6Header ipv6Header = new Ipv6Header();
            byte[] addressBytes = new byte[16];
            uint tempVal = 0, tempVal2 = 0;

            // Ensure byte array is large enough to contain an IPv6 header
            if (ipv6Packet.Length < Ipv6Header.Ipv6HeaderLength)
                return null;

            tempVal = ipv6Packet[0];
            tempVal = (tempVal >> 4) & 0xF;
            ipv6Header.ipVersion = (byte)tempVal;

            tempVal = ipv6Packet[0];
            tempVal = (tempVal & 0xF) >> 4;
            ipv6Header.ipTrafficClass = (byte)(tempVal | (uint)((ipv6Packet[1] >> 4) & 0xF));

            tempVal2 = ipv6Packet[1];
            tempVal2 = (tempVal2 & 0xF) << 16;
            tempVal = ipv6Packet[2];
            tempVal = tempVal << 8;
            ipv6Header.ipFlow = tempVal2 | tempVal | ipv6Packet[3];

            ipv6Header.ipNextHeader = ipv6Packet[4];
            ipv6Header.ipHopLimit = ipv6Packet[5];

            Array.Copy(ipv6Packet, 6, addressBytes, 0, 16);
            ipv6Header.SourceAddress = new IPAddress(addressBytes);

            Array.Copy(ipv6Packet, 24, addressBytes, 0, 16);
            ipv6Header.DestinationAddress = new IPAddress(addressBytes);

            bytesCopied = Ipv6Header.Ipv6HeaderLength;

            return ipv6Header;
        }