¿Requieres de una instalación o configuración de Linux o sus servicios?
¿Un desarrollo WEB empresarial a la medida?
¿Un curso o capacitación a la medida?
Revisa el sitio de SERVICIOS de LinuxTotal


Probar o escanear puertos abiertos 

Copyright © 2005-2024 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.

Autor: Sergio González D.  

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.


TELNET

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 (netcat)

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

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

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   

BASH

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   

Un poco más de puertos en Linux

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:

  • 0 - 1023: puertos "Well Known" o bien conocidos, también conocidos como puertos "root"
  • 1024 - 49151: Puertos registrados, son los puertos que compañias y/o organismos registran para sus servicios.
  • 49152 - 65535: Puertos dinámicos, son los que se utilizan para formar sockets.

    
    
$ grep -w 53 /etc/services
domain          53/tcp                          # name-domain server
domain          53/udp


¿Requieres de una instalación o configuración de Linux o sus servicios?
¿Un desarrollo WEB empresarial a la medida?
¿Un curso o capacitación a la medida?
Revisa el sitio de SERVICIOS de LinuxTotal

LinuxTotal en:

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:


14TNQv5wM3xkSv65gHGQ6s6f8yTZuFTohE
Más artículos de LinuxTotal

Uno de mis clientes tiene múltiples aplicaciones basadas en VisualBasic 6 y como base de datos Access, que se ejecutan directamen....


Linux ofrece multitud de servicios o servidores, estos pueden iniciar o arrancar junto con la carga del sistema o pueden después ....


Ya son varios los lectores que me preguntan que CMS (content management system) utilizo para este sitio. Ejemplos de CMS son mambo....


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....


Una de las dificultades con una base de datos MySQL grande y activa es la de realizar respaldos limpios sin tener que desconectar ....


Sistemas basados en GNU/Linux (Al igual que sus parientes basados en Unix como BSD o los de Macinstosh) conservan la tradición de....


Linux es un sistema multiusuario, por lo tanto, la tarea de añadir, modificar, eliminar y en general administrar usuarios se conv....


Eventualmente, mientras más se aprende a usar la línea de comandos y a realizar shell scripts, en alguno de estos scripts necesi....


GNU/Linux es increiblemente fácil de configurar, no bases de datos raras, no registros, no directorios regados por aquí y por al....


awk o la versión GNU gawk es más que un simple comando de procesamiento de patrones, es todo un lenguaje de análisis semántico....



Copyright © LinuxTotal.com.mx 2006-2024
info@linuxtotal.com.mx · linuxtotal.com.mx@gmail.com