Copyright © 2005-2025 LinuxTotal.com.mx
Se concede permiso para copiar, distribuir y/o modificar este documento siempre y cuando se cite al autor y la fuente de linuxtotal.com.mx y según los términos de la GNU Free Documentation License, Versión 1.2 o cualquiera posterior publicada por la Free Software Foundation.
Una tarea básica y habitual en la administración de redes, es la de probrar puertos abiertos contra los servicios en otros servidores en la misma red u otras redes. Existen varios métodos y herramientas que permiten lo anterior en el mundo GNU/Linux. Conoce en este pequeño tutorial distintas maneras de probar si un puerto esta abierto o no.
El cliente telnet
hace varios años que no se usa para establecer conexiones remotas, esto por su inseguridad (transmisión de datos sin encriptación) y porque ssh lo reemplazó como método seguro de conexión remota. Pero si lo tienes instalado es excelente para probar conectividad de puertos:
sintaxis: telnet host puerto
# telnet 192.168.0.19 443 Trying 192.168.0.19... Connected to 192.168.0.19. <-- Puerto abierto Escape character is '^]'. # telnet 192.168.0.19 639 Trying 192.168.0.19... <-- Puerto cerrado, sin respuesta
nc
que es la herramienta netcat, es una utileria de red muy completa para monitoreo, diagnóstico, análisis, etc. Prácticamente cualquier uso de los protocolos TCP y UDP puede ser ejecutado con nc
.
sintaxis: nc opciones host puerto[s]
# nc -zv 192.168.0.19 443 Connection to 192.168.0.19 443 port [tcp/https] succeeded! <-- Puerto abierto # nc -zv 192.168.0.19 639 nc: connect to 192.168.0.19 port 639 (tcp) failed: Connection timed out <-- Puerto cerrado [root@localhost ~]# nc -zu 200.52.196.196 53 Connection to 200.52.196.196 53 port [udp/domain] succeeded! # nc -z -w1 192.168.0.19 130-140 Connection to 192.168.0.19 135 port [tcp/epmap] succeeded! Connection to 192.168.0.19 139 port [tcp/netbios-ssn] succeeded!
nmap
es la herramienta de escaneo de redes por excelencia, con su multitud de opciones y scripts es increiblemente poderosa. Tutoriales muy completos existen sobre nmap
y es un deber conocerla para los profesionales de redes. Además es una de las armas más poderosa para el hackeo de servidores.
Con lo anterior dicho solo mostraré una parte muy pequeña del poder de nmap
enfocada al tema de este artículo, el monitoreo de puertos.
sintaxis: nmap opciones host[s]
# nmap -p 80 192.168.0.19 Starting Nmap 5.51 ( http://nmap.org ) at 2019-02-10 14:38 CST Nmap scan report for 192.168.0.19 Host is up (0.00056s latency). PORT STATE SERVICE 80/tcp open http <-- Puerto abierto Nmap done: 1 IP address (1 host up) scanned in 0.22 seconds # nmap -p 135-140 192.168.0.19 Starting Nmap 5.51 ( http://nmap.org ) at 2019-02-10 14:43 CST Nmap scan report for 192.168.0.19 Host is up (0.00040s latency). PORT STATE SERVICE 135/tcp open msrpc <-- Puerto abierto 136/tcp filtered profile <-- Puerto cerrado 137/tcp filtered netbios-ns <-- Puerto cerrado 138/tcp filtered netbios-dgm <-- Puerto cerrado 139/tcp open netbios-ssn <-- Puerto abierto 140/tcp filtered unknown <-- Puerto cerrado Nmap done: 1 IP address (1 host up) scanned in 1.34 seconds # nmap -F 192.168.0.19 Starting Nmap 5.51 ( http://nmap.org ) at 2019-02-10 14:46 CST Nmap scan report for 192.168.0.19 Host is up (0.00066s latency). Not shown: 93 filtered ports PORT STATE SERVICE 80/tcp open http 135/tcp open msrpc 139/tcp open netbios-ssn 443/tcp open https 445/tcp open microsoft-ds 3306/tcp open mysql 5357/tcp open wsdapi Nmap done: 1 IP address (1 host up) scanned in 1.79 seconds
curl
es una herramienta de transferencia de datos. Soporta una gran variedad de protocolos de transferencia como FTPS, HTTP, HTTPS, IMAP, LDAP, POP3, SCP, TELNET, etc. etc. Al igual que con nc
y nmap
sus opciones son múltiples y los trucos que puede realizar son muy variados y completos. curl
esta diseñado para ejecutarse incluso sin interacción del usuario, pero como en los ejemplos anteriores solo utilizaremos su capacidad de escanear puertos abiertos, utilizando para esto el protocolo de telnet.
sintaxis: curl -v telnet://hots:puerto
# curl -v telnet://192.168.0.19:443 * About to connect() to 192.168.0.19 port 443 (#0) * Trying 192.168.0.19... connected * Connected to 192.168.0.19 (192.168.0.19) port 443 (#0) <-- Puerto abierto # curl -v telnet://192.168.0.19:639 * About to connect() to 192.168.0.19 port 639 (#0) * Trying 192.168.0.19... Expiró el tiempo de conexión * couldn't connect to host * Closing connection #0 curl: (7) couldn't connect to host <-- Puerto cerrado
Desde el shell de BASH es posible establecer conexiones TCP/UDP mediante los pseudo devices especiales /dev/tcp
y /dev/udp
. Este permite establecer sockets de red TCP y UDP a cualquier dispositivo o servicio de red que este accesible.
Al decir que son pseudo dispositivos, es porque lo son, no existen como archivos, de hecho si tratas de listarlos este es el resultado:
# ls /dev/tcp ls: no se puede acceder a /dev/tcp: No existe el fichero o el directorio
Sin embargo, como ya se mencionó, tienen el uso especializado de crear sockets de red.
sintaxis: /dev/tcp/host/puerto
sintaxis: /dev/udp/host/puerto
Ejemplo, consultar la hora al servidor NTP time.nist.gov :
# cat < /dev/tcp/time.nist.gov/13 58529 19-02-15 04:57:17 00 0 0 589.5 UTC(NIST) *
Y como podrás imaginarte, no necesariamente tienes que establecer un socket completo, se puden utilizar para probar o escanear puertos. Veamos ahora ejemplos para determinar puertos abiertos.
$ (echo > /dev/tcp/192.168.0.19/22) > /dev/null 2>&1 && echo "abierto" || echo "cerrado" abierto $ (echo > /dev/tcp/192.168.0.19/443) > /dev/null 2>&1 && echo "abierto" || echo "cerrado" cerrado $ timeout 3 bash -c 'cat < /dev/null > /dev/tcp/192.168.0.19/22' ; echo $? 0 <-- Puerto abierto $ timeout 3 bash -c 'cat < /dev/null > /dev/tcp/192.168.0.19/639' ; echo $? bash: connect: Connection refused bash: /dev/tcp/192.135.82.132/639: Connection refused 1 <-- Puerto cerrado
Para finalizar, recordemos que el archivo /etc/services
es un listado de todos los puertos/servicios registrados. Lista mantenida por la asociación IANA (http://www.iana.org/assignments/port-numbers). De este mismo archivo obtenemos lo siguiente, que es bueno saber:
$ grep -w 53 /etc/services domain 53/tcp # name-domain server domain 53/udp
Si encuentras útil la información que proveé LinuxTotal, considera realizar un donativo que estimule a seguir proporcionando contenido de calidad y utilidad. Gracias.
Dona a través de paypal::
O a través de bitcoins:
La demanda civil entablada por la empresa SCO contra la gigante IBM causó revuelo entre la comunidad Linux y Open Source cuando e....
El comando find de Linux es extremadamente potente. No hay nada mejor para hacer todo tipo de búsquedas de archivos y carpetas qu....
¿Olvidaste o perdiste la contraseña del usuario 'root' de MySQL?, no hay problema, solo sigue estás sencillas instrucciones y p....
Ya son varios los lectores que me preguntan que CMS (content management system) utilizo para este sitio. Ejemplos de CMS son mambo....
Sistemas Linux con gran cantidad de usuarios, como servidores de correo, servidores samba, etc., tarde o temprano tienen el proble....
En el artículo de LinuxTotal.com.mx sobre permisos se explica lo que es un archivo con permisos SUID o SGID, pueden ser potencial....
La más simple definición de un proceso podría ser que es una instancia de un programa en ejecución (corriendo). A los procesos....
Ya no es nada raro que un centro de cómputo o en un site se encuentren varios sistemas Linux actuando como servidores de archivos....
Como montar imágenes ISO en Linux.....
Sistemas basados en GNU/Linux (Al igual que sus parientes basados en Unix como BSD o los de Macinstosh) conservan la tradición de....