Пример #1
0
        /// <summary>
        /// Initializes networking
        /// </summary>
        private static unsafe void initNetworking()
        {
            // Networking
            Network.Init();
            Route.Init();

            // Networking protocols
            IPV4.Init();
            ICMP.Init();

            // Transport protocols
            UDP.Init();
            TCP.Init();
            ARP.Init();
            DHCP.Init();

            // Network drivers
            E1000.Init();
            PCNet2.Init();
            RTL8139.Init();

            DHCP.Discover();


            //Thread packetHandler = new Thread();
            //packetHandler.Context.CreateNewContext(Util.MethodToPtr(HttpTest), 0, null, true);
            //Tasking.KernelTask.AddThread(packetHandler);
        }
Пример #2
0
            // original post: http://www.java2s.com/Code/CSharp/Network/SimplePing.htm
            // modified by jambel
            // TCP Ping
            // original post: http://stackoverflow.com/questions/26067342/how-to-implement-psping-tcp-ping-in-c-sharp
            static bool altPing(string endPoint)
            {
                try
                {
                    IPHostEntry hostEntry;
                    IPAddress hostAddress;
                    IPEndPoint iep;

                    if (resolveHostEntry(endPoint))
                    {
                        hostEntry = Dns.GetHostEntry(endPoint);
                        hostAddress = hostEntry.AddressList[0];
                        iep = new IPEndPoint(hostAddress, 0);
                    }
                    else
                        iep = new IPEndPoint(IPAddress.Parse(endPoint), 0);

                    var data = new byte[1024];
                    var host = new Socket(iep.AddressFamily, SocketType.Raw, ProtocolType.Icmp);
                    EndPoint ep = iep;
                    var packet = new ICMP();

                    packet.Type = 0x08;
                    packet.Code = 0x00;
                    packet.Checksum = 0;
                    Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 0, 2);
                    Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 2, 2);
                    data = Encoding.ASCII.GetBytes("test packet");
                    Buffer.BlockCopy(data, 0, packet.Message, 0, data.Length);
                    packet.MessageSize = data.Length + 4;
                    int packetsize = packet.MessageSize + 4;

                    UInt16 chcksum = packet.GetChecksum();
                    packet.Checksum = chcksum;

                    host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000);
                    host.SendTo(packet.GetBytes(), packetsize, SocketFlags.None, iep);

                    data = new byte[1024];
                    int recv = host.ReceiveFrom(data, ref ep);

                    /*ICMP response = new ICMP(data, recv);
                    Console.WriteLine("response from: {0}", ep.ToString());
                    Console.WriteLine("  Type {0}", response.Type);
                    Console.WriteLine("  Code: {0}", response.Code);
                    int Identifier = BitConverter.ToInt16(response.Message, 0);
                    int Sequence = BitConverter.ToInt16(response.Message, 2);
                    Console.WriteLine("  Identifier: {0}", Identifier);
                    Console.WriteLine("  Sequence: {0}", Sequence);
                    string stringData = Encoding.ASCII.GetString(response.Message, 0, response.MessageSize);
                    Console.WriteLine("  data: {0}", stringData);*/

                    host.Close();
                    return true;
                }
                catch (SocketException)
                {
                    return false;
                }
            }
Пример #3
0
        static void Tracert(String remoteHost)
        {
            //начальная инициализация
            Socket      host   = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp);
            IPHostEntry iphe   = Dns.GetHostEntry(remoteHost);
            IPEndPoint  iep    = new IPEndPoint(iphe.AddressList[0], 0);
            EndPoint    ep     = (EndPoint)iep;
            ICMP        packet = new ICMP
            {
                //формирование пакета
                Type       = 0x08,
                Code       = 0x00,
                Identifier = 1,
                SeqNumber  = 1,
                Message    = ToByteArr("Test")
            };

            packet.MessageSize = packet.Message.Length + MsgHeaderSize;
            int    packetsize = packet.MessageSize + HeaderSize;
            UInt16 chcksum    = packet.getChecksum();

            packet.Checksum = chcksum;

            host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000);

            for (int i = 1; i < 50; i++)
            {
                if (SendRecieve(i, host, packet, ep, iep, packetsize))
                {
                    break;
                }
            }
            host.Close();
        }
Пример #4
0
        public override bool send(IPPayload payload)
        {
            ICMP icmp = (ICMP)payload;

            switch (icmp.Type)
            {
            case 8:
                //Code == zero
                Console.Error.WriteLine("Send Ping");
                lock (sentry)
                {
                    open += 1;
                }
                PingData PD;
                PD.Data       = icmp.Data;
                PD.HeaderData = icmp.HeaderData;
                ping.SendAsync(new IPAddress(DestIP), PD);
                break;

            default:
                throw new NotImplementedException("Unsupported ICMP Type" + icmp.Type);
            }

            return(true);
        }
Пример #5
0
            // Original post: http://www.java2s.com/Code/CSharp/Network/SimplePing.htm
            // Modified by jambel
            // TCP Ping
            // Original post: http://stackoverflow.com/questions/26067342/how-to-implement-psping-tcp-ping-in-c-sharp
            static bool altPing(string endPoint)
            {
                try {
                    IPHostEntry hostEntry;
                    IPAddress   hostAddress;
                    IPEndPoint  iep;

                    if (resolveHostEntry(endPoint))
                    {
                        hostEntry   = Dns.GetHostEntry(endPoint);
                        hostAddress = hostEntry.AddressList[0];
                        iep         = new IPEndPoint(hostAddress, 0);
                    }
                    else
                    {
                        iep = new IPEndPoint(IPAddress.Parse(endPoint), 0);
                    }

                    var      data   = new byte[1024];
                    var      host   = new Socket(iep.AddressFamily, SocketType.Raw, ProtocolType.Icmp);
                    EndPoint ep     = iep;
                    var      packet = new ICMP();

                    packet.Type     = 0x08;
                    packet.Code     = 0x00;
                    packet.Checksum = 0;
                    Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 0, 2);
                    Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 2, 2);
                    data = Encoding.ASCII.GetBytes("test packet");
                    Buffer.BlockCopy(data, 0, packet.Message, 0, data.Length);
                    packet.MessageSize = data.Length + 4;
                    int packetsize = packet.MessageSize + 4;

                    UInt16 chcksum = packet.GetChecksum();
                    packet.Checksum = chcksum;

                    host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000);
                    host.SendTo(packet.GetBytes(), packetsize, SocketFlags.None, iep);

                    data = new byte[1024];
                    int recv = host.ReceiveFrom(data, ref ep);

                    /*ICMP response = new ICMP(data, recv);
                     * Console.WriteLine("response from: {0}", ep.ToString());
                     * Console.WriteLine("  Type {0}", response.Type);
                     * Console.WriteLine("  Code: {0}", response.Code);
                     * int Identifier = BitConverter.ToInt16(response.Message, 0);
                     * int Sequence = BitConverter.ToInt16(response.Message, 2);
                     * Console.WriteLine("  Identifier: {0}", Identifier);
                     * Console.WriteLine("  Sequence: {0}", Sequence);
                     * string stringData = Encoding.ASCII.GetString(response.Message, 0, response.MessageSize);
                     * Console.WriteLine("  data: {0}", stringData);*/

                    host.Close();
                    return(true);
                }
                catch (SocketException) {
                    return(false);
                }
            }
Пример #6
0
        public void PingCompleate(object sender, PingCompletedEventArgs e)
        {
            Log_Verb("Ping Complete");
            PingData  seq  = (PingData)e.UserState;
            PingReply rep  = e.Reply;
            Ping      ping = (Ping)sender;

            lock (sentry)
            {
                pings.Remove(ping);
                ping.Dispose();

                switch (rep.Status)
                {
                case IPStatus.Success:
                    ICMP retICMP = new ICMP(seq.Data);
                    retICMP.HeaderData = seq.HeaderData;
                    retICMP.Type       = 0; //echo reply
                    recvBuff.Add(retICMP);
                    break;

                default:
                    //ping failed
                    open -= 1;
                    if (open == 0)
                    {
                        RaiseEventConnectionClosed();
                    }
                    break;
                }
            }
        }
Пример #7
0
        static void Main(string[] args)
        {
            byte[] data = new byte[1024];
            int    recv;

            Socket     host = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp);
            IPEndPoint iep  = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 0);
            EndPoint   ep   = (EndPoint)iep;

            ICMP packet = new ICMP();

            packet.Type     = 0x08;
            packet.Code     = 0x00;
            packet.Checksum = 0;

            Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 0, 2);
            Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 2, 2);

            data = Encoding.ASCII.GetBytes("test packet");
            Buffer.BlockCopy(data, 0, packet.Message, 4, data.Length);
            packet.MessageSize = data.Length + 4;
            int    packetsize = packet.MessageSize + 4;
            UInt16 chcksum    = packet.getChecksum();

            packet.Checksum = chcksum;

            host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000);

            host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep);
            try
            {
                data = new byte[1024];
                recv = host.ReceiveFrom(data, ref ep);
                //Console.WriteLine(Encoding.ASCII.GetString(data));
            }
            catch (SocketException)
            {
                Console.WriteLine("No response from remote host");
                Console.ReadKey();
                return;
            }

            ICMP response = new ICMP(data, recv);

            Console.WriteLine("response from: {0}", ep.ToString());
            Console.WriteLine(" Type {0}", response.Type);
            Console.WriteLine(" Code: {0}", response.Code);
            int Identifier = BitConverter.ToInt16(response.Message, 0);
            int Sequence   = BitConverter.ToInt16(response.Message, 2);

            Console.WriteLine(" Identifier: {0}", Identifier);
            Console.WriteLine(" Sequence: {0}", Sequence);
            string stringData = Encoding.ASCII.GetString(response.Message, 4, response.MessageSize - 4);

            Console.WriteLine(" data: {0}", stringData);

            Console.ReadKey();
            host.Close();
        }
Пример #8
0
 public void Icmp_for_StartPing_onSuccess()
 {
     Assert.DoesNotThrow(() =>
     {
         var icmp = new ICMP(_configProtocol);
         icmp.StartAsyncPing();
     });
 }
Пример #9
0
    public bool TryConnect(string address)
    {
        byte[] data = new byte[1024];
        int    recv;
        Socket host = new Socket(AddressFamily.InterNetwork, SocketType.Raw,
                                 ProtocolType.Icmp);

        try
        {
            IPHostEntry e = Dns.GetHostEntry(address);
            if (e == null || e.AddressList.Length == 0 || e.AddressList[0].ToString() == null)
            {
                return(false);
            }
            else
            {
                address = e.AddressList[0].ToString();
                if (address == "::1")
                {
                    address = "127.0.0.1";
                }
            }
            IPEndPoint iep    = new IPEndPoint(IPAddress.Parse(address), 0);
            EndPoint   ep     = (EndPoint)iep;
            ICMP       packet = new ICMP();

            packet.Type     = 0x08;
            packet.Code     = 0x00;
            packet.Checksum = 0;
            Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 0, 2);
            Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 2, 2);
            data = Encoding.ASCII.GetBytes("test packet");
            Buffer.BlockCopy(data, 0, packet.Message, 4, data.Length);
            packet.MessageSize = data.Length + 4;
            int packetsize = packet.MessageSize + 4;

            UInt16 chcksum = packet.getChecksum();
            packet.Checksum = chcksum;

            host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000);
            host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep);
            try
            {
                data = new byte[1024];
                recv = host.ReceiveFrom(data, ref ep);
            }
            catch (SocketException)
            {
                return(false);
            }
        }
        finally
        {
            try { host.Close(); }
            catch { }
        }
        return(true);
    }
Пример #10
0
    public static void Main(string[] argv)
    {
        byte[]      data = new byte[1024];
        int         recv, timestart, timestop;
        Socket      host   = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp);
        IPHostEntry iphe   = Dns.Resolve("www.google.ru");
        IPEndPoint  iep    = new IPEndPoint(iphe.AddressList[0], 0);
        EndPoint    ep     = iep;
        ICMP        packet = new ICMP();
        // Убрано заполнение в ICMPclass

        int packetsize = packet.MessageSize + 4;

        //ushort chcksum = packet.getChecksum();
        //packet.Checksum = packet.getChecksum();
        //packet.getChecksum();

        host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000);

        int badcount = 0;

        for (int i = 1; i < 50; i++)
        {
            host.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.IpTimeToLive, i);
            timestart = Environment.TickCount;
            host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep);
            try
            {
                data     = new byte[1024];
                recv     = host.ReceiveFrom(data, ref ep);
                timestop = Environment.TickCount;
                ICMP response = new ICMP(data, recv);
                if (response.Type == 11)
                {
                    Console.WriteLine("{0}            {1}            {2}ms", i, ep.ToString(), timestop - timestart);
                }
                if (response.Type == 0)
                {
                    Console.WriteLine("{0}            {1}            {2}ms.", ep.ToString(), i, timestop - timestart);
                    break;
                }
                badcount = 0;
            }
            catch (SocketException)
            {
                Console.WriteLine("{0} No response from remote host", i);
                badcount++;
                if (badcount == 5)
                {
                    Console.WriteLine("Unable to contact remote host");
                    break;
                }
            }
        }

        host.Close();
        Console.ReadLine();
    }
Пример #11
0
 public void Icmp_for_StartPing_onEmptyConfigProtocol()
 {
     Assert.Throws <ArgumentException>(() =>
     {
         var configProtocol = new ConfigProtocol();
         configProtocol.AttributesProtocol = new Dictionary <string, string>();
         var icmp = new ICMP(configProtocol);
         icmp.StartAsyncPing();
     });
 }
Пример #12
0
    public Packet Reply(string IP)
    {
        GameObject pingPacket = Instantiate(packetprefab);
        Packet packet = pingPacket.GetComponent<Packet>();
        packet.CreatePacket("PING");
        packet.internet.setIP(IP, "dest");
        packet.internet.setIP(GetComponent<PC>().IP, "src");
        packet.gameObject.AddComponent<ICMP>();
        ICMP icmp = packet.GetComponent<ICMP>();
        icmp.CreateICMP("REPLY", IP);

        return packet;
    }
Пример #13
0
        private void Ping()
        {
            byte[]     data = new byte[1024];
            int        recv;
            Socket     host   = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp);
            IPEndPoint iep    = new IPEndPoint(IPAddress.Parse(roverIPAddress), 0); //ICMP doesn't use port numbers
            EndPoint   ep     = (EndPoint)iep;
            ICMP       packet = new ICMP();

            packet.Type     = 0x08;
            packet.Code     = 0x00;
            packet.Checksum = 0;
            Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 0, 2);
            Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 2, 2);
            data = Encoding.ASCII.GetBytes("ping");
            Buffer.BlockCopy(data, 0, packet.Message, 4, data.Length);
            packet.MessageSize = data.Length + 4;
            int    packetsize = packet.MessageSize + 4;
            UInt16 chcksum    = packet.getChecksum();

            packet.Checksum = chcksum;
            host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 1000);

            while (true)
            {
                DateTime sentAt  = DateTime.Now;
                DateTime recvdAt = sentAt;
                host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep);
                try
                {
                    data    = new byte[1024];
                    recv    = host.ReceiveFrom(data, ref ep);
                    recvdAt = DateTime.Now;
                    ICMP     response = new ICMP(data, recv);
                    DateTime recvd    = DateTime.Now;
                    ConnectedToRover = true;
                    PingRTT          = (long)(recvdAt - sentAt).TotalMilliseconds;
                }
                catch (SocketException)
                {
                    ConnectedToRover = false;
                    PingRTT          = 0;
                }

                Thread.Sleep(500);
            }
        }
Пример #14
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: private void sendICMPEchoResponse(pspsharp.network.protocols.NetPacket packet, pspsharp.network.protocols.EtherFrame frame, pspsharp.network.protocols.IPv4 ipv4, pspsharp.network.protocols.ICMP icmp) throws java.io.EOFException
        private void sendICMPEchoResponse(NetPacket packet, EtherFrame frame, IPv4 ipv4, ICMP icmp)
        {
            bool reachable = false;

            try
            {
                InetAddress inetAddress = InetAddress.getByAddress(ipv4.destinationIPAddress);
                // Timeout after 1 second
                reachable = inetAddress.isReachable(null, ipv4.timeToLive, 1000);
            }
            catch (UnknownHostException)
            {
            }
            catch (IOException)
            {
            }

            if (reachable)
            {
                // See https://en.wikipedia.org/wiki/Ping_(networking_utility)
                EtherFrame answerFrame = new EtherFrame(frame);
                answerFrame.swapSourceAndDestination();

                IPv4 answerIPv4 = new IPv4(ipv4);
                answerIPv4.swapSourceAndDestination();
                answerIPv4.timeToLive--;                 // When a packet arrives at a router, the router decreases the TTL FieldInfo.

                ICMP answerIcmp = new ICMP(icmp);
                answerIcmp.type = ICMP.ICMP_CONTROL_ECHO_REPLY;
                answerIcmp.computeChecksum();

                answerIPv4.totalLength = answerIPv4.sizeOf() + answerIcmp.sizeOf();
                answerIPv4.computeChecksum();

                // Write the different headers in sequence
                NetPacket answerPacket = new NetPacket(BUFFER_SIZE);
                answerFrame.write(answerPacket);
                answerIPv4.write(answerPacket);
                answerIcmp.write(answerPacket);

                sendPacket(answerPacket);
            }
        }
Пример #15
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: private void processMessageDatagramICMP(pspsharp.network.protocols.NetPacket packet, pspsharp.network.protocols.EtherFrame frame, pspsharp.network.protocols.IPv4 ipv4) throws java.io.EOFException
        private void processMessageDatagramICMP(NetPacket packet, EtherFrame frame, IPv4 ipv4)
        {
            ICMP icmp = new ICMP();

            icmp.read(packet);

            //if (log.DebugEnabled)
            {
                Console.WriteLine(string.Format("processMessageDatagramICMP {0}", icmp));
            }

            switch (icmp.type)
            {
            case ICMP_CONTROL_ECHO_REQUEST:
                sendICMPEchoResponse(packet, frame, ipv4, icmp);
                break;

            default:
                Console.WriteLine(string.Format("processMessageDatagramICMP unknown type=0x{0:X}, code=0x{1:X}", icmp.type, icmp.code));
                break;
            }
        }
Пример #16
0
        public void PingCompleate(object sender, System.Net.NetworkInformation.PingCompletedEventArgs e)
        {
            PingData  Seq = (PingData)e.UserState;
            PingReply rep = e.Reply;

            lock (sentry)
            {
                switch (rep.Status)
                {
                case IPStatus.Success:
                    ICMP retICMP = new ICMP(Seq.Data);
                    retICMP.HeaderData = Seq.HeaderData;
                    retICMP.Type       = 0; //echo reply
                    recvbuff.Add(retICMP);
                    break;

                default:
                    open -= 1;
                    break;
                }
            }
        }
Пример #17
0
        //Основная программа
        static void MyTracert(String remoteHost)
        {
            //начальная инициализация
            byte[]      data   = new byte[1024];
            Socket      host   = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp);
            IPHostEntry iphe   = Dns.Resolve(remoteHost);
            IPEndPoint  iep    = new IPEndPoint(iphe.AddressList[0], 0);
            EndPoint    ep     = (EndPoint)iep;
            ICMP        packet = new ICMP();

            //формирование пакета
            packet.Type        = 0x08;
            packet.Code        = 0x00;
            packet.Checksum    = 0;
            packet.Identifier  = 1;
            packet.SeqNumber   = 1;
            packet.Message     = ToByteArr("test");
            packet.MessageSize = packet.Message.Length + MsgHeaderSize;
            int packetsize = packet.MessageSize + HeaderSize;

            UInt16 chcksum = packet.getChecksum();

            packet.Checksum = chcksum;

            host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000);

            //цикл переборки ttl и обработки ответов
            for (int i = 1; i < 256; i++)
            {
                if (SendRecieve(i, host, packet, ep, iep, packetsize))
                {
                    break;
                }
            }
            host.Close();
        }
Пример #18
0
    public static void Main(string[] argv)
    {
        int trys = 3;

        Console.Write("tracert ");
        string address = Console.ReadLine();

        byte[] data = new byte[1024];
        int    recv, timestart, timestop;
        Socket host = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp);

        bool flagHostEntry = false;

        while (!flagHostEntry)
        {
            try
            {
                IPHostEntry temp = Dns.GetHostEntry(address);
                flagHostEntry = true;
            }
            catch (Exception)
            {
                Console.Write("\nВведен неверный адрес, попробуйте еще раз: ");
                address = Console.ReadLine();
            };
        }
        ;

        IPHostEntry iphe   = Dns.GetHostEntry(address);
        IPEndPoint  iep    = new IPEndPoint(iphe.AddressList[0], 0);
        EndPoint    ep     = (EndPoint)iep;
        ICMP        packet = new ICMP();

        packet.Type     = 0x08;
        packet.Code     = 0x00;
        packet.Checksum = 0;
        Buffer.BlockCopy(BitConverter.GetBytes(1), 0, packet.Message, 0, 2);
        Buffer.BlockCopy(BitConverter.GetBytes(1), 0, packet.Message, 2, 2);
        data = Encoding.ASCII.GetBytes("test packet");
        Buffer.BlockCopy(data, 0, packet.Message, 4, data.Length);
        packet.MessageSize = data.Length + 4;
        int packetsize = packet.MessageSize + 4;

        UInt16 chcksum = packet.getChecksum();

        packet.Checksum = chcksum;

        host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 1000);

        try
        {
            if (Dns.GetHostEntry(address).HostName == address)
            {
                Console.WriteLine("\nТрассировка маршрута к {0} [{1}]", address, Dns.GetHostEntry(address).AddressList[0].ToString());
            }
            else
            {
                Console.WriteLine("\nТрассировка маршрута к {0} [{1}]", Dns.GetHostEntry(address).HostName, address);
            }
        }
        catch (Exception)
        {
            Console.WriteLine("\nТрассировка маршрута к {0}", address);
        };
        Console.WriteLine("с максимальным числом прыжков 30:\n");

        int  falsecount = 0;
        bool flagExit   = true;

        for (int i = 1; i <= 30 && flagExit; i++)
        {
            Console.Write("{0,3} ", i);
            for (int j = 0; j < trys; j++)
            {
                host.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.IpTimeToLive, i);
                timestart = Environment.TickCount;
                host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep);
                try
                {
                    data     = new byte[1024];
                    recv     = host.ReceiveFrom(data, ref ep);
                    timestop = Environment.TickCount;

                    ICMP response = new ICMP(data, recv);
                    if (response.Type == 11)
                    {
                        if (timestop == timestart)
                        {
                            Console.Write("    1 мс");
                        }
                        else
                        {
                            Console.Write("{0,5} мс", timestop - timestart);
                        }
                    }
                    if (response.Type == 0)
                    {
                        if (timestop == timestart)
                        {
                            Console.Write("    1 мс");
                        }
                        else
                        {
                            Console.Write("{0,5} мс", timestop - timestart);
                        }
                        flagExit = false;
                    }
                    falsecount = 0;
                }
                catch (SocketException)
                {
                    Console.Write("    *   ");
                    falsecount++;
                }
            }
            if (falsecount >= trys)
            {
                Console.WriteLine("   Превышен интервал ожидания для запроса.");
                if (falsecount == trys * 3)
                {
                    Console.WriteLine("\nНевозможно связаться с удаленным хостом.");
                    flagExit = false;
                }
            }
            else
            {
                try
                {
                    string strEndPoint = Regex.Replace(ep.ToString(), ":.*", "");
                    Console.Write("   {0} [{1}]", Dns.GetHostEntry(strEndPoint).HostName, strEndPoint);
                }
                catch (Exception)
                {
                    Console.Write("   {0}", Regex.Replace(ep.ToString(), ":.*", ""));
                };
                Console.WriteLine();
            }
        }

        host.Close();
        Console.WriteLine("\nТрассировка завершина.\n");
        Console.Read();
    }
Пример #19
0
        static Boolean SendRecieve(int i, Socket host, ICMP packet, EndPoint ep, IPEndPoint iep, int packetsize)
        {
            int badcount = 0;

            byte[] data;
            int    pcklength;

            host.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.IpTimeToLive, i);

            try
            {
                DateTime timestart = DateTime.Now;
                host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep);
                data      = new byte[1024];
                pcklength = host.ReceiveFrom(data, ref ep);
                TimeSpan timestop1 = DateTime.Now - timestart;
                ICMP     response1 = new ICMP(data, pcklength);

                timestart = DateTime.Now;
                host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep);
                data      = new byte[1024];
                pcklength = host.ReceiveFrom(data, ref ep);
                TimeSpan timestop2 = DateTime.Now - timestart;
                ICMP     response2 = new ICMP(data, pcklength);

                timestart = DateTime.Now;
                host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep);
                data      = new byte[1024];
                pcklength = host.ReceiveFrom(data, ref ep);
                TimeSpan timestop3 = DateTime.Now - timestart;
                ICMP     response3 = new ICMP(data, pcklength);

                if (response1.Type == 11 || response2.Type == 11 || response3.Type == 11)
                {
                    Console.WriteLine(i + ": " + ep.ToString() + "     " + (timestop1.Milliseconds.ToString()) + " " + (timestop2.Milliseconds.ToString()) + " " + (timestop3.Milliseconds.ToString()) + " мс");
                    return(false);
                }

                if (response1.Type == 0 || response2.Type == 0 || response3.Type == 0)
                {
                    Console.WriteLine(i + ": " + ep.ToString() + "     достигнут за " + i + " прыжков, " + (timestop1.Milliseconds.ToString()) + " " + (timestop2.Milliseconds.ToString()) + " " + (timestop3.Milliseconds.ToString()) + " мс");
                    return(true);
                }

                return(true);
            }
            catch (SocketException)
            {
                Console.WriteLine(i + ": нет ответа от " + ep + " ( dest: " + iep + ")");
                badcount++;

                if (badcount == 4)
                {
                    Console.WriteLine("Не удалось установить соединение\n");
                    return(true);
                }
                return(false);
            }
            finally
            {
                try
                {
                    string ip = ep.ToString();
                    ip = ip.Remove(ip.Length - 2, 2);
                    if (!ip.StartsWith("192.168"))
                    {
                        IPAddress   addr  = IPAddress.Parse(ip);
                        IPHostEntry entry = Dns.GetHostEntry(addr);
                        Console.WriteLine(entry.HostName);
                    }
                    Console.WriteLine();
                }
                catch (SocketException)
                {
                    Console.WriteLine("Нет DNS ответа.\n");
                }
            }
        }
Пример #20
0
        public override bool Send(IPPayload payload)
        {
            ICMP icmp = (ICMP)payload;

            switch (icmp.Type)
            {
            case 8:     //Echo
                //Code == zero
                Log_Verb("Send Ping");
                lock (sentry)
                {
                    open += 1;
                }
                PingData pd;
                pd.Data       = icmp.Data;
                pd.HeaderData = icmp.HeaderData;
                Ping nPing = new Ping();
                nPing.PingCompleted += PingCompleate;
                lock (sentry)
                {
                    pings.Add(nPing);
                }
                nPing.SendAsync(new IPAddress(DestIP), pd);
                System.Threading.Thread.Sleep(1);     //Hack Fix
                break;

            case 3:     //
                switch (icmp.Code)
                {
                case 3:
                    Log_Error("Recived Packet Rejected, Port Closed");
                    IPPacket retPkt  = new IPPacket(icmp);
                    byte[]   srvIP   = retPkt.SourceIP;
                    byte     prot    = retPkt.Protocol;
                    UInt16   srvPort = 0;
                    UInt16   ps2Port = 0;
                    switch (prot)
                    {
                    case (byte)IPType.TCP:
                        TCP tcp = (TCP)retPkt.Payload;
                        srvPort = tcp.SourcePort;
                        ps2Port = tcp.DestinationPort;
                        break;

                    case (byte)IPType.UDP:
                        UDP udp = (UDP)retPkt.Payload;
                        srvPort = udp.SourcePort;
                        ps2Port = udp.DestinationPort;
                        break;
                    }
                    ConnectionKey Key = new ConnectionKey();
                    Key.IP0      = srvIP[0]; Key.IP1 = srvIP[1]; Key.IP2 = srvIP[2]; Key.IP3 = srvIP[3];
                    Key.Protocol = prot;
                    Key.PS2Port  = ps2Port;
                    Key.SRVPort  = srvPort;

                    //is from NormalPort
                    Session s;
                    connections.TryGetValue(Key, out s);

                    if (s != null)
                    {
                        s.Reset();
                        Log_Info("Reset Rejected Connection");
                        break;
                    }

                    //Is from FixedPort
                    Key.IP0     = 0; Key.IP1 = 0; Key.IP2 = 0; Key.IP3 = 0;
                    Key.SRVPort = 0;
                    connections.TryGetValue(Key, out s);
                    if (s != null)
                    {
                        s.Reset();
                        Log_Info("Reset Rejected Connection");
                        break;
                    }

                    Log_Error("Failed To Reset Rejected Connection");
                    break;

                default:
                    throw new NotImplementedException("Unsupported ICMP Code For Destination Unreachable" + icmp.Code);
                }
                break;

            default:
                throw new NotImplementedException("Unsupported ICMP Type" + icmp.Type);
            }

            return(true);
        }
Пример #21
0
        private void Ping()
        {
            byte[] data = new byte[1024];
            int recv;
            Socket host = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp);
            IPEndPoint iep = new IPEndPoint(IPAddress.Parse(roverIPAddress), 0); //ICMP doesn't use port numbers
            EndPoint ep = (EndPoint)iep;
            ICMP packet = new ICMP();
            packet.Type = 0x08;
            packet.Code = 0x00;
            packet.Checksum = 0;
            Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 0, 2);
            Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 2, 2);
            data = Encoding.ASCII.GetBytes("ping");
            Buffer.BlockCopy(data, 0, packet.Message, 4, data.Length);
            packet.MessageSize = data.Length + 4;
            int packetsize = packet.MessageSize + 4;
            UInt16 chcksum = packet.getChecksum();
            packet.Checksum = chcksum;
            host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 1000);

            while (true)
            {
                DateTime sentAt = DateTime.Now;
                DateTime recvdAt = sentAt;
                host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep);
                try
                {
                    data = new byte[1024];
                    recv = host.ReceiveFrom(data, ref ep);
                    recvdAt = DateTime.Now;
                    ICMP response = new ICMP(data, recv);
                    DateTime recvd = DateTime.Now;
                    ConnectedToRover = true;
                    PingRTT = (long)(recvdAt - sentAt).TotalMilliseconds;
                }
                catch (SocketException)
                {
                    ConnectedToRover = false;
                    PingRTT = 0;
                }

                Thread.Sleep(500);
            }
        }
Пример #22
0
    public static void Main(string[] argv)
    {
        byte[]     data = new byte[1024];
        int        recv, timestart, timestop;
        Socket     host   = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp);
        IPEndPoint iep    = new IPEndPoint(IPAddress.Parse("8.8.8.8"), 0);
        EndPoint   ep     = iep;
        ICMP       packet = new ICMP();

        packet.Type     = 0x08;
        packet.Code     = 0x00;
        packet.Checksum = 0;
        Buffer.BlockCopy(BitConverter.GetBytes(1), 0, packet.Message, 0, 2);
        Buffer.BlockCopy(BitConverter.GetBytes(1), 0, packet.Message, 2, 2);
        data = Encoding.ASCII.GetBytes("test packet");
        Buffer.BlockCopy(data, 0, packet.Message, 4, data.Length);
        packet.MessageSize = data.Length + 4;
        int packetsize = packet.MessageSize + 4;

        UInt16 chcksum = packet.getChecksum();

        packet.Checksum = chcksum;

        host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000);

        int badcount = 0;

        for (int i = 1; i < 50; i++)
        {
            host.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.IpTimeToLive, i);
            timestart = Environment.TickCount;
            host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep);
            try
            {
                data     = new byte[1024];
                recv     = host.ReceiveFrom(data, ref ep);
                timestop = Environment.TickCount;
                ICMP response = new ICMP(data, recv);
                if (response.Type == 11)
                {
                    Console.WriteLine("hop {0}: response from {1}, {2}ms", i, ep.ToString(), timestop - timestart);
                }
                if (response.Type == 0)
                {
                    Console.WriteLine("{0} reached in {1} hops, {2}ms.", ep.ToString(), i, timestop - timestart);
                    break;
                }
                badcount = 0;
            }
            catch (SocketException)
            {
                Console.WriteLine("hop {0}: No response from remote host", i);
                badcount++;
                if (badcount == 5)
                {
                    Console.WriteLine("Unable to contact remote host");
                    break;
                }
            }
        }

        host.Close();
        Console.ReadKey();
    }
Пример #23
0
        // this is the network monitoring script
        public void Run()
        {
            ConsoleOutputLogger.WriteLine("Starting up the Network Monitoring...");
            ICMP pinger = new ICMP();

            while (running)
            {
                foreach (NetworkMonitoringHost Host in NetworkMonitorConfiguration.NetworkHosts)
                {
                    // start pinging around
                    ICMP_PingResult result = null;
                    try
                    {
                        result = pinger.Ping(Host.IPAdressOrHostname, 1, 500);
                    }
                    catch (Exception)
                    {
                        //ConsoleOutputLogger.WriteLine("NetworkMonitor Exception: "+e.Message);
                        result        = new ICMP_PingResult();
                        result.Status = ICMP_Status.TimeOut;
                        result.hostIP = null;
                    }

                    // we got a result...
                    if (result != null)
                    {
                        // it's already in the list
                        if (OnOfflineList.ContainsKey(Host.IPAdressOrHostname))
                        {
                            if (OnOfflineList[Host.IPAdressOrHostname] == true)                             // this one was online before...
                            {
                                if (result.Status == ICMP_Status.TimeOut)
                                {
                                    // it's now offline...
                                    OnOfflineList[Host.IPAdressOrHostname] = false;

                                    NetworkMonitoringDataSet ds_result = new NetworkMonitoringDataSet();

                                    ds_result.AverageRoundtripMS = result.AverageRoundtripMS;
                                    ds_result.Descriptor         = Host.Descriptor;
                                    ds_result.HostnameIP         = Host.IPAdressOrHostname;
                                    ds_result.Status             = result.Status;
                                    ds_result.TimeOfMeasurement  = result.TimeOfMeasurement;

                                    iQueue.Enqueue(ds_result);
                                }
                            }
                            else
                            {
                                if (result.Status == ICMP_Status.Success)
                                {
                                    // it's now online...
                                    OnOfflineList[Host.IPAdressOrHostname] = true;

                                    NetworkMonitoringDataSet ds_result = new NetworkMonitoringDataSet();

                                    ds_result.AverageRoundtripMS = result.AverageRoundtripMS;
                                    ds_result.Descriptor         = Host.Descriptor;
                                    ds_result.HostnameIP         = Host.IPAdressOrHostname;
                                    ds_result.Status             = result.Status;
                                    ds_result.TimeOfMeasurement  = result.TimeOfMeasurement;

                                    iQueue.Enqueue(ds_result);
                                }
                            }
                        }
                        else
                        {
                            if (result.Status == ICMP_Status.Success)
                            {
                                OnOfflineList.Add(Host.IPAdressOrHostname, true);
                            }
                            else
                            {
                                OnOfflineList.Add(Host.IPAdressOrHostname, false);
                            }

                            // enqueue
                            NetworkMonitoringDataSet ds_result = new NetworkMonitoringDataSet();

                            ds_result.AverageRoundtripMS = result.AverageRoundtripMS;
                            ds_result.Descriptor         = Host.Descriptor;
                            ds_result.HostnameIP         = Host.IPAdressOrHostname;
                            ds_result.Status             = result.Status;
                            ds_result.TimeOfMeasurement  = result.TimeOfMeasurement;

                            iQueue.Enqueue(ds_result);
                        }
                    }
                }

                Thread.Sleep(NetworkMonitorUpdateTime);
            }
        }
Пример #24
0
        static void Main(string[] args)
        {
            string ip;

            Console.Write("tracert ");;
            ip = Console.ReadLine();
            IPAddress adress;

            if (IPAddress.TryParse(ip, out adress))
            {
                try
                {
                    string domen = System.Net.Dns.GetHostEntry(ip).HostName;
                    Console.WriteLine($"\n Трассировка маршрута к {domen}  [{ip}] \n максимальное число прыжков 30:");
                }
                catch
                {
                    Console.WriteLine($"\n Трассировка маршрута к [{ip}] \n максимальное число прыжков 30:");
                }
            }

            else
            {
                try
                {
                    string domen = System.Net.Dns.GetHostEntry(ip).HostName;
                    if (domen == ip)
                    {
                        ip = System.Net.Dns.GetHostEntry(ip).AddressList[0].ToString();
                    }
                    Console.WriteLine($"\n Трассировка маршрута к {domen}  [{ip}] \n максимальное число прыжков 30:\n");
                }
                catch
                {
                    Console.WriteLine("Не удается разрешить системное имя узла");
                    Console.ReadKey();
                    Environment.Exit(0);
                }
            }


            byte[] data = new byte[1024];

            IPAddress adr = IPAddress.Parse(ip);

            Socket      host = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp); //1. все адреса, используемые сокетом(протокол IPv4) 2. для передачи icmp пакетов 3. протокол icmp
            IPHostEntry iphe = System.Net.Dns.GetHostEntry(adr);                                          // контейнер для сведений об адресе веб-узлa
            IPEndPoint  iep  = new IPEndPoint(adr, 0);                                                    // конечная точка ip-адрес и номер порта
            EndPoint    ep   = (EndPoint)iep;                                                             //определяет сетевой адрес

            ICMP packet = new ICMP();                                                                     //формируем ICMP пакет

            packet.Type     = 0x08;                                                                       //тип для эхо-запроса?
            packet.Code     = 0x00;
            packet.Checksum = 0;


            int packetsize = packet.MessageSize + 8;//У кати +8 заголовка

            UInt16 chcksum = packet.getChecksum();

            packet.Checksum = chcksum;

            host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout /*промежуток времени, после которого истечет время тайм-аута*/, 3000);

            int  badcount = 0;
            bool stop     = false;


            for (int i = 1; i < 30; i++)
            {
                Console.Write(i);
                host.SetSocketOption(SocketOptionLevel.IP /*ip сокеты*/, SocketOptionName.IpTimeToLive /*поле срока жизни заголовка*/, i);

                for (int j = 1; j < 4; j++)
                {
                    DateTime timestart = DateTime.Now;

                    try
                    {
                        host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep);
                        data = new byte[1024];
                        int      recv     = host.ReceiveFrom(data, ref ep);// получает дейтаграмму и конечную точку источника
                        TimeSpan timestop = DateTime.Now - timestart;
                        ICMP     response = new ICMP(data, recv);

                        if (response.Type == 11)
                        {
                            Console.Write("{0,10}", (timestop.Milliseconds.ToString()) + "мс");
                        }

                        if (response.Type == 0)
                        {
                            Console.Write("{0,10}", (timestop.Milliseconds.ToString()) + "мс");
                            stop = true;
                        }

                        badcount = 0;
                    }
                    catch (SocketException)
                    {
                        Console.Write("{0,10}", "*");
                        badcount++;
                    }
                }
                if (badcount == 3 && !stop)
                {
                    Console.WriteLine("    Превышен интервал ожидания запроса");
                    badcount = 0;
                }
                else
                {
                    try
                    {
                        string domen = System.Net.Dns.GetHostEntry(IPAddress.Parse(ep.ToString().Split(':')[0])).HostName;
                        Console.WriteLine("    " + domen + "  [" + ep.ToString().Split(':')[0] + "]");
                    }
                    catch
                    {
                        Console.WriteLine("    " + ep.ToString().Split(':')[0]);
                    }
                }

                if (stop)
                {
                    Console.WriteLine("\nТрассировка завершена");
                    Console.ReadKey();
                    Environment.Exit(0);
                }
            }
            host.Close();
            Console.ReadKey();
        }