中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PowerShell批量掃描IP和端口

發布時間:2020-06-05 22:44:36 來源:網絡 閱讀:1828 作者:fuhj02 欄目:安全技術

前面的文章中曾經發布了對指定IP進行批量端口掃描的方法和腳本,過PowerShell收發TCP和UDP消息包的方法以及通過PowerShell嘗試登錄SQLServer服務的方法,這構成了PSNet程序集用于通過PowerShell對網絡狀態進行操作。最近在不斷嘗試之下,找到了對指定范圍的IP段進行掃描和對端口進行掃描的方法,本文將會介紹如何通過PowerShell批量掃描IP及其對應的端口。

依然在PSNet程序集的基礎上進行擴展,首先在$env:PSSpace/PSNet/TCPOp下創建腳本文件Invoke-ScanIPPort.ps1,并在$env:PSSpace/PSNet/TCPOp/PSNet.psm1中添加對腳本文件的調用:

. $env:PSSpace/PSNet/TCPOp/Invoke-ScanIPPort.ps1

首先對后面代碼中將會出現的變量進行介紹:
-StartAddress[掃描的起始IP地址],與-EndAddress配合使用,【此參數必須】
-EndAddress[掃描的結束IP地址],【此參數必須】
-ResolveHost[是否嘗試對主機名嘗試進行解析]
-ScanPort[是否進行端口掃描],如果要掃描端口此選項必須
-AllPort[是否對所有端口進行掃描],范圍為1~65534(注意此選項掃描時間很長建議在選中單個IP的情況下進行使用,并且盡量少使用)
-StartPort[掃描的起始端口端口],與-EndPort配合使用,如果此選項與-Ports選項同時存在則-Port參數失效
-EndPort[掃描的結束端口]
-Ports掃描時默認掃描的端口,如果后續不帶參數則僅掃描21,22,23,53,69,71,80,98,110,139,111,389,443,445,1080,1433,2001,2049,
3001,3128,5222,6667,6868,7777,7878,8080,1521,3306,3389,5801,5900,5555,5901如果后續帶多個以逗號分割的多個數字則會掃描數字對應的端口,如果只掃描默認的端口,則不需此參數
-TimeOut超時時間,默認值為100ms(毫秒)

此函數的調用方式如下:
Invoke-ScanIPPort -StartAddress 192.168.10.1 -EndAddress 192.168.10.254#掃描IP段
Invoke-ScanIPPort -StartAddress 192.168.10.1 -EndAddress 192.168.10.254 –ResolveHost#掃描IP段,并嘗試解析IP對應主機名
Invoke-ScanIPPort -StartAddress 192.168.10.1 -EndAddress 192.168.10.254 -ResolveHost –ScanPort#掃描IP段,并嘗試掃描默認端口
Invoke-ScanIPPort -StartAddress 192.168.10.1 -EndAddress 192.168.10.254 -ResolveHost -ScanPort -TimeOut 50 #掃描IP段,嘗試掃描默認端口,端口掃描50ms超時
Invoke-ScanIPPort -StartAddress 192.168.10.1 -EndAddress 192.168.10.254 -ResolveHost -ScanPort -Port 80 #掃描IP段,并嘗試掃描80端口
Invoke-ScanIPPort -StartAddress 192.168.10.1 -EndAddress 192.168.10.1 -ResolveHost -ScanPort –AllPort#掃描ip,并嘗試掃描所有1~65534之間端口
Invoke-ScanIPPort -StartAddress 192.168.10.1 -EndAddress 192.168.10.254 -ScanPort -StarPort 21 -EndPort 81#掃描IP段之間主機所有21至81之間的端口

上圖來一張掃描過程中的圖片
PowerShell批量掃描IP和端口

掃描結束后的結果:

PowerShell批量掃描IP和端口
代碼如下:

        =====文件名:Invoke-ScanIPPort.ps1=====
function Invoke-ScanIPPort {
  Param(
    [parameter(Mandatory = $true,
      Position = 0)]
    [ValidatePattern("\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b")]
    [string]$StartAddress,
    [parameter(Mandatory = $true,
      Position = 1)]
    [ValidatePattern("\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b")]
    [string]$EndAddress,
    [switch]$ResolveHost,
    [switch]$ScanPort,
    [switch]$AllPort,
    [int]$StartPort,
    [int]$EndPort,
    [int[]]$Ports = @(21,22,23,53,69,71,80,98,110,139,111,389,443,445,1080,1433,2001,2049,3001,3128,5222,6667,6868,7777,7878,8080,1521,3306,3389,5801,5900,5555,5901),
    [int]$TimeOut = 100
  )
  Begin {
    $ping = New-Object System.Net.Networkinformation.Ping
  }
  Process {
    foreach($a in ($StartAddress.Split(".")[0]..$EndAddress.Split(".")[0])) {
      foreach($b in ($StartAddress.Split(".")[1]..$EndAddress.Split(".")[1])) {
        foreach($c in ($StartAddress.Split(".")[2]..$EndAddress.Split(".")[2])) {
          foreach($d in ($StartAddress.Split(".")[3]..$EndAddress.Split(".")[3])) {
            $ip = "$a.$b.$c.$d"
            write-progress -activity "ScanIP Ping" -status "$ip" -percentcomplete (($d/($EndAddress.Split(".")[3])) * 100)            
            $pingStatus = $ping.Send("$ip",$TimeOut)
            if($pingStatus.Status -eq "Success") {
              if($ResolveHost) {
                write-progress -activity ResolveHost -status "$ip" -percentcomplete (($d/($EndAddress.Split(".")[3])) * 100) -Id 1
                $getHostEntry = [Net.DNS]::BeginGetHostEntry($pingStatus.Address, $null, $null)
              }
              if($ScanPort) {
                if($AllPort) {
                    $Ports = @(1..65534)
                }
                if($StartPort -ne $null -and $EndPort -ne $null){
                    $Ports = @($StartPort..$EndPort)
                }
                $openPorts = @()
                for($i = 1; $i -le $Ports.Count;$i++) {
                  $port = $Ports[($i-1)]
                  write-progress -activity "PortScan[$port]$result" -status "$ip" -percentcomplete (($i/($Ports.Count)) * 100) -Id 2
                  $client = New-Object System.Net.Sockets.TcpClient
                  $beginConnect = $client.BeginConnect($pingStatus.Address,$port,$null,$null)
                  if($client.Connected) {
                    $openPorts += $port
                  } else {
                    # Wait
                    Start-Sleep -Milli $TimeOut
                    if($client.Connected) {
                      $openPorts += $port
                      $length=$openPorts.length
                      $result="[find $length ports.Last port $port]"
                    }
                  }
                  $client.Close()
                }
              }
              if($ResolveHost) {
                $hostName = ([Net.DNS]::EndGetHostEntry([IAsyncResult]$getHostEntry)).HostName
              }
              # Return Object
              if ($openPorts -ne $null)
              {
              write-host "IPAddress" "$ip"
              if ($getHostEntry -ne $null)
              {write-host "HostName" $getHostEntry}
              write-host "Ports" $openPorts 
              }
           }
          }
        }
      }
    }
  }
  End {
  }
}

 

作者: 付海軍
出處:http://fuhj02.blog.51cto.com
版權:本文版權歸作者和51cto共有
轉載:歡迎轉載,為了保存作者的創作熱情,請按要求【轉載】,謝謝
要求:未經作者同意,必須保留此段聲明;必須在文章中給出原文連接且保證內容完整!否則必究法律責任!
個人網站: http://txj.shell.tor.hu/

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湖口县| 皮山县| 宁武县| 揭西县| 甘谷县| 故城县| 卓资县| 开化县| 湘西| 金溪县| 射洪县| 岐山县| 邵武市| 扎囊县| 怀化市| 舟曲县| 井冈山市| 大关县| 宜君县| 辽宁省| 蓬莱市| 广东省| 荥经县| 大英县| 仁化县| 宁陵县| 德兴市| 舒兰市| 青冈县| 五寨县| 亚东县| 正安县| 咸丰县| 四平市| 水城县| 恩平市| 通辽市| 海原县| 兰溪市| 巍山| 湘乡市|