有没有办法在不依赖 DNS 查询的情况下从 IP 地址获取主机名?

Mog*_*Mog 8 powershell hostname

我正在尝试编写一个脚本,该脚本依赖于知道某个网段上计算机的名称,但是我发现的所有脚本都依赖于 DNS 查询,该查询仅以几台机器的名称进行回复。例如:

[System.Net.Dns]::GetHostbyAddress($IPAddress) 
Run Code Online (Sandbox Code Playgroud)

我也试过使用

Ping -a $ipaddress
Run Code Online (Sandbox Code Playgroud)

但这通常也无法返回机器名称。有没有办法直接询问主机它的名字是什么以及在 AD 中可能需要什么级别的权限才能获得响应?
提前致谢。

小智 9

[System.Net.DNS]::GetHostByAddress()(now [System.Net.DNS]::GetHostEntry()) 不仅依赖于 DNS,尽管它的名称如此。它还将检查本地C:\Windows\System32\Drivers\etc\hosts文件中是否有本地配置的条目。

直接 dns vianslookup找不到名称:

PS C:\Users\Tim> nslookup 192.168.1.50
Server:  dns03
Address:  192.168.2.103

*** rpi03 can't find 192.168.1.50: Non-existent domain
Run Code Online (Sandbox Code Playgroud)

然而, gethostentry() 仍然找到名称:

PS C:\Users\Tim> [system.net.dns]::gethostentry('192.168.1.50')

HostName  Aliases AddressList
--------  ------- -----------
localentry {}      {192.168.1.50}
Run Code Online (Sandbox Code Playgroud)


use*_*160 5

命令:

wmic.exe /node:10.20.30.40 OS get CSName /format:list 
Run Code Online (Sandbox Code Playgroud)

整个子网的批处理文件:

for /L %%z in (1,1,254) do wmic.exe /node:10.20.30.%%z OS get CSName /format:list 2>NUL
Run Code Online (Sandbox Code Playgroud)


小智 0

您可以尝试使用以下命令: Invoke-Command -computername $computer {Get-Item HKLM:\SYSTEM\ControlSet001\Control\ComputerName\ActiveComputerName} 活动计算机名称等于您的 DNS 名称(当然没有后缀)