我正在尝试使用PowerShell作为网络扫描工具来ping本地子网上的每个地址。任何成功的ping都将与目标设备的IP地址一起显示。
我创建了两个命令,它们将从Get-NetIPAddress
提取IP和前缀长度:
$myIPAddress = $(Get-NetIPAddress | ? { ($_.AddressFamily -ilike "*IPv4*") -and ($_.IPAddress -notlike "127.0.0.1") -and ($_.IPAddress -notlike "169*") } | Select -ExpandProperty IPAddress)
$myPrefixLength = $(Get-NetIPAddress | ? { ($_.AddressFamily -ilike "*IPv4*") -and ($_.IPAddress -notlike "127.0.0.1") -and ($_.IPAddress -notlike "169*") } | Select -ExpandProperty PrefixLength)
我还通过创建一个基本上ping / 24空间中每个地址的工具来启动它:
$ping = new-object system.net.networkinformation.ping; 1..254 | % {$ping.send("192.168.43.$_", 1) | select address,status}
这也是因为已知子网空间为/24
且IP地址以192.168.43
开头。
我想要实现的是变量,例如1..254
和"192.168.43.$_"
可以根据机器的IP地址进行更改。
这可能超出我作为初学者应该做的事情吗?如果是这样,我可以尝试制作哪些其他网络工具,为我的知识水平构建更简单?
答案 0 :(得分:0)
正如Ron Maupin所说,这可能会导致问题,但我假设你打算在小测试子网上使用它。
您可以利用此模块获取子网范围内的ipaddresses
https://www.powershellgallery.com/packages/Indented.Net.IP/5.0.12/Content/Indented.Net.IP.psm1
如果您使用的是powershel V5,则可以将此命令用于相同的Install-Module Indented.Net.IP -Scope CurrentUser
以下代码段在上述模块的帮助下执行您打算执行的操作:
Import-Module Indented.Net.IP
$IPAddresses = $(Get-NetIPAddress | ? { ($_.AddressFamily -ilike "*IPv4*") -and ($_.IPAddress -notlike "127.0.0.1") -and ($_.IPAddress -notlike "169*") } )
$ips = $ipaddresses | %{Get-NetworkRange "$($_.ipaddress)/$($_.prefixlength)"}
$ping = new-object system.net.networkinformation.ping; $ips.ipaddresstostring | % {$ping.send($_, 1) | select address,status}