这个问题源于尝试管理我的家庭wifi网络。我一直在玩弄get-netipaddress,ipconfig和nslookup.exe等命令。
以下命令引导我到某个地方,但它没有我正在寻找的信息。
Get-NetIPAddress | Format-Table
我希望能够获得家庭网络上所有设备的列表。包括设备IP地址,以及该设备的某种名称。上一个命令给出了一个ipaddress,但它看起来更像是一个mac地址?任何帮助表示赞赏!
答案 0 :(得分:8)
我将我的批处理工具转换为Powershell脚本 它是cmd行工具ping.exe,arp.exe和nslookup.exe的包装器。
Arp.exe -a
将返回IP和MAC。 编辑var $ SubNet以适合您的环境。
## Q:\Test\2017\01\21\SO_41785413.ps1
$FileOut = ".\Computers.csv"
## Ping subnet
$Subnet = "192.168.xyz."
1..254|ForEach-Object{
Start-Process -WindowStyle Hidden ping.exe -Argumentlist "-n 1 -l 0 -f -i 2 -w 1 -4 $SubNet$_"
}
$Computers =(arp.exe -a | Select-String "$SubNet.*dynam") -replace ' +',','|
ConvertFrom-Csv -Header Computername,IPv4,MAC,x,Vendor|
Select Computername,IPv4,MAC
ForEach ($Computer in $Computers){
nslookup $Computer.IPv4|Select-String -Pattern "^Name:\s+([^\.]+).*$"|
ForEach-Object{
$Computer.Computername = $_.Matches.Groups[1].Value
}
}
$Computers
$Computers | Export-Csv $FileOut -NotypeInformation
#$Computers | Out-Gridview
示例输出
Computername IPv4 MAC
------------ ---- ---
Zyxel-24G-Switch 192.168.xyz.1 fc-f5-28-fc-f5-28
TMDat1-Plex 192.168.xyz.60 02-7c-2c-02-7c-2c
HPn54L 192.168.xyz.91 c8-cb-b8-c8-cb-b8
Medion-Tablett 192.168.xyz.114 08-d8-33-08-d8-33
dLAN-LiveCam 192.168.xyz.115 bc-f2-af-bc-f2-af
McMini 192.168.xyz.128 40-6c-8f-40-6c-8f
HPojPro8500plus 192.168.xyz.144 d4-85-64-d4-85-64
Amazon-Kindle2 192.168.xyz.152 10-ae-60-10-ae-60
SG-S4-active 192.168.xyz.162 40-0e-85-40-0e-85
TMDat1 192.168.xyz.167 28-92-4a-28-92-4a
HP-G1610 192.168.xyz.176 10-60-4b-10-60-4b
NetStream4Sat 192.168.xyz.191 00-0c-6c-00-0c-6c
Netio230b 192.168.xyz.230 24-a4-2c-24-a4-2c
fritz 192.168.xyz.250 bc-05-43-bc-05-43
HomeMatic-CCU 192.168.xyz.254 00-1a-22-00-1a-22
我自己的扩展版本附加了从Mac的前6个十六进制数字中提取的供应商,但要求从非常慢的Oui.txt下载 " http://standards-oui.ieee.org/oui.txt"
答案 1 :(得分:2)
我一直使用NETSTAT来弄清楚应用程序在做什么。
从正常的cmd提示符开始:
netstat -b
将返回所有连接以及与之关联的应用。
以下是netstat返回的示例:
TCP 127.0.0.1:50452 iqbrix-pc:15485 ESTABLISHED
[Everything.exe]
TCP 192.168.4.210:27036 ZOE-SURFACE:55915 ESTABLISHED
[Steam.exe]
TCP 192.168.4.210:49674 server18101:5938 ESTABLISHED
[TeamViewer_Service.exe]
TCP 192.168.4.210:49798 msnbot-65-52-108-183:https ESTABLISHED
WpnService
[svchost.exe]
TCP 192.168.4.210:49829 pf-in-f109:imaps ESTABLISHED
OneSyncSvc_320294
[svchost.exe]
您可以解析返回的数据并从那里移动。
答案 2 :(得分:1)
可以用“Resolve-DnsName”找到dns,用“Get-NetNeighbor”(arp表缓存)找到mac/ips。可以扫描 ips 并使用“测试连接”(ping)。 “测试连接”还可以让您查找打开的 tcp 端口,因此如果端口 80 已打开,您可以在浏览器中转到该地址,或者如果端口 135 已打开,则可以转到该文件共享地址。最后,如果仍然无法识别设备,可以使用站点查找arp 给出的mac 地址或使用底部的代码。
#replace the string with e.g. "192.168.1.$_", whatever your subnet is, optional but will improve # of devices found
$ips= 0..255 | %{"10.0.0.$_"};
#optional: add ports to scan. 22=ssh, 80=http, 443=https, 135=smb, 3389=rdp
$ports= 22, 80, 443, 135, 3389;
#optional: change batch size to speed up / slow down (warning: too high will throw errors)
$batchSize=64;
$ips += Get-NetNeighbor | %{$_.IPAddress}
$ips = $ips | sort | unique;
$ips | % -Throttlelimit $batchSize -Parallel {
$ip=$_;
$activePorts = $using:ports | %{ if(Test-Connection $ip -quiet -TcpPort $_ -TimeoutSeconds 1){ $_ } }
if(Test-Connection $ip -quiet -TimeoutSeconds 1 -count 1){
[array]$activePorts+="(ping)";
}
if($activePorts){
$dns=(Resolve-DnsName $ip -ErrorAction SilentlyContinue).NameHost;
$mac=((Get-NetNeighbor |?{$_.State -ne "Incomplete" -and $_.State -ne "Unreachable" -and $_.IPAddress -match $ip}|%{$_}).LinkLayerAddress )
return [pscustomobject]@{dns=$dns; ip=$ip; ports=$activePorts; mac=$mac}
}
} | tee -variable "dvcResults"
$dvcResults | sort -property mac
注意:您无法确定 dns,因为可能未配置反向区域。 (所以dns字段可能不完美)
如果你想查找mac地址,你可以使用下面的代码附加这些数据或访问一个网站(注意:下面的代码从standards-oui.ieee.org/oui/oui.txt下载数据)< /p>
#build dict
$oui = (irm standards-oui.ieee.org/oui/oui.txt) -split '\r?\n';
$dict=@{};
$oui | ?{$_ -match "^[^\s]{8}"} | %{$arr=$_ -split "\s+";$dict[$arr[0]]=(($arr |select-object -skip 2) -join " ")}
#append data
$dvcDescriptions = $dvcResults | %{[pscustomobject]@{dns=$_.dns; ip=$_.ip; ports=$_.ports; companyName=$_.mac ? $dict[$_.mac.Substring(0,8)] : ""; mac=$_.mac;}};
$dvcDescriptions | sort -property companyName | Format-Table
例如。输出:
输出显示了托管 Windows 文件共享的 asus 计算机、托管 https 的戴尔服务器、带 ssh 的 raspberry pi、mac mini 和托管网络服务器的 hp 打印机。如果我进入我的路由器页面,我可以看到我们的解析 dnsname 无法找出的 raspberry pi 设备名称 (pizero1)。
答案 3 :(得分:0)
Get-NetIPAddress
将显示IPv4和IPv6的IP地址。您可能会混淆MAC的IPv6地址。