要包含#include<iphlpapi.h>;该函数的实现在 Iphlpapi.lib 库文件中,
要在项目设置的链接中加入库文件 Iphlpapi.lib。(注意:VC6.0 不含这两个
文件,需网上下载,而 VC7.0 中含有。)关键代码如下:
//将用户输入的目的主机的字符串类型点式 IP 地址转换成一个 3 2 位的
无符号长整数:
ULONG ULDestIP=inet_addr(strIPAddr);
//发送 ARP 请求包获得远程 MAC 地址:
iRusult=SendARP(ULDestIP,(unsigned long)NULL,
(PULONG)&ULMacAdd,&PhyAddrLen);
//由于获得的 MAC 地址是 6 字节的 unsigned char 数值,不便阅读,所以需
要将其转换为字符串:
sprintf(strMacAddr,"%.2x-%.2x-%.2x-%.2x-%.2x-
%.2x",ULMacAdd[0],ULMacAdd[1],ULMacAdd[2],ULMacAdd[3],ULM
acAdd[4],ULMacAdd[5]);
为了实现获取机房内所有机器的 MAC 地址,可以采取循环的办法发送
ARP 请求包获得所有机器的 MAC 地址,考虑机房内机器的 IP 地址一般都是
连续的,所以先获取 IP 地址最小的那台机器的 MAC 地址,然后逐一增加 IP
地址, 循环获取其它机器的 IP 地址。
//注意 IP 地址加一前先要将 ULONG 类型的 IP 地址从网络字节顺序转换为主
机字节顺序,加一后再从主机字节顺序转换为网络字节顺序。
ULDestIP=htonl(ntohl(ULDestIP)+1);
为了使用户能对比观察及关机的需要,程序中还获取了远程机的机器
名,并与 IP 地址、MAC 地址一起显示在一个 ListCtrl 控件中。
//获取远程机器名:
struct hostent *RemoteHost;
RemoteHost=(struct hostent*)malloc(sizeof(struct hostent));
RemoteHost=gethostbyaddr((char*)&ULDestIP,4,AF_INET);