Esempio n. 1
0
        public byte[] ToBytes()
        {
            byte[] byteValue;
            byte[] payload    = Payload.ToBytes();
            byte[] ipv6Packet = new byte[Ipv6HeaderLength + payload.Length];
            int    offset     = 0;

            ipv6Packet[offset++] = (byte)((Version << 4) | ((TrafficClass >> 4) & 0xF));
            ipv6Packet[offset++] = (byte)((uint)((TrafficClass << 4) & 0xF0) | (uint)((Flow >> 16) & 0xF));
            ipv6Packet[offset++] = (byte)((Flow >> 8) & 0xFF);
            ipv6Packet[offset++] = (byte)(Flow & 0xFF);


            byteValue = NetUtilities.FromLittleEndian(PayloadLength);
            Array.Copy(byteValue, 0, ipv6Packet, offset, byteValue.Length);
            offset += byteValue.Length;

            ipv6Packet[offset++] = (byte)NextHeader;
            ipv6Packet[offset++] = (byte)HopLimit;

            byteValue = SourceAddress.GetAddressBytes();
            Array.Copy(byteValue, 0, ipv6Packet, offset, byteValue.Length);
            offset += byteValue.Length;

            byteValue = DestinationAddress.GetAddressBytes();
            Array.Copy(byteValue, 0, ipv6Packet, offset, byteValue.Length);
            offset += byteValue.Length;

            Array.Copy(payload, 0, ipv6Packet, offset, payload.Length);

            return(ipv6Packet);
        }
Esempio n. 2
0
        public byte[] ToBytes()
        {
            byte[] icmpv6message = null;

            if (IcmpMessage != null)
            {
                icmpv6message = IcmpMessage.ToBytes();
            }

            byte[] icmpv6packet = new byte[Icmpv6HeaderLength];


            icmpv6packet[0] = (byte)Icmpv6MessageType;
            icmpv6packet[1] = Code;

            Array.Copy(NetUtilities.FromLittleEndian(Checksum), 0, icmpv6packet, 2, 2);

            if (icmpv6message != null)
            {
                return(Utilities.CombineArrays(icmpv6packet, icmpv6message));
            }
            else
            {
                return(icmpv6packet);
            }
        }
Esempio n. 3
0
        public IPv6PseudoHeader(IPAddress sourceAddress, IPAddress destinationAddress, ushort headerLength, byte nextHeader)
        {
            pseudoHeader = new byte[40]; // Size of IPv6 header
            Array.Copy(sourceAddress.GetAddressBytes(), 0, pseudoHeader, 0, 16);
            Array.Copy(destinationAddress.GetAddressBytes(), 0, pseudoHeader, 16, 16);
            Array.Copy(NetUtilities.FromLittleEndian(headerLength), 0, pseudoHeader, 32, 2);

            pseudoHeader[36] = 0;  // Reserved 3 zeros
            pseudoHeader[37] = 0;
            pseudoHeader[38] = 0;

            pseudoHeader[39] = nextHeader; //NextHeader
        }
Esempio n. 4
0
        public byte[] ToBytes()
        {
            byte[] udpHeader = new byte[UdpHeaderLength];

            Array.Copy(NetUtilities.FromLittleEndian(SourcePort), 0, udpHeader, 0, 2);
            Array.Copy(NetUtilities.FromLittleEndian(DestinationPort), 0, udpHeader, 2, 2);
            Array.Copy(NetUtilities.FromLittleEndian(Length), 0, udpHeader, 4, 2);
            Array.Copy(NetUtilities.FromLittleEndian(Checksum), 0, udpHeader, 6, 2);

            if (Payload != null)
            {
                return(Utilities.CombineArrays(udpHeader, Payload));
            }
            else
            {
                return(udpHeader);
            }
        }