Поделиться через


IPStatus Перечисление

Определение

Сообщает о состоянии отправки сообщения проверки связи ICMP на компьютер.

public enum class IPStatus
public enum IPStatus
type IPStatus = 
Public Enum IPStatus
Наследование
IPStatus

Поля

BadDestination 11018

Сбой запроса проверки связи ICMP произошел из-за того, что IP-адрес назначения не может получить запросы проверки связи ICMP или не должен указываться в поле адреса назначения любых IP-датаграмм. Например, это состояние будет возвращено, если вызвать метод Send, указав IP-адрес "000.0.0.0".

BadHeader 11042

Не удалось выполнить запрос проверки связи ICMP из-за недопустимого заголовка.

BadOption 11007

Не удалось выполнить запрос проверки связи ICMP из-за наличия в нем недопустимого параметра.

BadRoute 11012

Не удалось выполнить запрос проверки связи ICMP из-за отсутствия допустимого маршрута между компьютером-источником и конечным компьютером.

DestinationHostUnreachable 11003

Не удалось выполнить запрос проверки связи ICMP из-за недоступности конечного компьютера.

DestinationNetworkUnreachable 11002

Не удалось выполнить запрос проверки связи ICMP из-за недоступности сети, в которой находится конечный компьютер.

DestinationPortUnreachable 11005

Не удалось выполнить запрос проверки связи ICMP из-за недоступности порта на конечном компьютере.

DestinationProhibited 11004

Не удалось выполнить запрос проверки связи ICMPv6 из-за административного запрета связи с конечным компьютером. Это значение применимо только к IPv6.

DestinationProtocolUnreachable 11004

Не удалось выполнить запрос проверки связи ICMP из-за недоступности компьютера назначения, указанного в сообщении проверки связи ICMP, поскольку он не поддерживает протокол, по которому передается пакет. Это значение применимо только к IPv4. Это значение описано в стандарте IETF RFC 1812 как "Связь административно запрещена".

DestinationScopeMismatch 11045

Не удалось выполнить запрос проверки связи ICMP из-за того, что адреса источника и назначения, указанные в сообщении проверки связи ICMP, находятся в разных областях. Обычно причиной является маршрутизатор, выполняющий переадресацию пакета с помощью интерфейса, который находится за пределами области адреса источника. Области адресов (локальный адрес канала, локальный адрес сети и глобальная область) определяют область сети, в которой адрес действителен.

DestinationUnreachable 11040

Не удалось выполнить запрос проверки связи ICMP из-за недоступности компьютера назначения, указанного в сообщении проверки связи ICMP. Точная причина проблемы неизвестна.

HardwareError 11008

Не удалось выполнить запрос проверки связи ICMP из-за аппаратной ошибки.

IcmpError 11044

Не удалось выполнить запрос проверки связи ICMP из-за ошибки протокола ICMP.

NoResources 11006

Не удалось выполнить запрос проверки связи ICMP из-за нехватки сетевых ресурсов.

PacketTooBig 11009

Не удалось выполнить запрос проверки связи ICMP из-за того, что размер пакета с запросом превышает MTU узла (маршрутизатора или шлюза), расположенного между отправителем и получателем. MTU определяет максимальный размер передаваемого пакета.

ParameterProblem 11015

Не удалось выполнить запрос проверки связи ICMP из-за проблем, возникших на узле (маршрутизаторе или шлюзе) при обработке заголовка пакета. Такое состояние возникает, например, если в заголовке содержатся недопустимые данные полей или нераспознанный параметр.

SourceQuench 11016

Не удалось выполнить запрос проверки связи ICMP из-за того, что пакет был удален. Это происходит, если в очереди вывода компьютера-источника недостаточно места для хранения или если пакеты приходят к получателю слишком быстро, чтобы успеть их обработать.

Success 0

Запрос проверки связи ICMP выполнен успешно. Получен ответ за запрос проверки связи ICMP. Если получено это состояние, значит остальные свойства объекта PingReply содержат допустимые данные.

TimedOut 11010

Ответ на запрос проверки связи ICMP не был получен за отведенное время. Значение допустимого времени ожидания ответа по умолчанию — 5 секунд. Это значение можно изменить с помощью метода Send или SendAsync, использующего параметр timeout.

TimeExceeded 11041

Не удалось выполнить запрос проверки связи ICMP из-за того, что срок жизни пакета стал равным нулю, в следствие чего он был удален маршрутищирующим узелом (маршрутизатором или шлюзом).

TtlExpired 11013

Не удалось выполнить запрос проверки связи ICMP из-за того, что срок жизни пакета стал равным нулю, в следствие чего он был удален маршрутищирующим узелом (маршрутизатором или шлюзом).

TtlReassemblyTimeExceeded 11014

Не удалось выполнить запрос проверки связи ICMP из-за того, что для передачи пакет был разбит на фрагменты, не все из которых были получены за отведенное время для повторной сборки. В стандарте RFC 2460 предельное время, за которое должны быть получены все фрагменты пакета, составляет 60 секунд.

Unknown -1

Не удалось выполнить запрос проверки связи ICMP по неизвестной причине.

UnrecognizedNextHeader 11043

Не удалось выполнить запрос проверки связи ICMP из-за отсутствия в поле "Next Header" (Следующий заголовок) распознаваемого значения. В поле "Next Header" (Следующий заголовок) указывается тип заголовка расширения (если имеется) или протокол, работающий поверх протокола IP, например TCP или UDP.

Примеры

В следующем примере кода отправляется эхо-сообщение ICMP и проверяется состояние.

#using <System.dll>

using namespace System;
using namespace System::Net;
using namespace System::Net::NetworkInformation;
using namespace System::Text;

// args[1] can be an IPaddress or host name.
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   
   Ping ^ pingSender = gcnew Ping;
   PingOptions ^ options = gcnew PingOptions;
   
   // Use the default Ttl value which is 128,
   // but change the fragmentation behavior.
   options->DontFragment = true;
   
   // Create a buffer of 32 bytes of data to be transmitted.
   String^ data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
   array<Byte>^buffer = Encoding::ASCII->GetBytes( data );
   int timeout = 120;
   PingReply ^ reply = pingSender->Send( args[ 1 ], timeout, buffer, options );
   
   if ( reply->Status == IPStatus::Success )
   {
      Console::WriteLine( "Address: {0}", reply->Address->ToString() );
      Console::WriteLine( "RoundTrip time: {0}", reply->RoundtripTime );
      Console::WriteLine( "Time to live: {0}", reply->Options->Ttl );
      Console::WriteLine( "Don't fragment: {0}", reply->Options->DontFragment );
      Console::WriteLine( "Buffer size: {0}", reply->Buffer->Length );
   }

   
}
using System;
using System.Net;
using System.Net.NetworkInformation;
using System.Text;

namespace Examples.System.Net.NetworkInformation.PingTest
{
    public class PingExample
    {
        // args[0] can be an IPaddress or host name.
        public static void Main (string[] args)
        {
            Ping pingSender = new Ping ();
            PingOptions options = new PingOptions ();

            // Use the default Ttl value which is 128,
            // but change the fragmentation behavior.
            options.DontFragment = true;

            // Create a buffer of 32 bytes of data to be transmitted.
            string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
            byte[] buffer = Encoding.ASCII.GetBytes (data);
            int timeout = 120;
            PingReply reply = pingSender.Send (args[0], timeout, buffer, options);
            if (reply.Status == IPStatus.Success)
            {
                Console.WriteLine ("Address: {0}", reply.Address.ToString ());
                Console.WriteLine ("RoundTrip time: {0}", reply.RoundtripTime);
                Console.WriteLine ("Time to live: {0}", reply.Options.Ttl);
                Console.WriteLine ("Don't fragment: {0}", reply.Options.DontFragment);
                Console.WriteLine ("Buffer size: {0}", reply.Buffer.Length);
            }
        }
    }
}
open System.Net.NetworkInformation
open System.Text

// args[0] can be an IPaddress or host name.
[<EntryPoint>]
let main args =
    let pingSender = new Ping()

    // Use the default Ttl value which is 128,
    // but change the fragmentation behavior.
    let options = PingOptions()
    options.DontFragment <- true

    // Create a buffer of 32 bytes of data to be transmitted.
    let data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    let buffer = Encoding.ASCII.GetBytes data
    let timeout = 120
    let reply: PingReply = pingSender.Send(args.[0], timeout, buffer, options)

    match reply.Status with
    | IPStatus.Success ->
        printfn "Address: %O" reply.Address
        printfn "RoundTrip time: %d" reply.RoundtripTime
        printfn "Time to live: %d" reply.Options.Ttl
        printfn "Don't fragment: %b" reply.Options.DontFragment
        printfn "Buffer size: %d" reply.Buffer.Length
        0
    | _ ->
        eprintfn "Error sending ping: %O" reply
        eprintfn "Error was: %O" reply.Status
        1

Комментарии

Класс Ping использует значения в этом перечислении для задания PingReply.Status свойства . Класс Ping возвращает PingReply объекты при вызове Ping.Send методов или Ping.SendAsync , чтобы проверка, можно ли подключиться к компьютеру по сети.

Предупреждение

Значения перечисления DestinationProhibited и DestinationProtocolUnreachable имеют одинаковое числовое значение. Это возможно, так как DestinationProhibited применяется только к IPv6, а DestinationProtocolUnreachable — только к IPv4.

Применяется к