微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 C# 实现跟踪路由获取无效 IP

如何解决使用 C# 实现跟踪路由获取无效 IP

我正在尝试实现一个 TracerouteGUI,在获得 IP 后,我会显示流量经过的地图。

我的问题是我不断收到错误的 IP 地址,但节点数量正确,如下所示:

enter image description here

我尝试了许多不同的实现,但都没有运气

我的源代码位于 github

如果您对为什么会这样有任何想法,请告诉我。 附注

  • 我在 Ubuntu 20.04 上运行
  • 应用程序似乎不尊重我设置的超时,直到我使用 sudo 运行它但仍然是相同的输出

这是代码的快照:

using System;
using System.Collections.Generic;
using System.Net;
using System.Net.networkinformation;
using System.Linq;
using static System.Console;

namespace TracerouteGUI
{
    class Program
    {
        static void Main(string[] args)
        {
            string target = args[0];
            const int BUFFER_SIZE = 32;
            const int MAX_TTL = 30;
            const int TIMEOUT = 5_000;

            var validNodeStats = new IPStatus[] { IPStatus.Success,IPStatus.TtlExpired,IPStatus.TimeExceeded };
            List<IPAddress> iPAddresses = new List<IPAddress>();
            IPAddress targetIP = Dns.GetHostAddresses(target)[0];
            PingOptions pingOptions = new PingOptions(1,false);

            WriteLine($"Tracing route for {target} with adresses: {targetIP} ...");

            while (pingOptions.Ttl <= MAX_TTL)
            {
                byte[] buffer = new byte[BUFFER_SIZE];
                new Random().NextBytes(buffer);
                using (Ping ping = new Ping())
                {
                    PingReply reply = ping.Send(targetIP,TIMEOUT,buffer,pingOptions);
                    Out.WriteLine($"IP: {reply.Address}\tTime: {reply.roundtripTime}ms\tStatus: {reply.Status}");

                    if (validNodeStats.Contains(reply.Status))
                    {
                        iPAddresses.Add(reply.Address);
                    }

                    if (reply.Status == IPStatus.Success) break;
                }

                pingOptions.TtL++;
            }

            string IPs = string.Join('\n',iPAddresses);
            WriteLine("Done...");
            WriteLine(IPs);
        }
    }
}

编辑:结果证明它在 Windows 上运行良好

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。