예제 #1
0
        public void ToIPEndPointTest()
        {
            var s1 = @"[2607:f8b0:4007:801::2004]:4154";
            var s2 = @"172.217.14.68:1513";
            var s3 = @"www.google.com:12313";
            var s4 = @"[2607:f8b0:4007:80e::200e]";
            var s5 = @"172.217.14.78";
            var s6 = @"www.youtube.com";

            var r1 = IPFormatter.ToIPEndPoint(s1);
            var r2 = IPFormatter.ToIPEndPoint(s2);
            var r3 = IPFormatter.ToIPEndPoint(s3);
            var r4 = IPFormatter.ToIPEndPoint(s4);
            var r5 = IPFormatter.ToIPEndPoint(s5);
            var r6 = IPFormatter.ToIPEndPoint(s6);

            Assert.AreEqual(r1.Address, IPAddress.Parse(@"2607:f8b0:4007:801::2004"));
            Assert.AreEqual(r1.Port, 4154);

            Assert.AreEqual(r2.Address, IPAddress.Parse(@"172.217.14.68"));
            Assert.AreEqual(r2.Port, 1513);

            Assert.IsNull(r3);

            Assert.AreEqual(r4.Address, IPAddress.Parse(@"2607:f8b0:4007:80e::200e"));
            Assert.AreEqual(r4.Port, 443);

            Assert.AreEqual(r5.Address, IPAddress.Parse(@"172.217.14.78"));
            Assert.AreEqual(r5.Port, 443);

            Assert.IsNull(r6);
        }
예제 #2
0
        public static Data StringLine2Data(string line)
        {
            var s = line.Split(new[] { ' ' }, 2, StringSplitOptions.RemoveEmptyEntries);

            if (s.Length < 1)
            {
                return(null);
            }

            string    hostname;
            IPAddress ip   = null;
            var       port = 443;

            var sp = s[0].Split(':');

            if (sp.Length == 1 || sp.Length == 2)
            {
                hostname = sp[0];
                if (IPFormatter.IsIPv4Address(hostname))
                {
                    ip = IPAddress.Parse(hostname);
                }
            }
            else
            {
                return(null);
            }
            if (sp.Length == 2)
            {
                try
                {
                    port = Convert.ToInt32(sp[1]);
                }
                catch
                {
                    return(null);
                }

                if (!IPFormatter.IsPort(port))
                {
                    return(null);
                }
            }


            var res = new Data
            {
                HostsName   = hostname,
                Ip          = ip,
                Port        = port,
                Description = string.Empty
            };

            if (s.Length == 2)
            {
                res.Description = s[1];
            }

            return(res);
        }
예제 #3
0
        private void PingOne(int index)
        {
            if (mainTable[index].Endpoint == string.Empty)
            {
                var ip = NetTest.GetIP(mainTable[index].HostsName);

                if (ip != null)
                {
                    mainTable[index].Endpoint = ip.AddressFamily == AddressFamily.InterNetwork ? $@"{ip}:{rawTable[index].Port}" : $@"[{ip}]:{rawTable[index].Port}";
                }
                else
                {
                    return;
                }
            }

            var    ipe     = IPFormatter.ToIPEndPoint(mainTable[index].Endpoint);
            double?latency = null;
            var    res     = Timeout;
            var    time    = DateTime.Now;

            try
            {
                latency = NetTest.TCPing(ipe.Address, ipe.Port, Timeout);
            }
            catch
            {
                // ignored
            }

            if (latency != null)
            {
                res = Convert.ToInt32(Math.Round(latency.Value));
            }
            else
            {
                //notifyIcon1.ShowBalloonTip(1000, time.ToString(CultureInfo.CurrentCulture), $"{mainTable[index].HostsName}\n{ipe}", ToolTipIcon.Error);
            }

            var log = new DateTable
            {
                Date    = time,
                Latency = res
            };

            mainTable[index].AddNewLog(log);

            if (MainList.SelectedRows.Count == 1)
            {
                var i = MainList.SelectedRows[0].Cells[0].Value as int?;
                if (i == index && DateList.Visible)
                {
                    DateList.Invoke(() => { LoadLogs(log); });
                }
            }
        }
예제 #4
0
        private void FirstPing()
        {
            var t = new Task(() =>
            {
                Parallel.For(0, mainTable.Count, (i, state) =>
                {
                    if (cts_PingTask.IsCancellationRequested)
                    {
                        state.Stop();
                        return;
                    }

                    if (IPFormatter.IsIPAddress(mainTable[i].HostsName))                     //反查DNS
                    {
                        PingOne(i);

                        if (cts_PingTask.IsCancellationRequested)
                        {
                            state.Stop();
                            return;
                        }

                        mainTable[i].HostsName = NetTest.GetHostName(IPAddress.Parse(mainTable[i].HostsName), ReverseDNSTimeout);
                    }
                    else
                    {
                        var ip = NetTest.GetIP(mainTable[i].HostsName);

                        if (cts_PingTask.IsCancellationRequested)
                        {
                            state.Stop();
                            return;
                        }

                        if (ip != null)
                        {
                            mainTable[i].Endpoint = ip.AddressFamily == AddressFamily.InterNetwork ? $@"{ip}:{rawTable[i].Port}" : $@"[{ip}]:{rawTable[i].Port}";
                        }
                        PingOne(i);
                    }

                    if (cts_PingTask.IsCancellationRequested)
                    {
                        state.Stop();
                    }
                });
                //notifyIcon1.ShowBalloonTip(1000, ExeName, @"载入完毕", ToolTipIcon.Info);
            });

            PingTasks.Add(t);
            t.Start();
        }
예제 #5
0
        public static Data StringLine2Data(string line)
        {
            var s = line.Split(new[] { ' ' }, 2, StringSplitOptions.RemoveEmptyEntries);

            if (s.Length < 1)
            {
                return(null);
            }

            string    hostname;
            IPAddress ip;
            var       port = 443;

            var sp = IPFormatter.EndPointRegexStr.Match(s[0]).Groups;

            if (sp.Count == 5)
            {
                hostname = string.IsNullOrWhiteSpace(sp[1].Value) ? sp[3].Value : sp[1].Value;
                IPAddress.TryParse(hostname, out ip);

                if (!int.TryParse(string.IsNullOrWhiteSpace(sp[2].Value) ? sp[4].Value : sp[2].Value, out port))
                {
                    return(null);
                }

                if (!IPFormatter.IsPort(port))
                {
                    return(null);
                }
            }
            else if (sp.Count == 1)
            {
                var groups = Regex.Match(s[0], @"^\[(.*)\]$").Groups;
                if (groups.Count == 2)
                {
                    hostname = groups[1].Value;
                    IPAddress.TryParse(hostname, out ip);
                }
                else
                {
                    hostname = s[0];
                    IPAddress.TryParse(hostname, out ip);
                }
            }
            else
            {
                return(null);
            }

            var res = new Data
            {
                HostsName   = hostname,
                Ip          = ip,
                Port        = port,
                Description = string.Empty
            };

            if (s.Length == 2)
            {
                res.Description = s[1];
            }

            return(res);
        }
예제 #6
0
        private void FirstPing()
        {
            var t = new Task(() =>
            {
                Parallel.For(0, mainTable.Count, (i, state) =>
                {
                    try
                    {
                        cts_PingTask.Token.ThrowIfCancellationRequested();
                    }
                    catch (OperationCanceledException)
                    {
                        state.Stop();
                        return;
                    }

                    if (IPFormatter.IsIPv4Address(mainTable[i].HostsName))                     //反查DNS
                    {
                        PingOne(i);

                        try
                        {
                            cts_PingTask.Token.ThrowIfCancellationRequested();
                        }
                        catch (OperationCanceledException)
                        {
                            state.Stop();
                            return;
                        }

                        mainTable[i].HostsName = NetTest.GetHostName(IPAddress.Parse(mainTable[i].HostsName), ReverseDNSTimeout);
                    }
                    else
                    {
                        var ip = NetTest.GetIP(mainTable[i].HostsName);

                        try
                        {
                            cts_PingTask.Token.ThrowIfCancellationRequested();
                        }
                        catch (OperationCanceledException)
                        {
                            state.Stop();
                            return;
                        }

                        if (ip != null)
                        {
                            mainTable[i].Endpoint = $@"{ip}:{rawTable[i].Port}";
                        }
                        PingOne(i);
                    }

                    try
                    {
                        cts_PingTask.Token.ThrowIfCancellationRequested();
                    }
                    catch (OperationCanceledException)
                    {
                        state.Stop();
                    }
                });
                //notifyIcon1.ShowBalloonTip(1000, ExeName, @"载入完毕", ToolTipIcon.Info);
            });

            PingTasks.Add(t);
            t.Start();
        }