IPStatus Перечисление
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Сообщает о состоянии отправки сообщения проверки связи ICMP на компьютер.
public enum class IPStatus
public enum IPStatus
type IPStatus =
Public Enum 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, использующего параметр |
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.