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

解决方案 »

  1.   

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

  2.   

    先用
    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
    }}
    }
      

  3.   

    代码有些乱, lz还是搜索一下DhcpEnumSubnets 和 DhcpEnumSubnetClients, 会有很多源代码
      

  4.   

    ,window提供的开发资料还是满多的
      

  5.   

    我试了neosu(CrazyNeo) 的程序,但为什么还是不行啊,请再说明一下吧,谢谢!
      

  6.   

    这个贴子虽然已经结贴,甚至进了FAQ里,我还是不得不说一句:
    这个方法得到的只是DHCP分配、并且机子当前连在网上的IP!并非DHCP已分配的IP!DHCP分配的IP是有寿命期的,只要在期限内,即使机子不在线,IP也是被分配出去了的。
    解决问题的办法只有登录到DHCP服务区才行。
      

  7.   

    直接查DHCP服务器不就好了,费那事