Categories: Windows

Сканер портов на PowerShell

В решении задач практической безопасности не редко приходится заниматься сканированием портов. Чаще всего, конечно, используется NMAP из поставки дистрибутива KALI LINUX. Но иногда когда нужно сделать чтото простое может пригодится консольная утилита Windows — PowerShell. Которая в последних версиях этой ОС достаточно мощная и позволяет решать множество задач при помощи командной строки.

PowerShell.
Предполагается, что читающий эту тему знает что такое сканер портов и имел опыт использования, иначе гугль.
Ещё нужна оболочка PowerShell, но она на многих машинах уже стандартно установлена.
В общем писатель из меня не очень, так что кратко о главном.

Скрин:

Исходник:

Код:
Param(
    [parameter(Mandatory = $true,
      Position = 0)]
    [ValidatePattern("bd{1,3}.d{1,3}.d{1,3}.d{1,3}b")]
    [string]$StartAddress,
    [parameter(Mandatory = $true,
      Position = 1)]
    [ValidatePattern("bd{1,3}.d{1,3}.d{1,3}.d{1,3}b")]
    [string]$EndAddress,
    [switch]$ResolveHost,
    [switch]$ScanPort,
    [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 = 10000
  )
function Invoke-TSPingSweep {
  
  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])) {
            write-progress -activity PingSweep -status "$a.$b.$c.$d" -percentcomplete (($d/($EndAddress.Split(".")[3])) * 100)
            $pingStatus = $ping.Send("$a.$b.$c.$d",$TimeOut)
            if($pingStatus.Status -eq "Success") {
              if($ResolveHost) {
                write-progress -activity ResolveHost -status "$a.$b.$c.$d" -percentcomplete (($d/($EndAddress.Split(".")[3])) * 100) -Id 1
                $getHostEntry = [Net.DNS]::BeginGetHostEntry($pingStatus.Address, $null, $null)
              }
              if($ScanPort) {
                $openPorts = @()
                for($i = 1; $i -le $ports.Count;$i++) {
                  $port = $Ports[($i-1)]
                  write-progress -activity PortScan -status "$a.$b.$c.$d" -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
                    }
                  }
                  $client.Close()
                }
              }
              if($ResolveHost) {
                $hostName = ([Net.DNS]::EndGetHostEntry([IAsyncResult]$getHostEntry)).HostName
              }
              # Return Object
              New-Object PSObject -Property @{
                IPAddress = "$a.$b.$c.$d";
                HostName = $hostName;
                Ports = $openPorts
              } | Select-Object IPAddress, HostName, Ports
            }
          }
        }
      }
    }
  }
  End {
  }
}
Invoke-TSPingSweep

Что с ним делать?
Исходник вбиваем в блокнот и сохраняем под названием Port-Scan.ps1
Для удобства можно закинуть его на С: или куда вам удобно.

Как пользоваться?
А пользоваться мы будем с помощью параметров, так же можно запустить дабл кликом по командлету, но мне так удобней.
Нажимаем Windows + R и вводим powershell
Запустили пс, теперь вводим параметры, как и что — ниже.

Моя часто-юзаемая схема:
<полный путь к файлу> -StartAddress <начальный айпишник> -EndAddress <конечный айпишник> -ResolveHost -Scanport -port <порты через запятую>

Примеры:

C:port-scan.ps1 -StartAddress 148.251.6.0 -EndAddress 148.251.6.100 -ResolveHost -ScanPort -Port 3389,21,139 //TimeOut -по умолчанию
C:port-scan.ps1 -StartAddress 148.251.6.0 -EndAddress 148.251.6.100 -ResolveHost -ScanPort -TimeOut 300 //Порты будут сканиться по умолчанию
C:port-scan.ps1 -StartAddress 148.251.6.0 -EndAddress 148.251.6.100 -ScanPort -Port 3389,21,139 //Хост не будет определяться и таймаут по умолчанию

Пояснение:
C:port-scan.ps1 -это полный путь к сканеру.
-StartAddress -этот параметр задает с какого айпишника пудем начинать сканить.
-EndAddress -этот параметр задает по какой айпишник сканить.
-ResolveHost -этот параметр определяет хост.
-ScanPort -этот параметр указывает, что мы будем сканить порты.
-Port -это сами порты, которые мы хотим отсканить.
-TimeOut -это таймаут времени ответа от хоста, в общем поймете 🙂

Заключение:
Все исходники и документацию можете найти по ссылке.

За материал спасибо Сrusty (Zloy.bz)

Click to rate this post!
[Total: 3 Average: 5]
cryptoworld

Специалист в области кибер-безопасности. Работал в ведущих компаниях занимающихся защитой и аналитикой компьютерных угроз. Цель данного блога - простым языком рассказать о сложных моментах защиты IT инфраструктур и сетей.

View Comments

Recent Posts

Лучший адаптер беспроводной сети для взлома Wi-Fi

Чтобы взломать сеть Wi-Fi с помощью Kali Linux, вам нужна беспроводная карта, поддерживающая режим мониторинга…

4 месяца ago

Как пользоваться инструментом FFmpeg

Работа с консолью считается более эффективной, чем работа с графическим интерфейсом по нескольким причинам.Во-первых, ввод…

4 месяца ago

Как создать собственный VPN-сервис

Конечно, вы также можете приобрести подписку на соответствующую услугу, но наличие SSH-доступа к компьютеру с…

5 месяцев ago

ChatGPT против HIX Chat: какой чат-бот с искусственным интеллектом лучше?

С тех пор как ChatGPT вышел на арену, возросла потребность в поддержке чата на базе…

5 месяцев ago

Разведка по Wi-Fi и GPS с помощью Sparrow-wifi

Если вы когда-нибудь окажетесь в ситуации, когда вам нужно взглянуть на спектр беспроводной связи, будь…

5 месяцев ago

Как обнаружить угрозы в памяти

Elastic Security стремится превзойти противников в инновациях и обеспечить защиту от новейших технологий злоумышленников. В…

5 месяцев ago