IPStatus 列舉
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
報告將網際網路控制訊息通訊協定 (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 秒。 您可以透過採用 |
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.SendAsync 方法以檢查是否可以透過網路連線到計算機時,Ping.Send類別Ping會傳回 PingReply 物件。
警告
DestinationProhibited 和 DestinationProtocolUnreachable 列舉值具有相同的數值。 這是可行的,因為 DestinationProhibited 僅適用於 IPv6,而 DestinationProtocolUnreachable 僅適用於 IPv4。