public override ILayer ExtractLayer() { IcmpEchoLayer icmpEchoLayer = new IcmpEchoLayer(); icmpEchoLayer.Checksum = new ushort?(this.Checksum); icmpEchoLayer.Identifier = this.Identifier; icmpEchoLayer.SequenceNumber = this.SequenceNumber; return((ILayer)icmpEchoLayer); }
public ICMPSendPacket(string MACsrc, string MACdst, string IPsrc, string IPdst, string IpId, string TTL, string Identifier, string SQN) { GetBase(MACsrc, MACdst, IPsrc, IPdst, IpId, TTL); icmpLayer = new IcmpEchoLayer { Checksum = null, // Will be filled automatically. Identifier = StringToUShort(Identifier), SequenceNumber = StringToUShort(SQN), }; }
/// <summary> /// This function build an ICMP over IPv4 over Ethernet packet. /// </summary> public Packet BuildIcmpPacket( string TargetIpAddress, string RouterMacAddress ) { EthernetLayer ethernetLayer = new EthernetLayer { Source = new MacAddress( ToMac( _ownMacAddress.ToString() ) ), Destination = new MacAddress( ToMac( RouterMacAddress.ToString() ) ), EtherType = EthernetType.None, // Will be filled automatically. }; IpV4Layer ipV4Layer = new IpV4Layer { Source = new IpV4Address( new IPAddress( _ownIpAddress ).ToString() ), CurrentDestination = new IpV4Address( TargetIpAddress ), 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 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); } }
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); }
static void Main(string[] args) { // Send anonymous statistics about the usage of Pcap.Net PcapDotNet.Analysis.PcapDotNetAnalysis.OptIn = true; // 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 1:1:1:1:1:1 MacAddress source = new MacAddress("1:1:1:1:1:1"); // set mac destination to 2:2:2:2:2:2 MacAddress destination = new MacAddress("2:2:2:2:2:2"); // 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.Destination = 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); } } }
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); } }
/// <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 void SendIcmpRequestPacket(Common.IPv4Address ip, byte ttl, ushort bytes, int seqNum, int timeout, PingResultHandler callback) { OSI.Layer3Packet packet = new OSI.Layer3Packet(); packet.Destination = ip.AsString; packet.SourceIP = _client.Configuration.IpAddress; packet.Ttl = ttl; var data = new byte[bytes]; _random.NextBytes(data); var shor = new byte[2]; _random.NextBytes(shor); ushort id = BitConverter.ToUInt16(shor, 0); // Save ping if (CurrentPings.ContainsKey(id)) { CurrentPings[id] = new PingRequest(callback); } else { PingRequest req = new PingRequest(callback); req.Bytes = bytes; CurrentPings.Add(id, req); } PcapDotNet.Packets.Icmp.IcmpEchoLayer icmpLayer = new PcapDotNet.Packets.Icmp.IcmpEchoLayer { Checksum = null, Identifier = id, SequenceNumber = (ushort)(seqNum), }; PcapDotNet.Packets.PayloadLayer extra = new PcapDotNet.Packets.PayloadLayer() { Data = new PcapDotNet.Packets.Datagram(data) }; packet.NextLayers.Add(icmpLayer); packet.NextLayers.Add(extra); SendPacket(packet, () => { CurrentPings[id].TimeStamp = DateTime.Now; }); DateTime now = DateTime.Now; while ((DateTime.Now - now).TotalMilliseconds < timeout) { if (CurrentPings[id].ReplyReceived) { break; } System.Threading.Thread.Sleep(100); } if (!CurrentPings[id].ReplyReceived) { CurrentPings[id].Callback(new PingResult(PingResultType.RequestTimedOut)); } CurrentPings.Remove(id); }
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()); } }