如何解决使用 C# 实现跟踪路由获取无效 IP
我正在尝试实现一个 TracerouteGUI,在获得 IP 后,我会显示流量经过的地图。
我的问题是我不断收到错误的 IP 地址,但节点数量正确,如下所示:
我尝试了许多不同的实现,但都没有运气
如果您对为什么会这样有任何想法,请告诉我。 附注
- 我在 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);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。