A continuación comparto una recopilación de algunos comandos útiles a la hora de explorar la red utilizando PowerShell.
El comando anterior arroja resultados muy verbose para mi gusto, la siguiente alternativa facilita probar un rango de puertos y da como resultado una salida mas limpia:
Eso es todo. En una próxima entrada analizaremos opciones para probar puertos UDP con PowerShell.
Barridos ping
Para descubrir todos los hosts activos de una red de forma rápida podemos realizar un barrido ping o ICMP. En este ejemplo se usa un operador de rango para hacer ping a todas las IP's de una red /24 y del resultado filtramos los que contienen la linea TTL, que son los que nos interesan (esto excluye las IP's que respondieron con tiempo de espera agotado)PS C:\> 1..254 | % {echo "192.168.88.$_"; ping -n 1 -w 100 192.168.88.$_} | Select-String ttl Respuesta desde 192.168.88.1: bytes=32 tiempo=2ms TTL=64 Respuesta desde 192.168.88.214: bytes=32 tiempo=2ms TTL=64 Respuesta desde 192.168.88.229: bytes=32 tiempo<1m TTL=128 PS C:\>
Escaneo de puertos TCP
Para probar si un puerto TCP está abierto, podemos usar el cmdlet Test-NetConnectionPS C:\> foreach ($ip in 1..254) {Test-NetConnection -Port 80 -InformationLevel "Detailed" 192.168.88.$ip} ComputerName : 192.168.88.1 RemoteAddress : 192.168.88.1 RemotePort : 80 NameResolutionResults : 192.168.88.1 MatchingIPsecRules : NetworkIsolationContext : Private Network InterfaceAlias : vEthernet (Ether-wifi) SourceAddress : 192.168.88.229 NetRoute (NextHop) : 0.0.0.0 TcpTestSucceeded : True ADVERTENCIA: TCP connect to (192.168.88.2 : 80) failed ADVERTENCIA: Ping to 192.168.88.2 failed with status: TimedOut ComputerName : 192.168.88.2 RemoteAddress : 192.168.88.2 RemotePort : 80 NameResolutionResults : 192.168.88.2 MatchingIPsecRules : NetworkIsolationContext : Private Network InterfaceAlias : vEthernet (Ether-wifi) SourceAddress : 192.168.88.229 NetRoute (NextHop) : 0.0.0.0 PingSucceeded : False PingReplyDetails (RTT) : 0 ms TcpTestSucceeded : False
El comando anterior arroja resultados muy verbose para mi gusto, la siguiente alternativa facilita probar un rango de puertos y da como resultado una salida mas limpia:
PS C:\> 1..1024 | % { echo ((new-object Net.Sockets.TcpClient).Connect("192.168.61.1",$_)) "$_ is open" } 2>$null 22 is open 80 is open 443 is open PS C:\>
Eso es todo. En una próxima entrada analizaremos opciones para probar puertos UDP con PowerShell.