小妹欲编写一个运行在Windows Server 2003上的VC程序,用于获取该DHCP服务器启动后分配给客户端的IP地址(有哪些IP被使用)。
请各位大侠多多帮忙,最好有源码,先在此谢过!
请各位大侠多多帮忙,最好有源码,先在此谢过!
解决方案 »
- win7开发有什么变化吗?
- 探讨:关于vc开发的软件,提供使用者编写脚本,然后软件编译进行处理
- VC6转VC7的链接问题
- 用VC写的读取IC卡读卡器的DLL在WIN98下能用但WIN2000下却不能用,帮我看看吧!
- 做sinffer遇到问题,为什么我的winsock2.h里面没有 IP_HDRINCL,没有LPWPSADATD
- 多线程 网络通信 如何在计算机集群上实现并行处理
- 我用的创新SB Live 5.1声卡,漫步者S4.1音箱,想唱卡拉OK,可是效果差得要命,各位可有什么解决办法?
- 组件是什么!
- SOS!!! 紧急求助!(100分)
- 《2009年电脑编程技巧与维护合订本》免费获取
- DLL资源与导出接口函数
- 像迅雷那种界面应该用单文档还是对话框
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
}}
}
这个方法得到的只是DHCP分配、并且机子当前连在网上的IP!并非DHCP已分配的IP!DHCP分配的IP是有寿命期的,只要在期限内,即使机子不在线,IP也是被分配出去了的。
解决问题的办法只有登录到DHCP服务区才行。