首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

求获取DHCP已分配的IP解决办法

2014-04-23 
求获取DHCP已分配的IP小妹欲编写一个运行在WindowsServer2003上的VC程序,用于获取该DHCP服务器启动后分配

求获取DHCP已分配的IP
小妹欲编写一个运行在Windows   Server   2003上的VC程序,用于获取该DHCP服务器启动后分配给客户端的IP地址(有哪些IP被使用)。
请各位大侠多多帮忙,最好有源码,先在此谢过!

[解决办法]
大概的步骤如下

1.获得子网掩码和gateway IP地址
2.AND操作获得局域网IP启示段,OR操作获得最大范围
3.向这个区域的每个IP,发送ARP(地址解析协议),获得的计算机会返回给你消息
4.至于如何发送ARP,window下面提供了SendARP interface,也可以使用第3方 driver

根据这个流程,对应google搜集资料,可以实现
[解决办法]
先用
DhcpEnumSubnets 枚举子网, 会有很多。

wchar_t wcIP[255];
//把dhcp主机的IP放在wcIP中
DHCP_RESUME_HANDLE hResumeHandle = 0;
DWORD PrefMax = 255;//预计的最大租约个数
DWORD dwRead;
DWORD dwTotal;
LPDHCP_IP_ARRAY IPArray = NULL;

DWORD dwRet ;
dwRet = DhcpEnumSubnets(wcIP, &hResumeHandle, PrefMax, &IPArray , &dwRead, &dwTotal);


然后在子网的基础上, 用DhcpEnumSubnetClients枚举租约

for (DWORD i = 0; i < dwRead; i ++)
{
DWORD ip = IPArray-> Elements[i];//子网地址

//str.Format( "(%d) IP = %s\n ", i, IP2Str(htonl(ip)));
//AfxMessageBox(str);

DHCP_RESUME_HANDLE hRH = 0;
LPDHCP_CLIENT_INFO_ARRAY clientArray = NULL;
DWORD PrefMaxClient = 65535;
DWORD ClientsRead, ClientsTotal;
DhcpEnumSubnetClients(wcIP, ip, &hRH, PrefMaxClient, &clientArray,&ClientsRead, &ClientsTotal);
for (DWORD j = 0; j < ClientsRead; j ++)
{
//输出客户地址
DHCP_IP_ADDRESS clientIP = clientArray-> Clients[j]-> ClientIpAddress;
//这个是主机机名, 宽字串的:clientArray-> Clients[j]-> ClientName
//MAC地址:一般是6个 clientArray-> Clients[j]-> ClientHardwareAddress-> Data
}

}
}

热点排行