CSDN=>FAQ=>FAQ 展示
  • 问题内容:求获取DHCP已分配的IP
  • 原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=5659641
  • 所属论坛:网络编程     审核组:VC/MFC
  • 提问者:astair     解决者:neosu
  • 感谢:loverx neosu
  • 关键字:VC/MFC 网络编程
  • 答案:

    小妹欲编写一个运行在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
    }

    }
    }

  • 评价: 有价值 给朵鲜花(8) 无价值 扔个鸡蛋(2)
相关FAQ
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo