Beispiel #1
0
 /// <summary>
 /// Extracts layers from provided packet and swaps current layers with extracted 
 /// </summary>
 /// <param name="packet">Packet to extract layers from</param>
 /// <returns>Cusom packet with freshly extracted layers</returns>
 public override INewPacket ExtractLayers(Packet packet)
 {
     this.EthernetLayer = packet.Ethernet.ExtractLayer() as EthernetLayer;
     this.IpV4Layer = packet.Ethernet.IpV4.ExtractLayer() as IpV4Layer;
     this.IcmpLayer = packet.Ethernet.IpV4.Icmp.ExtractLayer() as IcmpEchoLayer;
     return this;
 }
Beispiel #2
0
        /// <summary>
        /// This function build an ICMP over IPv4 over Ethernet packet.
        /// </summary>
        private static Packet BuildIcmpPacket()
        {
            EthernetLayer ethernetLayer = new EthernetLayer
            {
                Source      = new MacAddress("01:01:01:01:01:01"),
                Destination = new MacAddress("02:02:02:02:02:02"),
                EtherType   = EthernetType.None, // Will be filled automatically.
            };

            IpV4Layer ipV4Layer = new IpV4Layer
            {
                Source             = new IpV4Address("1.2.3.4"),
                CurrentDestination = new IpV4Address("11.22.33.44"),
                Fragmentation      = IpV4Fragmentation.None,
                HeaderChecksum     = null, // Will be filled automatically.
                Identification     = 123,
                Options            = IpV4Options.None,
                Protocol           = null, // Will be filled automatically.
                Ttl           = 100,
                TypeOfService = 0,
            };

            IcmpEchoLayer icmpLayer = new IcmpEchoLayer
            {
                Checksum       = null, // Will be filled automatically.
                Identifier     = 456,
                SequenceNumber = 800,
            };

            PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, icmpLayer);

            return(builder.Build(DateTime.Now));
        }
Beispiel #3
0
        private static void preparePcap()
        {
            var source = new MacAddress(getClientMAC());
            var dest   = new MacAddress(getRouterMAC());

            device       = LivePacketDevice.AllLocalMachine[0];
            communicator = device.Open(100, PacketDeviceOpenAttributes.Promiscuous, 1000);

            EthernetLayer ethLayer = new EthernetLayer {
                Source = source, Destination = dest
            };

            ipLayer = new IpV4Layer {
                Source = new IpV4Address(LocalIPAddress()), Ttl = 128
            };
            icmpLayer   = new IcmpEchoLayer();
            icmpBuilder = new PacketBuilder(ethLayer, ipLayer, icmpLayer);

            TCPLayer   = new TcpLayer();
            TCPBuilder = new PacketBuilder(ethLayer, ipLayer, TCPLayer);

            if (!TCPMode)
            {
                communicator.SetFilter("icmp[0] = 0");
            }
            else
            {
                //tcp[13] = 18
                communicator.SetFilter("tcp[13] = 18 and port " + TCPPort);
            }
        }
Beispiel #4
0
        private static Packet BuildIcmpPacket(MacAddress SourceMac, MacAddress DestinationMac, IpV4Address SourceIp, IpV4Address CurrentDestination, string packetType)
        {
            EthernetLayer ethernetLayer =
                new EthernetLayer
            {
                Source      = SourceMac,
                Destination = DestinationMac,
                EtherType   = EthernetType.None,   // Will be filled automatically.
            };

            IpV4Layer ipV4Layer =
                new IpV4Layer
            {
                //Source = new IpV4Address("1.2.3.4"),
                //CurrentDestination = new IpV4Address("11.22.33.44"),
                Source             = SourceIp,
                CurrentDestination = CurrentDestination,
                Fragmentation      = IpV4Fragmentation.None,
                HeaderChecksum     = null, // Will be filled automatically.
                Identification     = 123,
                Options            = IpV4Options.None,
                Protocol           = null, // Will be filled automatically.
                Ttl           = 100,
                TypeOfService = 0,
            };

            IcmpEchoLayer      icmpLayer  = null;
            IcmpEchoReplyLayer icmpRLayer = null;

            PacketBuilder builder = null;

            if (packetType.Equals("REQUEST"))
            {
                Console.WriteLine("Request");
                icmpLayer =
                    new IcmpEchoLayer
                {
                    Checksum       = null, // Will be filled automatically.
                    Identifier     = 456,
                    SequenceNumber = 800,
                };
                builder = new PacketBuilder(ethernetLayer, ipV4Layer, icmpLayer);
            }
            else
            {
                Console.WriteLine("Reply");
                icmpRLayer =
                    new IcmpEchoReplyLayer
                {
                    Checksum       = null, // Will be filled automatically.
                    Identifier     = 456,
                    SequenceNumber = 800,
                };
                builder = new PacketBuilder(ethernetLayer, ipV4Layer, icmpRLayer);
            }


            return(builder.Build(DateTime.Now));
        }
Beispiel #5
0
        /// <summary>
        /// Modifies every layer, one by one
        /// </summary>
        /// <returns>Same object with modified values</returns>
        public override INewPacket ModifyLayers()
        {
            this.IpV4Layer = _layerModifier.ModifyLayer(this.IpV4Layer);
            this.EthernetLayer = _layerModifier.ModifyLayer(this.EthernetLayer);
            this.IcmpLayer = _layerModifier.ModifyLayer(this.IcmpLayer);

            return this;
        }
Beispiel #6
0
        /// <summary>
        /// Copies Modules from specified packet to current packet (if values are not default)
        /// </summary>
        /// <param name="toCopyFrom"></param>
        /// <returns>New packet with copied values</returns>
        public override INewPacket CopyModulesFrom(INewPacket source)
        {
            CustomIcmpPacket toCopyFrom = source as CustomIcmpPacket;
            this.EthernetLayer = _layerExchanger.AssignUserValuesFromFilledLayerToOtherLayer(toCopyFrom.EthernetLayer, this.EthernetLayer);
            this.IpV4Layer = _layerExchanger.AssignUserValuesFromFilledLayerToOtherLayer(toCopyFrom.IpV4Layer, this.IpV4Layer);
            this.IcmpLayer = _layerExchanger.AssignUserValuesFromFilledLayerToOtherLayer(toCopyFrom.IcmpLayer, this.IcmpLayer);

            return this;
        }
Beispiel #7
0
        private static void HandleIcmp(Packet packet, int threadID)
        {
            //Console.WriteLine("ICMP Packet: " + packet.Length);
            MyDevice newDev = GetDevice(threadID, "other");

            CheckAddress(packet, "Icmp");

            if (!packet.IpV4.Source.ToString().Equals("0.0.0.0") || !packet.IpV4.Destination.ToString().Equals("0.0.0.0"))
            {
                //Console.WriteLine("Device: " + newDev.ID + "ICMP Addresses list count: " + newDev.ComputerAddresses.Count);

                Address addr = GetTargetAddress(packet, newDev);

                IpV4Layer ipLayer = (IpV4Layer)packet.Ethernet.IpV4.ExtractLayer();



                string packetType = "REQUEST";
                try
                {
                    IcmpEchoLayer test = (IcmpEchoLayer)packet.Ethernet.IpV4.Icmp.ExtractLayer();
                }
                catch
                {
                    packetType = "REPLY";
                }
                // PayloadLayer payload = (PayloadLayer)packet.Ethernet.Payload.ExtractLayer();
                //IcmpEchoLayer icmpLayer = (IcmpEchoLayer)packet.Ethernet.IpV4.Icmp.ExtractLayer();
                //Console.Write(payload.Data);
                //Console.WriteLine("ETHER LAYER DESTINATION: " + ethLayer.Destination);

                Console.WriteLine("ICMP MessageTYPE: " + packet.IpV4.Icmp.MessageType.ToString());
                Console.WriteLine("ICMP TYPE: " + packet.IpV4.Icmp.GetType().ToString());
                Console.WriteLine("ICMP CODE: " + packet.IpV4.Icmp.Code);
                Console.WriteLine("PACKET LENGTH: " + packet.Length);

                if (addr != null && ipLayer != null && packet.Length != 70)
                {
                    Packet newPacket = BuildIcmpPacket(new MacAddress(newDev.MacAddressWithDots()), new MacAddress(addr.Mac), packet.Ethernet.IpV4.Source, packet.Ethernet.IpV4.Destination, packetType);
                    //Packet newPacket = PacketBuilder.Build(DateTime.Now, ethLayer, ipLayer, icmpLayer);
                    if (newPacket.IsValid)
                    {
                        if (newPacket.Ethernet.Source != newPacket.Ethernet.Destination)
                        {
                            newDev.Communicator.SendPacket(newPacket);
                            Console.WriteLine("Icmp Packet Sent");
                        }
                    }
                    else
                    {
                        Console.WriteLine("ICMP Packet Is Not Valid :(");
                    }
                }
            }
        }
Beispiel #8
0
        private static void DiscoverNetworkBroadcast(PacketCommunicator communicator, MyDevice device)
        {
            // Supposing to be on ethernet, set mac source
            MacAddress source = new MacAddress(device.MacAddressWithDots());

            // set mac destination to broadcast
            MacAddress destination = new MacAddress("FF:FF:FF:FF:FF:FF");

            // Create the packets layers

            // Ethernet Layer
            EthernetLayer ethernetLayer = new EthernetLayer
            {
                Source      = source,
                Destination = destination
            };

            // IPv4 Layer
            IpV4Layer ipV4Layer = new IpV4Layer
            {
                Source = new IpV4Address(device.IPAddress),
                Ttl    = 128,
                // The rest of the important parameters will be set for each packet
            };

            // ICMP Layer
            IcmpEchoLayer icmpLayer = new IcmpEchoLayer();

            // Create the builder that will build our packets
            PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, icmpLayer);

            string ipBeg = device.IpWithoutEnd();

            //Send 100 Pings to different destination with different parameters
            for (int i = 0; i < 256; i++)
            {
                // Set IPv4 parameters
                ipV4Layer.CurrentDestination = new IpV4Address(ipBeg + i);
                ipV4Layer.Identification     = (ushort)i;

                // Set ICMP parameters
                icmpLayer.SequenceNumber = (ushort)i;
                icmpLayer.Identifier     = (ushort)i;

                // Build the packet
                Packet packet = builder.Build(DateTime.Now);

                // Send down the packet
                communicator.SendPacket(packet);
                //Console.WriteLine("172.16.1." + i);
            }
        }
Beispiel #9
0
        public void SendIcmpEcho(IpV4Address TargetIP, MacAddress TargetMac, ushort SequenceNumber)
        {
            EthernetLayer ethernetLayer =
                new EthernetLayer
            {
                Source      = _adapter.MAC,
                Destination = TargetMac,
                EtherType   = EthernetType.None,   // Will be filled automatically.
            };

            VLanTaggedFrameLayer vlanLayer =
                new VLanTaggedFrameLayer
            {
                PriorityCodePoint        = ClassOfService.BestEffort,
                CanonicalFormatIndicator = false,
                VLanIdentifier           = _adapter.VLAN,
                EtherType = EthernetType.None,
            };

            IpV4Layer ipV4Layer =
                new IpV4Layer
            {
                Source             = _adapter.IP,
                CurrentDestination = TargetIP,
                Fragmentation      = IpV4Fragmentation.None,
                HeaderChecksum     = null, // Will be filled automatically.
                Identification     = SequenceNumber,
                Options            = IpV4Options.None,
                Protocol           = null, // Will be filled automatically.
                Ttl           = 100,
                TypeOfService = 0,
            };

            IcmpEchoLayer icmpLayer = new IcmpEchoLayer
            {
                SequenceNumber = SequenceNumber,
                Identifier     = SequenceNumber,
            };

            if (_adapter.VLAN > 1)
            {
                VirtualNetwork.Instance.SendPacket(PacketBuilder.Build(DateTime.Now, ethernetLayer, vlanLayer, ipV4Layer, icmpLayer));
            }
            else
            {
                VirtualNetwork.Instance.SendPacket(PacketBuilder.Build(DateTime.Now, ethernetLayer, ipV4Layer, icmpLayer));
            }
        }
Beispiel #10
0
        private static Packet IcmpPacket()
        {
            EthernetLayer ethernetLayer =
                new EthernetLayer
            {
                Source      = new MacAddress(AttackVariables.Mac),
                Destination = new MacAddress(AttackVariables.Mac),
                EtherType   = EthernetType.None,
            };

            IpV4Layer ipV4Layer =
                new IpV4Layer
            {
                Source             = new IpV4Address(AttackVariables.IP),
                CurrentDestination = new IpV4Address(AttackVariables.IP),
                Fragmentation      = IpV4Fragmentation.None,
                HeaderChecksum     = null,
                Identification     = 0,
                Options            = IpV4Options.None,
                Protocol           = null,
                Ttl           = 100,
                TypeOfService = 0,
            };

            IcmpEchoLayer icmpLayer =
                new IcmpEchoLayer
            {
                Checksum       = null,
                Identifier     = 0,
                SequenceNumber = 0,
            };

            PayloadLayer payloadLayer =
                new PayloadLayer
            {
                Data = new Datagram(AttackVariables.BufferSize),
            };

            PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, icmpLayer, payloadLayer);

            return(builder.Build(DateTime.Now));
        }
Beispiel #11
0
        public void Request(PacketCommunicator dev, String srcMAC, String dstMAC, String srcIP, String dstIP)
        {
            EthernetLayer ethernetLayer =
                new EthernetLayer
            {
                Source      = new MacAddress(srcMAC),
                Destination = new MacAddress(dstMAC),
                EtherType   = EthernetType.None, // Will be filled automatically.
            };

            IpV4Layer ipV4Layer =
                new IpV4Layer
            {
                Source             = new IpV4Address(srcIP),
                CurrentDestination = new IpV4Address(dstIP),
                Fragmentation      = IpV4Fragmentation.None,
                HeaderChecksum     = null, // Will be filled automatically.
                Identification     = 123,
                Options            = IpV4Options.None,
                Protocol           = null, // Will be filled automatically.
                Ttl           = 100,
                TypeOfService = 0,
            };

            Random rnd = new Random();
            ushort id  = (ushort)rnd.Next(1, 65535);

            seq++;
            IcmpEchoLayer icmpLayer =
                new IcmpEchoLayer
            {
                Checksum       = null, // Will be filled automatically.
                SequenceNumber = seq,
                Identifier     = id
            };

            PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, icmpLayer);

            dev.SendPacket(builder.Build(DateTime.Now));
        }
Beispiel #12
0
        public void PingAddress(PacketCommunicator communicator, IpV4Address ipAddress)
        {
            //EthernetLayer ethernetLayer = new EthernetLayer
            //{
            //    Source = SourceMac,
            //    Destination = DestinationMac
            //};
            //
            //// IPv4 Layer
            //IpV4Layer ipV4Layer = new IpV4Layer
            //{
            //    Source = ipAddress,
            //    Ttl = 128,
            //    CurrentDestination = DestinationIpV4
            //};
            CreateEthAndIpv4Layer(out var ethernetLayer, out var ipV4Layer);

            var icmpLayer = new IcmpEchoLayer();

            var packet = PacketBuilder.Build(DateTime.Now, ethernetLayer, ipV4Layer, icmpLayer);

            communicator.SendPacket(packet);
        }
Beispiel #13
0
        private void btnAdd_Click(object sender, EventArgs e)
        {
            try
            {
                ushort?checksum = null;
                if (txtCheckSum.Enabled == true)
                {
                    checksum = ushort.Parse(txtCheckSum.Text);
                }

                IcmpEchoLayer icmpLayer =
                    new IcmpEchoLayer
                {
                    Checksum       = checksum, // Will be filled automatically.
                    Identifier     = ushort.Parse(txtidentification.Text),
                    SequenceNumber = ushort.Parse(txtSequence.Text),
                };
                mainForm.addToPacket(icmpLayer, "ICMP -> " + txtidentification.Text + " -> " + txtSequence.Text);
            }
            catch (Exception)
            {
                MessageBox.Show("Invalid Parameters");
            }
        }
Beispiel #14
0
        public Packet BuildIcmpPacket(Packet origPacket)
        {
            EthernetLayer ethernetLayer =
                new EthernetLayer
            {
                Source      = origPacket.Ethernet.Source,
                Destination = lookUpMacAdress(Convert.ToString(origPacket.Ethernet.IpV4.Destination)),
                EtherType   = EthernetType.None,   // Will be filled automatically.
            };

            IpV4Layer ipV4Layer =
                new IpV4Layer
            {
                Source             = origPacket.Ethernet.IpV4.Source,
                CurrentDestination = origPacket.Ethernet.IpV4.Destination,
                Fragmentation      = IpV4Fragmentation.None,
                HeaderChecksum     = null, // Will be filled automatically.
                Identification     = origPacket.Ethernet.IpV4.Identification,
                Options            = IpV4Options.None,
                Protocol           = null, // Will be filled automatically.
                Ttl           = origPacket.Ethernet.IpV4.Ttl,
                TypeOfService = origPacket.Ethernet.IpV4.TypeOfService,
            };

            IcmpEchoLayer icmpLayer =
                new IcmpEchoLayer
            {
                Checksum       = origPacket.Ethernet.IpV4.Icmp.Checksum, // Will be filled automatically.
                Identifier     = 456,
                SequenceNumber = 800,
            };

            PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, icmpLayer);

            return(builder.Build(DateTime.Now));
        }
Beispiel #15
0
        static Packet BuildIcmpPacket(string ipDestination, string thisMachineMac, string routerMac, byte ttl, string source)
        {
            EthernetLayer ethernetLayer =
                new EthernetLayer
            {
                Source      = new MacAddress(thisMachineMac),
                Destination = new MacAddress(routerMac),
                EtherType   = EthernetType.None,    // Will be filled automatically.
            };

            IpV4Layer ipV4Layer =
                new IpV4Layer
            {
                Source             = new IpV4Address(source),
                CurrentDestination = new IpV4Address(ipDestination),
                Fragmentation      = IpV4Fragmentation.None,
                HeaderChecksum     = null, // Will be filled automatically.
                Identification     = (ushort)(ttl * 2 % 8192),
                Options            = IpV4Options.None,
                Protocol           = null, // Will be filled automatically.
                Ttl           = ttl,
                TypeOfService = 0,
            };

            IcmpEchoLayer icmpLayer =
                new IcmpEchoLayer
            {
                Checksum       = null, // Will be filled automatically.
                Identifier     = 1,
                SequenceNumber = (ushort)(ttl * 2 % 8192),
            };

            PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, icmpLayer);

            return(builder.Build(DateTime.Now));
        }
Beispiel #16
0
        public static void Test_SendPacket_01(string deviceName = null)
        {
            //// Retrieve the device list from the local machine
            //IList<LivePacketDevice> allDevices = LivePacketDevice.AllLocalMachine;

            //if (allDevices.Count == 0)
            //{
            //    Console.WriteLine("No interfaces found! Make sure WinPcap is installed.");
            //    return;
            //}

            //// Print the list
            //for (int i = 0; i != allDevices.Count; ++i)
            //{
            //    LivePacketDevice device = allDevices[i];
            //    Console.Write((i + 1) + ". " + device.Name);
            //    if (device.Description != null)
            //        Console.WriteLine(" (" + device.Description + ")");
            //    else
            //        Console.WriteLine(" (No description available)");
            //}

            //int deviceIndex = 0;
            //do
            //{
            //    Console.WriteLine("Enter the interface number (1-" + allDevices.Count + "):");
            //    string deviceIndexString = Console.ReadLine();
            //    if (!int.TryParse(deviceIndexString, out deviceIndex) ||
            //        deviceIndex < 1 || deviceIndex > allDevices.Count)
            //    {
            //        deviceIndex = 0;
            //    }
            //} while (deviceIndex == 0);

            //// Take the selected adapter
            //PacketDevice selectedDevice = allDevices[deviceIndex - 1];
            PacketDevice device = SelectDevice(deviceName);

            // Open the output device, promiscuous mode
            using (PacketCommunicator communicator = device.Open(100, PacketDeviceOpenAttributes.Promiscuous, 1000))
            {
                // Supposing to be on ethernet, set mac source to 01:01:01:01:01:01
                MacAddress source = new MacAddress("01:01:01:01:01:01");

                // set mac destination to 02:02:02:02:02:02
                MacAddress destination = new MacAddress("02:02:02:02:02:02");

                // Create the packets layers

                // Ethernet Layer
                EthernetLayer ethernetLayer = new EthernetLayer
                {
                    Source      = source,
                    Destination = destination
                };

                // IPv4 Layer
                IpV4Layer ipV4Layer = new IpV4Layer
                {
                    Source = new IpV4Address("1.2.3.4"),
                    Ttl    = 128,
                    // The rest of the important parameters will be set for each packet
                };

                // ICMP Layer
                IcmpEchoLayer icmpLayer = new IcmpEchoLayer();

                // Create the builder that will build our packets
                PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, icmpLayer);

                // Send 100 Pings to different destination with different parameters
                for (int i = 0; i != 100; ++i)
                {
                    // Set IPv4 parameters
                    ipV4Layer.CurrentDestination = new IpV4Address("2.3.4." + i);
                    ipV4Layer.Identification     = (ushort)i;

                    // Set ICMP parameters
                    icmpLayer.SequenceNumber = (ushort)i;
                    icmpLayer.Identifier     = (ushort)i;

                    // Build the packet
                    Packet packet = builder.Build(DateTime.Now);

                    // Send down the packet
                    communicator.SendPacket(packet);
                }

                communicator.SendPacket(BuildEthernetPacket());
                communicator.SendPacket(BuildArpPacket());
                communicator.SendPacket(BuildVLanTaggedFramePacket());
                communicator.SendPacket(BuildIpV4Packet());
                communicator.SendPacket(BuildIcmpPacket());
                communicator.SendPacket(BuildIgmpPacket());
                communicator.SendPacket(BuildGrePacket());
                communicator.SendPacket(BuildUdpPacket());
                communicator.SendPacket(BuildTcpPacket());
                communicator.SendPacket(BuildDnsPacket());
                communicator.SendPacket(BuildHttpPacket());
                communicator.SendPacket(BuildComplexPacket());
            }
        }
Beispiel #17
0
        private void btnSendPackets_Click(object sender, EventArgs e)
        {
            // Take the selected adapter
            //selectedDevice = allDevices[cmbAdapters.SelectedIndex];

            // Open the output device

            /*using (PacketCommunicator communicator = selectedDevice.Open(100, // name of the device
             *                                                           PacketDeviceOpenAttributes.Promiscuous, // promiscuous mode
             *                                                           1000)) // read timeou`*/
            {
                // Supposing to be on ethernet, set mac source to 01:01:01:01:01:01
                MacAddress source = new MacAddress("30:3A:64:69:70:FD");

                // set mac destination to 02:02:02:02:02:02
                MacAddress destination = new MacAddress("F4:06:69:06:DC:EF");

                // Create the packets layers

                // Ethernet Layer
                EthernetLayer ethernetLayer = new EthernetLayer
                {
                    Source      = source,
                    Destination = destination
                };

                // IPv4 Layer
                IpV4Layer ipV4Layer = new IpV4Layer
                {
                    Source = new IpV4Address("10.20.228.173"),
                    Ttl    = 128,
                    // The rest of the important parameters will be set for each packet
                };

                // ICMP Layer
                IcmpEchoLayer icmpLayer = new IcmpEchoLayer();

                // Create the builder that will build our packets
                PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, icmpLayer);

                // Send 100 Pings to different destination with different parameters
                for (int i = 0; i != 100; ++i)
                {
                    // Set IPv4 parameters
                    ipV4Layer.CurrentDestination = new IpV4Address("10.20.229.46");
                    ipV4Layer.Identification     = (ushort)i;

                    // Set ICMP parameters
                    icmpLayer.SequenceNumber = (ushort)i;
                    icmpLayer.Identifier     = (ushort)i;

                    // Build the packet
                    Packet packet = builder.Build(DateTime.Now);

                    // Send down the packet

                    /*
                     * while (true)
                     * {
                     *  communicator.SendPacket(packet);
                     * }*/
                }
                communicator.SendPacket(createSynPack());
                communicator.SendPacket(PcapLib.BuildEthernetPacket());
                communicator.SendPacket(PcapLib.BuildArpPacket());
                communicator.SendPacket(PcapLib.BuildVLanTaggedFramePacket());
                communicator.SendPacket(PcapLib.BuildIpV4Packet());
                communicator.SendPacket(PcapLib.BuildIpV6Packet());
                communicator.SendPacket(PcapLib.BuildIcmpPacket());
                communicator.SendPacket(PcapLib.BuildIgmpPacket());
                communicator.SendPacket(PcapLib.BuildGrePacket());
                communicator.SendPacket(PcapLib.BuildUdpPacket());
                communicator.SendPacket(PcapLib.BuildTcpPacket());
                communicator.SendPacket(PcapLib.BuildDnsPacket());
                communicator.SendPacket(PcapLib.BuildHttpPacket());
                communicator.SendPacket(PcapLib.BuildComplexPacket());
            }
        }
 static void Main(string[] args)
 {
     // Retrieve the device list from the local machine
     IList<LivePacketDevice> allDevices = LivePacketDevice.AllLocalMachine;
     if (allDevices.Count == 0)
     {
         Console.WriteLine("No interfaces found! Make sure WinPcap is installed.");
         return;
     }
     // Print the list
     for (int i = 0; i != allDevices.Count; ++i)
     {
         LivePacketDevice device = allDevices[i];
         Console.Write((i + 1) + ". " + device.Name);
         if (device.Description != null)
             Console.WriteLine(" (" + device.Description + ")");
         else
             Console.WriteLine(" (No description available)");
     }
     int deviceIndex = 0;
     do
     {
         Console.WriteLine("Enter the interface number (1-" + allDevices.Count + "):");
         string deviceIndexString = Console.ReadLine();
         if (!int.TryParse(deviceIndexString, out deviceIndex) ||
             deviceIndex < 1 || deviceIndex > allDevices.Count)
         {
             deviceIndex = 0;
         }
     } while (deviceIndex == 0);
     // Take the selected adapter
     PacketDevice selectedDevice = allDevices[deviceIndex - 1];
     // Open the output device
     using (PacketCommunicator communicator = selectedDevice.Open(100, // name of the device
                                                                  PacketDeviceOpenAttributes.Promiscuous, // promiscuous mode
                                                                  1000)) // read timeout
     {
         // Supposing to be on ethernet, set mac source to 01:01:01:01:01:01
         MacAddress source = new MacAddress("01:01:01:01:01:01");
         // set mac destination to 02:02:02:02:02:02
         MacAddress destination = new MacAddress("02:02:02:02:02:02");
         // Create the packets layers
         // Ethernet Layer
         EthernetLayer ethernetLayer = new EthernetLayer
         {
             Source = source,
             Destination = destination
         };
         // IPv4 Layer
         IpV4Layer ipV4Layer = new IpV4Layer
         {
             Source = new IpV4Address("1.2.3.4"),
             Ttl = 128,
             // The rest of the important parameters will be set for each packet
         };
         // ICMP Layer
         IcmpEchoLayer icmpLayer = new IcmpEchoLayer();
         // Create the builder that will build our packets
         PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, icmpLayer);
         // Send 100 Pings to different destination with different parameters
         for (int i = 0; i != 1; ++i)
         {
             // Set IPv4 parameters
             ipV4Layer.CurrentDestination = new IpV4Address("2.3.4.1" );
             ipV4Layer.Identification = (ushort)i;
             // Set ICMP parameters
             icmpLayer.SequenceNumber = (ushort)i;
             icmpLayer.Identifier = (ushort)i;
             // Build the packet
             Packet packet = builder.Build(DateTime.Now);
             // Send down the packet
            communicator.SendPacket(packet);
         }
     }
     Console.ReadLine();
 }