Пример #1
0
        /// <summary> Generate a pseudo-random ARP header.
        /// </summary>
        public static byte[] generateRandomARPHeader()
        {
            byte[] bytes = new byte[Packets.ARPFields.ARP_HEADER_LEN];

            ArrayHelper.insertLong(bytes, Packets.ARPFields.ARP_ETH_ADDR_CODE, Packets.ARPFields.ARP_HW_TYPE_POS, Packets.ARPFields.ARP_ADDR_TYPE_LEN);
            ArrayHelper.insertLong(bytes, Packets.ARPFields.ARP_IP_ADDR_CODE, Packets.ARPFields.ARP_PR_TYPE_POS, Packets.ARPFields.ARP_ADDR_TYPE_LEN);
            ArrayHelper.insertLong(bytes, IPAddress.WIDTH, Packets.ARPFields.ARP_HW_LEN_POS, Packets.ARPFields.ARP_ADDR_SIZE_LEN);
            ArrayHelper.insertLong(bytes, MACAddress.WIDTH, Packets.ARPFields.ARP_PR_LEN_POS, Packets.ARPFields.ARP_ADDR_SIZE_LEN);
            ArrayHelper.insertLong(bytes, test(Settings.PROB_ARP_REQUEST)?Packets.ARPFields.ARP_OP_REQ_CODE:Packets.ARPFields.ARP_OP_REP_CODE, Packets.ARPFields.ARP_OP_POS, Packets.ARPFields.ARP_OP_LEN);
            ArrayHelper.insertLong(bytes, MACAddress.random(), Packets.ARPFields.ARP_S_HW_ADDR_POS, MACAddress.WIDTH);
            int srcAddress = IPAddress.random(Settings.SIM_NETWORK, Settings.SIM_NETMASK);

            ArrayHelper.insertLong(bytes, srcAddress, Packets.ARPFields.ARP_S_PR_ADDR_POS, IPAddress.WIDTH);
            ArrayHelper.insertLong(bytes, MACAddress.random(), Packets.ARPFields.ARP_T_HW_ADDR_POS, MACAddress.WIDTH);

            int dstAddress = srcAddress;
            int count      = 0;

            // cheezy way to make sure that the source and dest address aren't the same
            while (dstAddress == srcAddress && count++ < randomRetryCount)
            {
                dstAddress = IPAddress.random(Settings.SIM_NETWORK, Settings.SIM_NETMASK);
            }
            ArrayHelper.insertLong(bytes, dstAddress, Packets.ARPFields.ARP_T_PR_ADDR_POS, IPAddress.WIDTH);

            return(bytes);
        }
Пример #2
0
        /// <summary> Generate a pseudo-random IP header.
        /// </summary>
        public static byte[] generateRandomIPHeader()
        {
            byte[] bytes = new byte[Packets.IPFields_Fields.IP_HEADER_LEN];

            // ipv4. WARNING: only IPv4 is currently supported
            ArrayHelper.insertLong(bytes, 0x45, Packets.IPFields_Fields.IP_VER_POS, Packets.IPFields_Fields.IP_VER_LEN);

            // specify no special handling flag in type of service code
            ArrayHelper.insertLong(bytes, 0x2, Packets.IPFields_Fields.IP_TOS_POS, Packets.IPFields_Fields.IP_TOS_LEN);

            // random packet contains only a header, no payload
            ArrayHelper.insertLong(bytes, Packets.IPFields_Fields.IP_HEADER_LEN, Packets.IPFields_Fields.IP_LEN_POS, Packets.IPFields_Fields.IP_LEN_LEN);

            // increment id each time a packet is generated
            ArrayHelper.insertLong(bytes, fakeId++, Packets.IPFields_Fields.IP_ID_POS, Packets.IPFields_Fields.IP_ID_LEN);

            // header length and flags (none specified)..
            ArrayHelper.insertLong(bytes, 0x4000, Packets.IPFields_Fields.IP_FRAG_POS, Packets.IPFields_Fields.IP_FRAG_LEN);

            // time-to-live
            ArrayHelper.insertLong(bytes, 0xff, Packets.IPFields_Fields.IP_TTL_POS, Packets.IPFields_Fields.IP_TTL_LEN);

            // protocol
            ArrayHelper.insertLong(bytes, randomIPProtocol(), Packets.IPFields_Fields.IP_CODE_POS, Packets.IPFields_Fields.IP_CODE_LEN);

            // checksum. todo: generate real checksum
            ArrayHelper.insertLong(bytes, 0xcccc, Packets.IPFields_Fields.IP_CSUM_POS, Packets.IPFields_Fields.IP_CSUM_LEN);

            int srcAddress = IPAddress.random(Settings.SIM_NETWORK, Settings.SIM_NETMASK);

            // source ip
            ArrayHelper.insertLong(bytes, srcAddress, Packets.IPFields_Fields.IP_SRC_POS, IPAddress.WIDTH);

            int dstAddress = srcAddress;
            int count      = 0;

            // cheezy way to make sure that the source and dest address aren't the same
            while (dstAddress == srcAddress && count++ < randomRetryCount)
            {
                dstAddress = IPAddress.random(Settings.SIM_NETWORK, Settings.SIM_NETMASK);
            }
            // dest ip
            ArrayHelper.insertLong(bytes, dstAddress, Packets.IPFields_Fields.IP_DST_POS, IPAddress.WIDTH);

            return(bytes);
        }