路由器獲取客戶端 MAC 地址主要依賴 ARP (Address Resolution Protocol, IPv4) 或 NDP (Neighbor Discovery Protocol, IPv6)。
Who has 192.168.1.100? Tell 192.168.1.1192.168.1.100 is at aa:bb:cc:dd:ee:ff#include
#include
#include
#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")
void GetRemoteMAC(const char* pszIP)
{
IPAddr destIP = inet_addr(pszIP);
IPAddr srcIP = 0; // 0 表示自動選擇最佳源 IP
ULONG macAddr[2] = {0};
ULONG phyAddrLen = 6;
DWORD dwRet = SendARP(destIP, srcIP, macAddr, &phyAddrLen);
if (dwRet == NO_ERROR && phyAddrLen == 6)
{
BYTE* bMac = (BYTE*)macAddr;
printf("MAC: %02X-%02X-%02X-%02X-%02X-%02X\n",
bMac[0], bMac[1], bMac[2], bMac[3], bMac[4], bMac[5]);
}
else
{
printf("SendARP 失敗,錯誤碼: %lu\n", dwRet);
}
}
int main()
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2), &wsaData);
GetRemoteMAC("192.168.1.100");
WSACleanup();
return 0;
}
前提條件:目標主機與本機在同一廣播域 (同一子網/交換機),且目標主機在線響應 ARP。
#include
#pragma comment(lib, "iphlpapi.lib")
void ListARPTable()
{
PMIB_IPNETTABLE pArpTable = NULL;
ULONG dwSize = 0;
// 獲取所需緩衝區大小
GetIpNetTable(pArpTable, &dwSize, FALSE);
pArpTable = (PMIB_IPNETTABLE)malloc(dwSize);
if (GetIpNetTable(pArpTable, &dwSize, FALSE) == NO_ERROR)
{
for (DWORD i = 0; i < pArpTable->dwNumEntries; i++)
{
MIB_IPNETROW row = pArpTable->table[i];
char ipStr[16];
inet_ntop(AF_INET, &row.dwAddr, ipStr, 16);
printf("IP: %-15s MAC: %02X-%02X-%02X-%02X-%02X-%02X Type: %d\n",
ipStr,
row.bPhysAddr[0], row.bPhysAddr[1], row.bPhysAddr[2],
row.bPhysAddr[3], row.bPhysAddr[4], row.bPhysAddr[5],
row.dwType); // 1=Other, 2=Invalid, 3=Dynamic, 4=Static
}
}
free(pArpTable);
}
需構造以太網幀 + ARP 封包,使用 `socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ARP))` (Linux) 或 Windows `SIO_RCVALL` 無差別模式。複雜度高,通常不推薦應用層直接實現。
| 場景 | 可行性 | 說明 |
|---|---|---|
| 同一局域網內掃描設備 MAC | ✅ 完全可行 | SendARP / ARP 掃描工具 (如 arp-scan, nmap -sn) |
| 跨路由器/網關獲取 MAC | ❌ 不可行 | ARP 不穿透三層設備,只能獲取網關 MAC |
| 互聯網遠程獲取 MAC | ❌ 不可能 | MAC 僅在數據鏈路層本地有意義 |
| 無線網絡獲取關聯設備 MAC | ⚠️ 受限 | 需 AP 管理權限或監聽模式 (Monitor Mode) |
⚠️ 未經授權掃描網絡設備 MAC 可能違反《計算機信息網絡國際聯網安全保護管理辦法》及當地網絡安全法規。企業內部資產管理應使用合規的資產發現系統 (如 Nmap 官方版、OpenVAS、商業 ITAM 產品) 並遵循最小權限原則。