Powershell:如何在不知道子网大小的情况下扫描局域网

时间:2017-05-11 02:06:16

标签: powershell networking

我正在尝试使用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地址进行更改。

这可能超出我作为初学者应该做的事情吗?如果是这样,我可以尝试制作哪些其他网络工具,为我的知识水平构建更简单?

1 个答案:

答案 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}