欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

windows PowerShell内置的端口扫描器使用

程序员文章站 2022-03-09 22:42:21
...

前言

可能我们想知道远程主机的端口开放,首先想到的都是Nmap工具,但有时工具获取困难,且Nmap获取信息有限,这时PowerShell就有用武之地了。

用PowerShell实现基本的端口扫描

CMD进入powershell:
windows PowerShell内置的端口扫描器使用
【示例1】: 针对单个IP的多个端口的扫描

PS C:\User\my>1..1024 | % {echo ((new-object Net.Sockets.TcpClient).Connect
("10.0.0.100",$_)) "Port $_ is open!"} 2>$null

windows PowerShell内置的端口扫描器使用
参数说明:

   1) 1..1024 - 创建值为从1到1024的一系列变量
   2)| - 管道运算符,将上述对象传递给循环体
   3)% - 在PowerShell中,%是foreach对象的别名,用来开始一个循环。循环体为接下来使用大括号{}括起来
      的内容
   4)echo - 将输出打印至屏幕
   5)new-object Net.Sockets.TcpClient - 新建一个.Net TcpClient类的实例,它允许我们和TCP端口
     之间建立socket连接
   6).Connect("10.0.0.100",$_)) -调用TcpClient类的Connect函数,参数为10.0.0.100和端口$_。
      其中$_这个变量表示当前对象,即本轮循环中的数字(1..1024)
   7)"Port $_ is open!") - 当程序发现一个开放的端口时,屏幕打印『Port # is open!』 
   8)2>$null - 告诉PowerShell遇到任何错误都不显示

上述示例中扫描的端口范围是1-1024,可修改为你想扫描的端口范围,如(22…58)、(8080…9000)等端口范围。

此外,PowerShell中另一种可用的方法是用Test-NetConnection命令,其能够输出更多有用的信息。

**【示例2】:Test-Netconnection 针对某IP段中单个端口的扫描

PS C:\User\my>foreach ($ip in 1..20) {Test-NetConnection -Port 80 -InformationLevel 
"Detailed" 192.168.1.$ip}

注:win7版本的powershell没有Test-NetConnection ,win0系统有该命令
windows PowerShell内置的端口扫描器使用
注: Test-NetConnection的最大的不足是:该命令是在4.0版本的PowerShell中才引入的。

参数说明:

1)foreach ($ip in 1…20) {} - 循环遍历数字1到20

2)Test-NetConnection - Test-Connection是一个用来测试不同种类的网络连接的工具

3)-Port 80 - 检查80端口是否可用

4)-InformationLevel “Detailed” - 提供详细的输出信息

5)192.168.1.ipIP80ip - 针对列表中的IP地址,依次尝试向80端口发起连接。在本例中,变量ip从1循环至20

当然,构建一个可以遍历多个系统的多个端口的扫描器也是可行的。
【示例3】: ** 针对某IP段 & 多个端口的扫描器

PS C:\User\my>1..20 | % { $a = $_; 1..1024 | % {echo ((new-object Net.Sockets.TcpClient).
Connect("10.0.0.$a",$_)) "Port $_ is open!"} 2>$null}

上述命令执行较慢,改进版如下:

  PS C:\User\my>1..20 | % { $a = $_; write-host "------"; write-host "10.0.0.$a"; 22,53,80,445 
  | % {echo ((new-object Net.Sockets.TcpClient).Connect("10.0.0.$a",$_))
   "Port $_ is open!"} 2>$null}

许多安全的网络环境会开启出口流量过滤控制,以限制对某些服务的出口协议的访问。这对于提升HTTP/HTTPS/DNS通道的安全性是有好处的,原因之一就在于此。然而,当需要识别出可替代的出站访问时,我们可以在内网中使用PowerShell来评估网络防火墙上的出口过滤器。

PowerShell测试出口过滤器:

PS C:\User\my>1..1024 | % {echo ((new-object Net.Sockets.TcpClient).Connect("allports.exposed",$_)) "Port $_ is open" } 2>$null