使用ping和ttl创建一个if

时间:2018-06-06 08:43:12

标签: c# ping ttl

我想在我的代码中运行一个功能,检查该单元是否在线,以及 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 的选项是什么?

1 个答案:

答案 0 :(得分:0)

当你开始编程时,这是一个非常罕见的事情,但是当你想要了解某些内容时,首先要看的是文档。

Ping Methods

Ping.Send Method (IPAddress, Int32, Byte[], PingOptions)

  

尝试发送Internet控制消息协议(ICMP)回显   具有指定数据缓冲区的消息到具有该计算机的计算机   指定的IPAddress并接收相应的ICMP echo回复   来自该计算机的消息。这个重载允许你指定一个   操作和控制碎片的超时值   ICMP回送消息包的生存时间值。

PingOptions Class

<强>属性

  

Ttl 获取或设置可转发的路由节点数   在丢弃之前对数据进行Ping操作。

PingOptions.Ttl Property

  

获取或设置可转发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...";

...