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 秒。 您可以透過採用 timeout 參數的 SendSendAsync 方法變更這個值。

TimeExceeded 11041

ICMP 回應要求失敗,因為它的存留時間 (TTL) 值已到達零,導致轉送節點 (路由器或閘道) 捨棄封包。

TtlExpired 11013

ICMP 回應要求失敗,因為它的存留時間 (TTL) 值已到達零,導致轉送節點 (路由器或閘道) 捨棄封包。

TtlReassemblyTimeExceeded 11014

ICMP 回應要求失敗,因為封包已分割成多個傳輸片段,但並未在指定的重組時間內收到所有的片段。 RFC 2460 指定 60 秒的時間限制,必須在此時限內接收所有封包片段。

Unknown -1

ICMP 回應要求失敗,原因不明。

UnrecognizedNextHeader 11043

ICMP 回應要求失敗,因為 [下一頁首] 欄位未包含可辨認的值。 [下一頁首] 欄位表示擴充頁首類型 (如果有的話) 或是 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.SendPing.SendAsync 方法以檢查是否可以透過網路連線到電腦時,類別 Ping 會傳回 PingReply 物件。

警告

DestinationProhibited 和 DestinationProtocolUnreachable 列舉值具有相同的數值。 這是可行的,因為 DestinationProhibited 僅適用于 IPv6 和 DestinationProtocolUnreachable 僅適用于 IPv4。

適用於