Сделай если с ping и ттл - PullRequest
0 голосов
/ 06 июня 2018

Я хочу запустить в своем коде функцию, которая проверяет, находится ли устройство в сети, а также, если TTL меньше 250

, но я не сделалt найти где посмотреть 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 голосов
/ 06 июня 2018

Это удивительно необычно, когда вы начинаете программировать, но первое, на что вы должны обратить внимание, когда хотите что-то узнать, - это документация.

Методы Ping

Метод Ping.Send (IPAddress, Int32, Byte [], PingOptions)

Попытки отправить эхо-сообщение протокола управления сообщениями Интернета (ICMP) с указанным буфером данныхна компьютер с указанным IP-адресом и получить соответствующее сообщение ICMP-эхо-ответа от этого компьютера.Эта перегрузка позволяет указать значение времени ожидания для фрагментации операции и управления и значения времени жизни для пакета эхо-сообщений ICMP.

Класс PingOptions

Свойства

Ttl Получает или задает количество узлов маршрутизации, которые могут пересылать данные Ping до их отбрасывания.

Свойство PingOptions.Ttl

Получает или задает количество узлов маршрутизации, которые могут пересылать данные 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...";

...
...