Búsqueda de sitios web

PowerShell: Pruebe los puertos TCP abiertos con Test-OpenPort (múltiples hosts, múltiples números de puerto)


Como dice el titular, hoy todo se trata de escaneo de puertos. Cuando una computadora envía SYN a otra computadora, la computadora remota generalmente responderá con SYN + ACK o RST. Por este hecho, podemos probar si un puerto está abierto o no.

Se pueden utilizar diferentes escáneres de puertos para comprobar si un puerto está abierto o no. O Test-NetConnection o un script de creación propia. Recuerde probar NetConnection:

Pero si intenta probar varias computadoras y varios puertos, aparecerá un mensaje de error.

La siguiente función aborda este problema. Test-OpenPort permite probar varias computadoras y varios puertos a la vez.

Prueba-OpenPort

Antes de pasar a la función en sí, me gustaría mostrar mi función en acción. La función tiene dos parámetros: Destino y Puerto.


Test-OpenPort -Target 192.168.0.1 -Port 80

Estos parámetros no tienen nombre, por lo que puede omitir los nombres de los parámetros.


Test-OpenPort 192.168.0.1 80

También puedes omitir el objetivo. El valor predeterminado para este parámetro es localhost.


Test-OpenPort -Port 80,443

La ejecución en varias computadoras y puertos requiere el uso de una coma.


Test-OpenPort 192.168.0.1,sid-500.com -Port 80,443

La salida de la pantalla es un objeto. Por lo tanto, puede personalizar este objeto con Seleccionar-Objeto o Formato-Comandos (Formato-Tabla...)


Test-OpenPort 192.168.0.1,sid-500.com -Port 80,443,53 | Sort-Object Status

Para una vista más dulce:


Test-OpenPort 192.168.0.1,sid-500.com -Port 80,443,53 | Sort-Object Status | Out-GridView

La función

Copie esta función en su sesión de PowerShell ISE y presione el botón verde de inicio.


function Test-OpenPort {

<# 

.SYNOPSIS
Test-OpenPort is an advanced Powershell function. Test-OpenPort acts like a port scanner. 

.DESCRIPTION
Uses Test-NetConnection. Define multiple targets and multiple ports. 

.PARAMETER
Target
Define the target by hostname or IP-Address. Separate them by comma. Default: localhost 

.PARAMETER
Port
Mandatory. Define the TCP port. Separate them by comma. 

.EXAMPLE
Test-OpenPort -Target sid-500.com,cnn.com,10.0.0.1 -Port 80,443 

.NOTES
Author: Patrick Gruenauer
Web:
https://sid-500.com 

.LINK
None. 

.INPUTS
None. 

.OUTPUTS
None.

#>

[CmdletBinding()]

param

(

[Parameter(Position=0)]
$Target='localhost',

[Parameter(Mandatory=$true, Position=1, Helpmessage = 'Enter Port Numbers. Separate them by comma.')]
$Port

)

$result=@()

foreach ($t in $Target)

{

foreach ($p in $Port)

{

$a=Test-NetConnection -ComputerName $t -Port $p -WarningAction SilentlyContinue

$result+=New-Object -TypeName PSObject -Property ([ordered]@{
'Target'=$a.ComputerName;
'RemoteAddress'=$a.RemoteAddress;
'Port'=$a.RemotePort;
'Status'=$a.tcpTestSucceeded

})

}

}

Write-Output $result

}

Hazlo permanente

Si le gusta mi enfoque, abra PowerShell ISE. Copie la función en su sesión ISE. Cree una carpeta en C:\Program Files\Windows PowerShell\Modules y guarde el código como archivo psm1. Asegúrese de que el nombre de su archivo y el nombre de la carpeta coincidan.

Cierre PowerShell. Abra PowerShell nuevamente. El comando ahora está disponible para todos los usuarios. ¡Diviértete con Test-OpenPort!

Artículos relacionados