我想从我的电脑查询我的 DHCP 服务器以查找特定的 mac 地址。我想输入要搜索的主机名,然后返回 Mac 地址。
就像是 :
netsh dhcp server scope show clients |find hostname
这个命令行不起作用,但也许你有一些提示?
谢谢你,
答案1
如果您熟悉 Powershell,此脚本将帮助您找到所需内容: https://sites.google.com/site/assafmiron/ServerScripts/get-dhcpleases
此脚本几乎同样有效。它目前列出了额外的客户端。使用 find 命令参数的一些正则表达式魔法可以修复此问题。保存到 .cmd 文件并指定您的 dhcppserver 和有效范围。
for /f "skip=4 delims=: tokens=2" %%a in ('nslookup %1') do set IP=%%a
netsh dhcp server \\ourdhcpsvr scope 192.168.1.0 show clients|findstr "%IP%"
输出应如下所示
172.16.19.78 - 255.255.248.0 - c6-33-5f-cb-a7-a5 -4/25/2017 8:26:07 AM -D
答案2
当netsh dhcp server \\servername scope 10.130.40.0 show clients
您获得一个没有客户名称的列表时,当您在此行末尾添加“1”时,您也会获得客户名称:
netsh dhcp server \\servername scope 10.130.40.0 show clients 1
答案3
概括
以下三个 PowerShell cmdlet(以及稍后列出的一些特定参数)可以组合起来仅获取具有 Dhcp 租约的设备的 Mac 地址:
描述
相当不言自明,Get-DhcpServerv4Lease
将显示与指定范围内包含的所有租约相关的信息,包括目标设备的 Mac 地址。这是一个好的开始,但会显示很多不需要的信息。让我们通过一些过滤来解决这个问题。
也许不太容易理解,Where-Object
它允许我们在查询中添加一个过滤条件(或多个过滤条件)。我们将HostName
根据返回的对象的属性进行过滤Get-DhcpServerv4Lease
,以便只显示与我们的目标计算机相关的信息。现在我们已经过滤掉了大部分不需要的信息,但仍然有一些剩余。让我们再过滤一些。
当然,更简单的解释是,Select-Object
它可以执行更多的过滤。我们将根据属性ClientId
(在本例中相当于 Mac 地址)进行过滤,从而丢弃任何非 Mac 地址的信息。
给我看代码!
当我们借助管道将所有内容放在一起时(请注意分隔 cmdlet 的“|”管道字符),它看起来像这样:
PS 7.2> $DhcpServerHostname = "dhcpserver01"
PS 7.2> $DhcpScopeIpAddress = "10.0.0.0"
PS 7.2> $TargetAbsoluteHostname = "pc01.example.domain"
PS 7.2> Get-DhcpServerv4Lease -ComputerName $DhcpServerHostname -ScopeId $DhcpScopeIpAddress | Where-Object -Property "HostName" -Like -Value $TargetAbsoluteHostname | Select-Object -ExpandProperty "ClientId"
01-23-45-67-89-AB
笔记
- 是的,不幸的是,Dhcp范围的Ip地址是必需。出于某种原因,此 cmdlet 背后的团队决定不允许在所有范围内进行搜索。非常令人沮丧,因为这似乎是一个明显的遗漏。如果您需要帮助查找目标范围的 IP 地址,请提出另一个问题。
- 我在示例中使用的主机名是绝对主机名。我认为 Dhcp 条目使用绝对名称的情况比不使用更常见,因此将其包含在内,但相对主机名(即
pc01
本例中)可能有效。或者,可以使用通配符(即 PowerShell 中的“*”星号),但由于这会增加复杂性,因此可能需要单独提问来解释。