我想在我的代码中运行一个功能,检查该单元是否在线,以及 TTL 是否小于 250
但我没有找到哪里可以看到 TTL
代码:
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 1500;
PingReply reply = p.Send(IP,timeout,buffer);
if (reply.Status == IPStatus.Success)
{
time = DateTime.Now.ToString();
Online.Add(IP)
}
查看 TTL 的选项是什么?
答案 0 :(得分:0)
当你开始编程时,这是一个非常罕见的事情,但是当你想要了解某些内容时,首先要看的是文档。
Ping.Send Method (IPAddress, Int32, Byte[], PingOptions)
尝试发送Internet控制消息协议(ICMP)回显 具有指定数据缓冲区的消息到具有该计算机的计算机 指定的IPAddress并接收相应的ICMP echo回复 来自该计算机的消息。这个重载允许你指定一个 操作和控制碎片的超时值 ICMP回送消息包的生存时间值。
<强>属性强>
Ttl 获取或设置可转发的路由节点数 在丢弃之前对数据进行Ping操作。
获取或设置可转发Ping的路由节点数 数据被丢弃之前。
<强>说明强>
网关和路由器通过网络传输数据包 递减数据包中的当前生存时间(TTL)值 头。如果TTL值达到零,则认为该包 无法送达,被丢弃。如果您愿意,此选项很有用 测试用于传输数据的路由器和网关的数量。
示例强>
public static string PingHost(string host)
{
//string to hold our return messge
string returnMessage = string.Empty;
//IPAddress instance for holding the returned host
IPAddress address = GetIpFromHost(ref host);
//set the ping options, TTL 128
PingOptions pingOptions = new PingOptions(128, true);
//create a new ping instance
Ping ping = new Ping();
//32 byte buffer (create empty)
byte[] buffer = new byte[32];
//set the ping options, TTL 128
PingOptions pingOptions = new PingOptions(128, true);
PingReply pingReply = ping.Send(address, 1000, buffer, pingOptions);
if (!(pingReply == null))
{
switch (pingReply.Status)
{
case IPStatus.Success:
returnMessage = string.Format("Reply from {0}: bytes={1} time={2}ms TTL={3}",
pingReply.Address,
pingReply.Buffer.Length,
pingReply.RoundtripTime,
pingReply.Options.Ttl);
break;
case IPStatus.TimedOut:
returnMessage = "Connection has timed out...";
break;
default:
returnMessage = string.Format("Ping failed: {0}", pingReply.Status.ToString());
break;
}
}
else
returnMessage = "Connection failed for an unknown reason...";
...