/// <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; }
/// <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)); }
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); } }
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)); }
/// <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; }
/// <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; }
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 :("); } } } }
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); } }
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)); } }
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)); }
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)); }
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); }
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"); } }
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)); }
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)); }
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()); } }
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(); }