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)); }
public void SendIcmpEchoReply(IpV4Address TargetIP, MacAddress TargetMac, IcmpDatagram icmpRequest) { 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 = 123, Options = IpV4Options.None, Protocol = null, // Will be filled automatically. Ttl = 100, TypeOfService = 0, }; IcmpEchoReplyLayer icmpReplyLayer = new IcmpEchoReplyLayer { Identifier = (ushort)((icmpRequest.Variable >> 16) & 0xFFFF), SequenceNumber = (ushort)(icmpRequest.Variable & 0xFFFF), }; PayloadLayer payloadLayer = new PayloadLayer() { Data = icmpRequest.Payload }; if (_adapter.VLAN > 1) { VirtualNetwork.Instance.SendPacket(PacketBuilder.Build(DateTime.Now, ethernetLayer, vlanLayer, ipV4Layer, icmpReplyLayer, payloadLayer)); } else { VirtualNetwork.Instance.SendPacket(PacketBuilder.Build(DateTime.Now, ethernetLayer, ipV4Layer, icmpReplyLayer, payloadLayer)); } VirtualNetwork.Instance.PostTraceMessage("ICMP Reply: " + TargetIP.ToString()); }
public void handler(Packet packet, PacketCommunicator device) { //received ping request if (packet.Ethernet.IpV4.Icmp.MessageTypeAndCode.ToString().Equals("Echo")) { PacketCommunicator dev = device; String srcMAC = packet.Ethernet.Destination.ToString(); String dstMAC = packet.Ethernet.Source.ToString(); String srcIP = packet.Ethernet.IpV4.Destination.ToString(); String dstIP = packet.Ethernet.IpV4.Source.ToString(); 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, }; IcmpIdentifiedDatagram icmp = (IcmpIdentifiedDatagram)packet.Ethernet.IpV4.Icmp; IcmpEchoReplyLayer icmpLayer = new IcmpEchoReplyLayer { Checksum = null, // Will be filled automatically. SequenceNumber = icmp.SequenceNumber, Identifier = icmp.Identifier, //switchID }; PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, icmpLayer); //Packet EchoReplyPacket = builder.Build(DateTime.Now); dev.SendPacket(builder.Build(DateTime.Now)); } //received ping response else if (packet.Ethernet.IpV4.Icmp.MessageTypeAndCode.ToString().Equals("EchoReply")) { MessageBox.Show("Ping Reply!"); } }