Si encuentras algún problema en tu código o proyecto, recuerda probar siempre en un ambiente de testing antes subir el código al trabajo final.
Solución:
Solución 1:
Puede hacer telnet a un puerto tcp abierto en la máquina. Por ejemplo, si la máquina es un servidor web y tiene el puerto 80 abierto, simplemente:
telnet ip.ad.dre.ss 80
Esto funcionará incluso en puertos cifrados (aunque no podrá comprender los datos)
Algunos otros puertos para probar son:
- 443 para un servidor https
- 22 para ssh
(hay una lista de puertos/servicios en /etc/servicios en máquinas linux)
Solución 2:
Respuesta útil para Docker
Ping es ICMP, si bloqueó ICMP no puede hacer ping.
Es posible que aún pueda probar los puertos TCP o UDP si acepta conexiones TCP/UDP.
Si está ejecutando su prueba en contenedores, que carecen de ping, nc, telnet y otras herramientas, puede usar este truco:
(echo >/dev/tcp/$host/$port) &>/dev/null && echo "open" || echo "closed"
Esto intentará conectarse a través de tcp/udp a través del dispositivo (wow, lo sé) y repetirá “abrir” si el puerto está abierto o “cerrado” si está cerrado.
Se colgará por un tiempo antes de hacer eco de “cerrar” cuando ese sea el caso.
Solución 3:
Ejecute un agente SNMP en la máquina remota y use un administrador para leer uno de los valores de la MIB estándar.
Solución 4:
Si usa XP/2003+ (esto incluye Vista/2008/7), entonces puede usar Win32_PingStatus. Las máquinas en las que se ejecuta el código de secuencia de comandos es el único sistema que necesita ser XP/2003+, y funciona como si se usara Ping.exe, solo que no usa ping.exe, por lo que debería actuar como una escapatoria a su configuración de seguridad que no permite la ejecución de ping.exe.
strComputer = "192.168.1.1"
Set objWMIService = GetObject("winmgmts:\.rootcimv2")
Set colItems = objWMIService.ExecQuery _
("Select * from Win32_PingStatus " & _
"Where Address = '" & strComputer & "'")
For Each objItem in colItems
If objItem.StatusCode = 0 Then
WScript.Echo "Reply received."
End If
Next
Consulte el artículo de Scripting Guy para obtener más información sobre cómo usar Win32_PingStatus:
http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept04/hey0914.mspx
Solución 5:
Si no tiene firewalls y enrutadores en el camino, es decir, si está en el mismo segmento que el host que está tratando de verificar, la mayoría de las soluciones anteriores son un poco exhaustivas en mi humilde opinión.
No importa a qué puerto se conecte y, de hecho, si se conecta a un puerto que es poco probable que tenga un servicio en ejecución, puede realizar el trabajo sin ser detectado.
¿Cómo?
Puedes usar cualquier herramienta que quieras, pero solo podemos usar telnet…
% telnet 313373
Trying 10.211.55.3...
telnet: connect to address 10.211.55.3: Connection refused
telnet: Unable to connect to remote host
%
Esto debería suceder de inmediato, a menos que el host esté descartando paquetes. Lo que realmente sucede es que la pila TCP/IP en el host le envía un segmento TCP con el bit RST establecido, es decir, terminando su paquete SYN.
El hecho de que haya recibido un paquete RST significa que, de hecho, hay un host en el otro extremo y, como beneficio adicional, lo ha hecho sin ser detectado (el TCP/IP no tenía una aplicación de capa superior para hablar sobre esta conexión) .
Sin embargo, en lugar de telnet, probablemente usaría algo como scapy, escribiría algo que busque el indicador RST y se lo haremos saber.
Solo para completar esto, si no hay un host en la IP que intenta, se bloqueará por un momento y el tiempo de espera, lo mismo que haría sucedería si el host receptor tuviera un firewall con un filtro de eliminación.
Si los cortafuegos están involucrados, entonces, como han sugerido otros, utilice herramientas como nmap
y cualquier otra cosa