Сканер TCP-портов Powershell - PullRequest
0 голосов
/ 22 марта 2020

Я хотел бы создать скрипт powershell для выполнения сканера портов TCP, который может перечислять открытые порты TCP для данного IP-адреса. вот что я сделал до сих пор, это не идеально, и я хотел бы получить отзывы и исправления

       port = (80)
       network = (192.168.0)
       ErrorActionPreference= ‘silentlycontinue’
       { $ip = “{0}.{1}” –F $network,$add
       If(Test-Connection –BufferSize 32 –Count 1 –quiet –ComputerName $ip)
       { $socket = new-object System.Net.Sockets.TcpClient($ip, $port)

проблема с этим не сканирует все порты TCP, и я не уверен, как Заставь это сделать.

1 Ответ

2 голосов
/ 22 марта 2020

Существуют модули, которые можно использовать для этого варианта использования.

Find-Module -Name '*nmap*' | 
Format-Table -AutoSize

<#
Version Name         Repository Description                                                                                                                                     
------- ----         ---------- -----------                                                                                                                                     
1.0.7   xNmap        PSGallery  Powershell DSC Configuration Script for installing Nmap versions 6.49 (Beta 4), 6.47, 6.46, 6.45, 6.40, and 6.25...                             
0.6.0   PoshNmap     PSGallery  A wrapper for NMAP Network Discovery                                                                                                            
1.3.1   PSnmap       PSGallery  Svendsen Tech's PSnmap is an asynchronous Linux nmap look-alike for PowerShell. Ping sweeps and scans a network (accepts CIDR notation) for s...
...
#>

Почему бы не использовать специально созданный командлет для этого варианта использования?

# get function / cmdlet details
Get-Command -Name Test-NetConnection -Syntax
(Get-Command -Name Test-NetConnection).Parameters.Keys
Get-help -Name Test-NetConnection -Full
Get-help -Name Test-NetConnection -Online
Get-help -Name Test-NetConnection -Examples

Примечание:

Более ранние Windows версии PowerShell не имеют Test-NetConnection, если это ваш вариант использования, но даже тогда, почему это делается с нуля, по сравнению с использованием существующих образцов и настройкой по мере необходимости?

Ну, если только это не учебное упражнение. Даже в этом случае это не означает, что вы не будете сначала обращаться к другим примерам.

'сканер порта TCPS PowerShell'

Примеры, предоставленные строка поиска.

# Example 01
<#
Creating a Port Scanner with Windows PowerShell
https://devblogs.microsoft.com/scripting/creating-a-port-scanner-with-windows-powershell
#> 
# Creating a Port Scanner with Windows PowerShell
$port = 80
$net = “192.168.0”
$range = 1..254

foreach ($r in $range)
{
$ip = “{0}.{1}” -F $net,$r

if(Test-Connection -BufferSize 32 -Count 1 -Quiet -ComputerName $ip)
{
    $socket = new-object System.Net.Sockets.TcpClient($ip, $port)

    If($socket.Connected)
    {
        "$ip listening to port $port"
        $socket.Close() }
    }
}


# Example 02
<#
Port scan subnets with PSnmap for PowerShell
https://www.powershelladmin.com/wiki/Port_scan_subnets_with_PSnmap_for_PowerShell
#>
# Port scan subnets with PSnmap for PowerShell
#$computer, $port = $args[0,1] # assign values to these
$mysock = new-object net.sockets.tcpclient
$IAsyncResult = [IAsyncResult] $mysock.BeginConnect($computer, $port, $null, $null)
measure-command { $succ = $iasyncresult.AsyncWaitHandle.WaitOne(3000, $true) } | % totalseconds
$succ
$mysock.Connected
$mysock.Dispose()

# Example 03:
<# 
A Simple Network Port Scanner in PowerShell
https://www.nextofwindows.com/a-simple-network-port-scanner-in-powershell
#>
# #requires -Version 1
function Test-Port
{
    Param([string]$ComputerName,$port = 5985,$timeout = 1000)

    try
    {
        $tcpclient = New-Object -TypeName system.Net.Sockets.TcpClient
        $iar = $tcpclient.BeginConnect($ComputerName,$port,$null,$null)
        $wait = $iar.AsyncWaitHandle.WaitOne($timeout,$false)
        if(!$wait)
        {
            $tcpclient.Close()
            return $false
        }
        else
        {
            # Close the connection and report the error if there is one

            $null = $tcpclient.EndConnect($iar)
            $tcpclient.Close()
            return $true
        }
    }
    catch 
    {
        $false 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...