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); }
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); } }
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 }
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); } }