我想创建脚本/服务,允许在通过WOL Windows域醒来电脑。现在我想给用户选择的广告容器为包含在电脑的觉醒的起点的选项。我最初的想法是使用DHCP作为给出的主机名存储库来查询MAC地址(我可以从AD足够容易地拉给出的容器)。

有一种方法以编程查询DHCP服务/服务器,传递主机名和恢复相关联的MAC地址?

或者,有没有解决我的问题的一个更好/更简单的方法?

有帮助吗?

解决方案

尝试从微软dhcpexim.exe

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

其他提示

没有问题;因为所有的机器都在你的域名,你可以放在一起的VBScript将从本地机器拿到MACADDRESS(ES),并将其存储在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

由于您的客户都在“成员服务器” OU不是所有上面你就需要修改上面的脚本包含的目录搜索,在strComputerName做得到COMPUTERLOCATION

当你有一个工作的脚本,让您的域管理员把脚本作为启动脚本靶向您需要监控的电脑;这样,它会执行每当计算机启动。您也可以运行该脚本作为计划任务从还没有重启或使用的 PSEXEC 或你能想到的一些其他的方式立即获得数据。或者,您可以重写剧本完全远程连接到所有的机器,并获得数据的方式(这可能不是可能的,因为本地防火墙)。或者你可以写一个小.NET控制台应用程序,它做同样的事情,它给你......

另外,虽然存在用于计算机对象所定义的networkAddress属性;默认情况下,计算机对象本身并没有获得写到这个属性。由于启动的脚本在特定的机器上SYSTEM帐户的上下文中运行的最简单的办法是使用计算机对象(SELF)具有写权限的属性。该otherTelephone属性是多值和个人信息的一部分所有计算机对象属性设置默认有写权限。如果你想使用networkAddress属性,你需要设置该属性明确的写访问所有计算机。

此外,你需要牢记,存储在Active Directory方式的MAC地址都在你的域中的用户都会有这反过来有可能会(具体取决于您的环境)的读取访问它构成一个小的安全风险

要做到这一点,网络的方式做。

SharpPcap (PCAP包装器C#)和WinPcap的(Windows)或libpcap的(* nix中) 。编写创建SNMP分组查询路由器的ARP表的应用程序。

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

我一直在考虑实施的是最近做一个这样的例子,但我没有一个展示呢。一旦我这样做,我会确保它被添加到SharpPcap例子在项目的源代码树中找到。

这是一个有点古怪,似乎没有办法在程序里查询DHCP服务器。感谢cottsak对提出的问题。据我所知,DHCP协议不具有这样的查询,但我认为从MAYB微软的可执行文件可能有一些方法你可以在命令行解决。我没有听到任何人在任何地方说,有没有这样的情况,但它一定是这样。

哇,等一下...我想我发现了什么,我们正在寻找:NETSH。比照:

HTTP://社会。 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上午八时39分25秒-D

Yippeee!感谢您的线索!如果不是这一个,我恩维尔会缩小我的搜索的TechNet ADN发现之一。

您不能这样做与DHCP。 DHCP从MAC,而不是周围的其他方法属性IP。 ARP就是转换成IP MAC但它是机器本身应答ARP请求,所以如果它是关闭它显然不是要去答案......

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

您需要使用ARP获得MAC地址和这样做在C是一个漫长的过程。

苹果不会忽略是硬编码的,所以如果你有X计算机去获得X的MAC地址,并将其绑到AD。

注意,计算机将必须对请求的MAC地址。

从IP地址查找MAC地址

是的它逼债担心,你可以直接从DHCP拉这个信息,如果电脑有一个租约。

知道你是怎么点击鼠标右键,在DHCP添加预约?

查找范围DHCP为 '唯一ID'。它的MAC地址,SAN的冒号。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top