首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

ICMP 協定深度解析 (三):呼叫 ICMP.DLL 實作 Ping

     編輯:VC 教學

Microsoft 未公開文件化的 ICMP.DLL 提供 IcmpCreateFile/IcmpSendEcho/IcmpCloseHandle 三個函數,可簡單實作 Ping。本文提供完整 C 程式碼 (BCC32/VC5 編譯通過)。

實作流程

  1. LoadLibrary("ICMP.DLL") 載入。
  2. gethostbyname 解析目標 IP。
  3. GetProcAddress 取得三個函數指標 (函數簽章複雜,文中給出 typedef)。
  4. IcmpCreateFile 開啟 Ping 服務取得 Handle。
  5. 配置 IP_ECHO_REPLY 緩衝區 (含 IP_OPTION_INFORMATION),填入測試資料 (0xAA)。
  6. IcmpSendEcho 發送請求,等待回應 (Timeout 5000ms)。
  7. 解析回應:IP 位址、RTT (毫秒)、TTL。
  8. GlobalFree/FreeLibrary 清理。
DWORD dwStatus = pIcmpSendEcho(hIP, *(DWORD*)phe->h_addr_list[0],
    acPingBuffer, sizeof(acPingBuffer), NULL, pIpe,
    sizeof(IP_ECHO_REPLY)+sizeof(acPingBuffer), 5000);

注意:微軟宣稱未來可能替換此 API,建議改用 Raw Socket 實作 (見下集)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved