链接 arp 和 nslookup 以获取每个 IP 的主机名(Win)

链接 arp 和 nslookup 以获取每个 IP 的主机名(Win)

当我执行 arp -a 时,我希望看到设备的名称。据我所知,没有选项可以直接使用 arp 执行此操作。所以我认为也许可以对检索到的每个 ip 执行 nslookup。我对 shell 不太了解,我只是认为我可以使用管道运算符

arp -a | nslookup   

但它产生了这样的结果:

> > Unrecognized command: Interfaccia: 192.168.176.1 --- 0x5        
> Unrecognized command:   Indirizzo Internet    Indirizzo fisico      Tipo        
> Unrecognized command:   192.168.176.255       ff-ff-ff-ff-ff-ff     statico  
> Unrecognized command:   224.0.0.22            01-00-5e-00-00-16     statico
> Unrecognized command:   224.0.0.251           01-00-5e-00-00-fb     statico  

显然它是以字符串形式传递的。是否可以使用 for 循环?

我曾见过这些: 在 Windows 上通过 MAC 地址获取主机名

使用 arp -a 解析主机名时出现问题

但他们似乎建议对感兴趣的 IP 手动执行 nslookup,或者使用 nmap。

感谢您的任何帮助!

答案1

回答

我也研究过同样的事情。有一个 powershell 等效程序叫做Get-NetNeighbor。你可以将以下内容粘贴到 powershell 中,它会执行你想要的操作。

# Equivalent to ARP
Get-NetNeighbor -AddressFamily IPv4 | %{

    # For each arp entry, get the address and resolve its hostname
    $entry = @{
        IPAddress=$_.IPAddress;
        Hostname=(Resolve-DnsName -QuickTimeout $_.IPAddress 2>null).Namehost;
    }

    # Pack the results into a PS Object for cleaner workable output
    new-object psobject -property $entry;
} 

解释

将其分解成几个部分:

  • 获取NetNeighbor:这相当于 ARP,但由于它是一个 powershell 对象,所以它的输出更易于使用。

  • $entry:保存 IP 地址和主机名的自定义对象。

  • 解析 DNS 名称:这相当于 nslookup,虽然没有那么快,但我使用了 -QuickTimeout 标志

  • 2>空:相当于-ErrorAction SilentlyContinue标志,如果没有主机名,我们就不会收到错误。

  • 新对象 psobject:这就是 $entry 被打包成更清晰、更可行输出的内容。


例子

按原样运行命令的结果:

> Get-NetNeighbor -AddressFamily IPv4 | %{
>>     # For each arp entry, get the address and resolve its hostname
>>     $entry = @{
>>         IPAddress=$_.IPAddress;
>>         Hostname=(Resolve-DnsName -QuickTimeout $_.IPAddress 2>null).Namehost;
>>     }
>>     # Pack the results into a PS Object for cleaner workable output
>>     new-object psobject -property $entry;
>> }

IPAddress       Hostname
---------       --------
224.0.0.22      igmp.mcast.net
224.0.0.2       all-routers.mcast.net
224.0.0.22      igmp.mcast.net
224.0.0.2       all-routers.mcast.net
255.255.255.255
239.255.255.250
224.0.0.252
224.0.0.251
224.0.0.22      igmp.mcast.net
224.0.0.2       all-routers.mcast.net
10.0.0.255
10.0.0.118
10.0.0.100      tools.localhost
10.0.0.79
10.0.0.60
10.0.0.28
10.0.0.15
10.0.0.1
239.255.255.250
224.0.0.251
224.0.0.22      igmp.mcast.net
224.0.0.2       all-routers.mcast.net

从这里您可以使用where {}select-string等获得更具体的结果。

相关内容