首页 文章

使用DHCP从IP获取mac地址?

提问于
浏览
2

我正在尝试创建脚本/服务,允许通过WOL唤醒Windows域中的PC . 现在我想让用户选择一个AD容器作为唤醒其中包含的PC的起点 . 我最初的想法是使用DHCP作为存储库来查询给定主机名的MAC地址(我可以很容易地从给定容器的AD中拉出来) .

有没有办法以编程方式查询DHCP服务/服务器,传递主机名并恢复关联的MAC地址?

或者,是否有更好/更简单的方法来解决我的问题?

7 回答

  • 0

    试试dhcpexim.exe from microsoft .

    或者,如果您更喜欢使用纯C. DhcpEnumSubnetClientsV4

  • 1

    没问题;因为所有计算机都在您的域中,您可以组合一个VBScript,它将从本地计算机获取MACAddress,并将其作为Active Directory中计算机对象的属性存储 .

    这是一个快速破解如何做到这一点(将其保存为.vbs文件):

    Option Explicit
    
    Const ADS_PROPERTY_UPDATE = 2
    Const COMPUTERLOCATION = "ou=Member Servers,dc=yourdomain,dc=com"
    Const ATTRIBUTETOUSE = "otherTelephone"
    
    Dim wshNetwork, strComputerName
    Set wshNetwork = WScript.CreateObject("WScript.Network")
    strComputerName = wshNetwork.ComputerName
    
    Dim objWMIService, colNetCards, objComputer, objNetCard
    Set objWMIService = GetObject("winmgmts:\\" & strComputerName & "\root\cimv2")
    Set colNetCards = objWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
    Set objComputer = GetObject("LDAP://cn=" & strComputerName & "," & COMPUTERLOCATION) 
    For Each objNetCard in colNetCards
        objComputer.PutEx ADS_PROPERTY_APPEND, ATTRIBUTETOUSE, Array(objNetCard.MACAddress)
        objComputer.SetInfo
    Next
    

    因为你的客户不需要修改上面的脚本来包含 strComputerNamestrComputerName 确实得到了 COMPUTERLOCATION .

    当您有一个工作脚本时,请让您的域管理员将该脚本作为一个启动脚本,以您需要监控的计算机为目标;这样它重新启动或使用psexec或其他一些你可以想到立即获取数据的方式 . 或者,您可以完全重写脚本以远程连接到所有计算机并以此方式获取数据(由于本地防火墙可能无法实现) . 或者您可以编写一个小型的.NET控制台应用程序来执行相同的操作,这取决于您...

    此外,虽然为计算机对象定义了 networkAddress -attribute;默认情况下,计算机对象本身无权写入此属性 . 因为启动脚本在特定计算机上的 SYSTEM 帐户的上下文中运行,所以最简单的方法是使用计算机对象( SELF )具有写访问权限的属性 . otherTelephone -attribute是多值的,是Personal-Information Property Set的一部分,默认情况下所有计算机对象都具有写访问权 . 如果要使用 networkAddress -attribute,则需要为所有计算机设置对该属性的显式写入权限 .

    此外,您还需要记住,将MAC地址存储在Active Directory中意味着您域中的所有用户都具有对它的读取权限,这反过来可能(取决于您的环境)会带来很小的安全风险 .

  • -1

    按照网络的方式来做 .

    grab SharpPcap(C#的Pcap包装器)和WinPcap(Windows)或libpcap(* nix) . 编写一个创建SNMP数据包的应用程序来查询路由器上的ARP表 .

    注意:ARP(地址解析协议)表是包含IP地址到MAC地址映射的表 .

    我一直在考虑实现一个最近这样做的例子,但我还没有一个要显示的例子 . 一旦我这样做,我将确保它被添加到项目源代码树中的SharpPcap示例中 .

  • 0

    这有点古怪似乎没有办法以编程方式查询DHCP服务器 . 感谢cottsak提问 . 我知道DHCP协议没有这样的查询,但我认为可能来自Microsoft的可执行文件可能有一些方法可以从命令行解决它 . 我没有听到任何人说没有这种情况,但必须如此 .

    WHOA,等一下......我想我找到了我们正在寻找的东西:NETSH . CF:

    http://social.technet.microsoft.com/Forums/en/ITCG/thread/afb4be16-09bd-4260-b515-8323d85d4ccb

    如果在DHCP服务器上打开命令提示符,则可以运行以下命令:

    netsh dhcp服务器范围192.168.1.0显示客户端

    并获得如下报告:

    10.10.98.53 - 255.255.255.0 -00-0c-29-02-a4-09 - 永不过期-D 10.10.98.54 - 255.255.255.0 - 00-22-19-10-29-75 -1/21/2012 8 :上午39:25 -D

    Yippeee!谢谢你的线程!!如果不是这个,我会把我的搜索范围缩小到technet,并且发现了一个 .

  • 1

    你不能用DHCP做到这一点 . DHCP从MAC中归属IP,而不是相反 . ARP是将IP转换为MAC的原因,但它是机器本身可以应答ARP请求,所以如果它关闭它显然不会回答......

    我建议你直接在你的AD中存储MAC(我猜AD支持自定义属性?)

  • 1

    你需要使用arp获取一个mac地址并这样做在C中是一个漫长的过程 .

    Mac地址是硬编码的,所以如果你有X台计算机去获取X mac地址并绑定它们到公元 .

    请注意,计算机必须打开才能请求其mac地址 .

    Finding MAC address from IP address

  • 1

    是的,担心它,如果PC有租约,你可以直接从DHCP提取这些信息 .

    知道如何右键单击并在DHCP中添加预订吗?

    在DHCP中查找“唯一ID” . 这是MAC地址,没有冒号 .

相关问题