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

取得遠端機器 MAC 位址原始碼實作(ARP 協定)

     編輯:VC 教學

本程式示範如何在 Windows 平台以 C 語言撰寫工具 RmtHost.exe,透過 SendARP API 解析指定 IPv4 位址對應的 MAC 位址,並可選掃描連續 IP 範圍。

核心依賴

  • Winsock 2 (ws2_32.lib) — 網路基礎通訊;
  • IP Helper API (iphlpapi.lib) — 提供 SendARP 函數。

程式流程

  1. 初始化 Winsock (WSAStartup);
  2. 解析命令列參數:目標 IP 與可選掃描數量(預設 1);
  3. 呼叫 gethostbyaddr 反解主機名;
  4. 呼叫 SendARP 發送 ARP 請求封包,取得 6 位元組 MAC 位址;
  5. 格式化輸出 IP - HostName - MAC;
  6. 若指定掃描數量 > 1,遞增 IP 重複上述步驟。

關鍵程式碼片段

// 發送 ARP 請求
ULONG macAddLen = 6;
unsigned char macAddress[6];
iRet = SendARP(nRemoteAddr, 0, (PULONG)&macAddress, &macAddLen);

if (iRet == NO_ERROR) {
    printf("MacAddress: ");
    for (int i = 0; i < 6; i++) {
        printf("%.2x", macAddress[i]);
        if (i < 5) printf("-");
    }
    printf("\n");
} else {
    printf("SendARP Error:%d\n", GetLastError());
}

使用範例

RmtHost.exe 192.168.0.3         // 查詢單一 IP
RmtHost.exe 192.168.0.3 255     // 掃描 255 個連續 IP

注意事項

  • 需在同一區域網路(Layer 2 可達)才能解析 MAC;
  • 目標主機防火牆若封鎖 ARP 回應將導致失敗;
  • 程式僅支援 IPv4,IPv6 鄰居發現協定(NDP)機制不同。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved