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!











