/// <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); }
/// <summary> Generate a pseudo-random ethernet header. /// </summary> public static byte[] generateRandomEthernetHeader() { byte[] bytes = new byte[Packets.EthernetFields.ETH_HEADER_LEN]; long dst = MACAddress.random(); ArrayHelper.insertLong(bytes, dst, Packets.EthernetFields.ETH_DST_POS, MACAddress.WIDTH); long src = MACAddress.random(); ArrayHelper.insertLong(bytes, src, Packets.EthernetFields.ETH_SRC_POS, MACAddress.WIDTH); int type = randomEthernetProtocol(); ArrayHelper.insertLong(bytes, type, Packets.EthernetFields.ETH_CODE_POS, Packets.EthernetFields.ETH_CODE_LEN); return(bytes); }