protected virtual void handleICMPPacket(IPv4Header datagram, NetworkInterface a) { switch (datagram.Datagram[0]) { case 0: // Echo Replys { ICMPEchoRequestReply header = new ICMPEchoRequestReply(datagram.Datagram); OnICMPPacket?.Invoke(datagram, header, header.Code, a); } break; case 8: // Echo Request if (respondToEcho) { ICMPEchoRequestReply header = new ICMPEchoRequestReply(datagram.Datagram); ICMPEchoRequestReply icmp = new ICMPEchoRequestReply(0, header.Identifier, (UInt16)(header.SequenceNumber + 1)); IPv4Header ipv4 = new IPv4Header(datagram.Identification, false, false, 255, IPv4Header.ProtocolType.ICMP, a.LocalIP, datagram.SourceAddress, null, icmp.ToBytes()); a.SendPacket(ipv4.ToBytes()); } break; } }
public void onPacket(byte[] datagram) { if (on) { IPv4Header iP = new IPv4Header(datagram); if (ip) { Log("----------------IP----------------"); Log("Version: " + iP.Version); Log("HeaderLength: " + iP.IHL); Log("Type Of Service " + iP.TOS); Log("Total Length " + iP.Length); Log("Identification " + iP.Identification); Log("Reserved " + iP.RES); Log("Don't Fragment " + iP.DF); Log("More Fragments " + iP.MF); Log("Fragment Offset " + iP.FragmentOffset); Log("Time To Live " + iP.TTL); Log("Protocol " + iP.Protocol); Log("Checksum " + iP.HeaderChecksum); Log("Source Address " + iP.SourceAddress); Log("Destination Address " + iP.DestinationAddress); Log("----------------------------------------"); } switch (iP.Protocol) { case IPv4Header.ProtocolType.ICMP: ICMPEchoRequestReply icmp = new ICMPEchoRequestReply(iP.Datagram); break; case IPv4Header.ProtocolType.UDP: UDPHeader uDP = new UDPHeader(iP.Datagram); if (udp) { Log("----------------UDP----------------"); Log("Source Port " + uDP.SourcePort); Log("Destination Port " + uDP.DestinationPort); Log("Length " + uDP.Length); Log("Checksum " + uDP.Checksum); Log("----------------------------------------"); } DHCPDatagram dHCP = new DHCPDatagram(uDP.Datagram); if (dhcp) { Log("----------------DHCP----------------"); Log("Op "); Log("htype "); Log("hlen "); Log("hops "); Log("transaction ID "); Log("Secconds Elapsed "); Log("Flags"); Log(" Boradcast "); Log("Client IP "); Log("Your IP "); Log("Server IP "); Log("Router IP "); Log("Client MAC "); Log("Server Host Name "); Log("Boot File Name "); Log("Options"); foreach (DHCPOption option in dHCP.options) { switch (option.tag) { case Tag.subnetmask: Log(" SubnetMask " + new IP(option.data).ToString()); break; case Tag.defaultIPTTL: Log(" Default TTL " + option.data[0]); break; case Tag.addressRequest: Log(" Requested IP " + new IP(option.data).ToString()); break; case Tag.addressTime: Log(" Lease Time " + BitConverter.ToUInt16(option.data, 0)); break; case Tag.router: Log(" DHCP Message Type " + option.data[0]); break; case Tag.paramaterList: Log(" Paramater List "); foreach (byte b in option.data) { Log(" " + b); } break; } } Log("----------------------------------------"); } break; } } }