Esempio n. 1
0
        public static byte[] RewriteUdpHeader(byte[] packet, UInt16 port, RewriteType type)
        {
            byte IHL = (byte)(packet[0] << 4);

            IHL = (byte)(IHL >> 4);

            int ip_header_len;

            if (IHL > 5)
            {
                ip_header_len = (IHL * 32) / 8;
            }
            else
            {
                ip_header_len = 20;
            }

            int port_index = ip_header_len + 0;

            if (type == RewriteType.Source)
            {
                port_index = ip_header_len + 0;
            }
            if (type == RewriteType.Destination)
            {
                port_index = ip_header_len + 2;
            }

            byte[] bdst_port = BitConverter.GetBytes(port);

            packet[port_index]     = bdst_port[1];
            packet[port_index + 1] = bdst_port[0];

            return(RewriteIpUdpChecksum(packet));
        }
Esempio n. 2
0
        //******************************************************************************//


        public static byte[] RewriteIpHeader(byte[] packet, IPAddress ip_address, RewriteType type)
        {
            int repl_index = 12;

            if (type == RewriteType.Source)
            {
                repl_index = 12;
            }
            if (type == RewriteType.Destination)
            {
                repl_index = 16;
            }


            byte IHL = (byte)(packet[0] << 4);

            IHL = (byte)(IHL >> 4);

            int ip_header_len;

            if (IHL > 5)
            {
                ip_header_len = (IHL * 32) / 8;
            }
            else
            {
                ip_header_len = 20;
            }

            byte[] source_ip = ip_address.GetAddressBytes();
            byte[] checksum  = new byte[2];

            Array.Copy(source_ip, 0, packet, repl_index, 4);
            Array.Copy(checksum, 0, packet, 10, 2);


            byte[] header = new byte[ip_header_len];

            Array.Copy(packet, 0, header, 0, ip_header_len);

            ushort ip_checksum = ComputeChecksum(header, 0, ip_header_len);

            checksum = BitConverter.GetBytes(ip_checksum);
            Array.Reverse(checksum);

            Array.Copy(checksum, 0, packet, 10, 2);

            return(packet);
        }