在 Form1.cs 的 Main() 之後定義 IcmpPacket 類別,負責建構 ICMP 回顯請求/回應封包。核心欄位對應 RFC 792 定義:
_type (Byte) - 類型 (8 = Echo Request)_subCode (Byte) - 代碼 (通常為 0)_checkSum (UInt16) - 檢驗和_identifier (UInt16) - 識別碼,用於配對請求/回應_sequenceNumber (UInt16) - 序號_data (Byte[]) - 選擇性資料載荷按 F5 執行,輸入主機名 (如 www.163.com) 點擊「Ping」,程式連續發送 3 次 ICMP Echo Request 並顯示往返時間:

圖 06:Visual C# 實作 Ping 命令 - 執行介面
timeout 可能為主機離線、防火牆封鎖 ICMP 或網路擁塞。ping.exe 同樣存在此現象。Ping 不通 ≠ 服務不可用,需搭配 TCP 連接測試 (如 Telnet/HTTP) 綜合判斷。本系列完整展示了從 Raw Socket 建立、ICMP 封包手工組裝、檢驗和計算、非同步收發到結果解析的全流程,是深入理解網路底層協議的優秀實作練習。