Necesito una línea de comando que pueda verificar el estado del puerto en un host remoto. Lo intenté ping xxx.xxx.xxx.xxx:161
pero no reconoce el "host". Pensé que era una "buena" respuesta hasta que hice el mismo comando contra un host que sé que tiene ese puerto abierto. Esto es para un archivo por lotes en Windows que verificará el estado del puerto remoto y luego ejecutará un comando que usa ese puerto remoto para obtener información, luego el comando de verificación de puerto remoto nuevamente, luego el comando que usa ese puerto en el siguiente servidor para obtener información , y así. He buscado en todas partes y pensé que el ping podría hacerlo, pero debe haber varias versiones de ping, supongo que el servidor en el que estoy haciendo esto no muestra esa opción.
Solo por risas, probé un comprobador de puerto remoto basado en la web desde un sitio web, y los resultados fueron correctos tanto para el servidor "problemático" como para el servidor correcto. Sin embargo, no puedo usar eso en una ejecución por lotes con más de 500 IP de servidor.
¿Hay algo que pueda hacer que sea simple? Mis habilidades en Perl son extremadamente oxidadas (úsalas o piérdelas), no conozco ningún otro idioma basado en Windows, excepto el lote. Unix es mi habilidad, pero esto debe ejecutarse desde Widows Server 2003.
fuente
ps> tnc xxx.xxx.xxx.xxx -port 161
Respuestas:
Parece que está buscando un escáner de puertos como nmap o netcat , los cuales están disponibles para Windows, Linux y Mac OS X.
Por ejemplo, busque telnet en una ip conocida:
Por ejemplo, busque puertos abiertos del 20 al 30 en host.ejemplo.com:
fuente
nc -zv host.example.com 20-30
. de lo contrario no hay salida-z
paranc
no está disponible en Linux.En el símbolo del sistema, puede usar el comando telnet. Por ejemplo, para conectarse a IP 192.168.10.1 con el puerto 80,
Para habilitar telnet en Windows 7 y superior, haga clic en . Desde el artículo vinculado, habilite telnet a través del panel de control -> programas y características -> características de windows -> cliente telnet, o simplemente ejecute esto en un indicador de administrador:
fuente
Para fines de secuencias de comandos, descubrí que el
curl
comando puede hacerlo, por ejemplo:Posiblemente no funcione para todos los servicios, ya que
curl
puede devolver diferentes códigos de error en algunos casos (según el comentario), por lo que agregar la siguiente condición podría funcionar de manera confiable:Nota: Se agregó
-m5
para establecer un tiempo de espera de conexión máximo de 5 segundos.Si desea verificar también si el host es válido, también debe verificar el
6
código de salida:Para solucionar el código de error devuelto, simplemente ejecute:
curl host:port
por ejemplo:Ver:
man curl
para la lista completa de códigos de salida.fuente
curl $IP:$PORT
produce:curl: (52) Empty reply from server
(versuscurl: (7) Failed to connect
) pero, al igual quenc
, no puedo| grep Empty
para estas declaraciones de salida como uno podría esperar (¿algo sobre nuevas líneas o falta de salida inmediata?). Supongo que su línea es condicional basada en el código de salida, ¿verdad? Estoy en El Cap; tal vez en otras versiones o sistemas operativos, el estado de falla sale en-1
lugar de52
?curl -s $IP:$PORT >/dev/null; if [ $? -eq 52 ]; then echo "Connected."; else echo "Fail."; fi
Presione Windows+ Rtipo
cmd
yEnterEn el símbolo del sistema, escriba
Si el puerto no está abierto, este mensaje mostrará:
De lo contrario, accederá al puerto abierto (se mostrará una pantalla vacía)
fuente
Use el comando nc,
También puedes usar el comando telnet
fuente
nc o 'netcat' también tiene un modo de escaneo que puede ser útil.
fuente
Creo que estás buscando Hping ( http://www.hping.org/ ), que tiene una versión de Windows.
También es muy útil si desea ver a lo largo de una ruta que un puerto TCP está bloqueado (como por un firewall), donde ICMP podría no estar.
fuente
En Bash, puede usar archivos de pseudodispositivos que pueden abrir una conexión TCP al socket asociado. La sintaxis es la siguiente
/dev/$tcp_udp/$host_ip/$port
.Aquí hay un ejemplo simple para probar si Memcached se está ejecutando:
Aquí hay otra prueba para ver si se puede acceder a un sitio web específico:
Para obtener más información, consulte: Guía avanzada de secuencias de comandos Bash: Capítulo 29.
/dev
y/proc
.Relacionado: Pruebe si un puerto en un sistema remoto es accesible (sin telnet) en SuperUser.
Para obtener más ejemplos, consulte: Cómo abrir un socket TCP / UDP en un shell bash (artículo).
fuente