Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        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;
                }
            }
        }