查询 Windows DHCP 服务器:根据主机名查找 MAC

查询 Windows DHCP 服务器:根据主机名查找 MAC

我想从我的电脑查询我的 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

笔记

  1. 是的,不幸的是,Dhcp范围的Ip地址必需。出于某种原因,此 cmdlet 背后的团队决定不允许在所有范围内进行搜索。非常令人沮丧,因为这似乎是一个明显的遗漏。如果您需要帮助查找目标范围的 IP 地址,请提出另一个问题。
  2. 我在示例中使用的主机名是绝对主机名。我认为 Dhcp 条目使用绝对名称的情况比不使用更常见,因此将其包含在内,但相对主机名(即 pc01本例中)可能有效。或者,可以使用通配符(即 PowerShell 中的“*”星号),但由于这会增加复杂性,因此可能需要单独提问来解释。

相关内容