Acceso avanzado a puertos con Curl
Ahora que comprende los conceptos básicos del uso de Curl con diferentes puertos, exploremos técnicas más avanzadas para el acceso y las pruebas de puertos.
Prueba de disponibilidad de puertos
Curl se puede usar para verificar si un puerto específico está abierto en un servidor. Cuando un puerto está abierto, Curl intentará establecer una conexión y potencialmente recibir datos. Cuando un puerto está cerrado, Curl informará un error.
Probemos algunos puertos comunes:
## Test if port 80 (HTTP) is open
curl -s -o /dev/null -w "%{http_code}\n" http://example.com:80
Este comando mostrará el código de estado HTTP (típicamente 200 si el puerto está abierto y el servidor responde correctamente). La bandera -s hace que Curl sea silencioso, -o /dev/null redirige la salida a ninguna parte, y -w "%{http_code}\n" imprime solo el código de estado HTTP.
Probemos algunos puertos más:
## Test if port 443 (HTTPS) is open
curl -s -o /dev/null -w "%{http_code}\n" https://example.com:443
Esto debería devolver 200 u otro código de estado HTTP, indicando que el puerto 443 está abierto.
Ahora, probemos un puerto que probablemente esté cerrado:
## Test if port 81 (uncommon) is open
curl -s --connect-timeout 5 http://example.com:81
Este comando probablemente fallará con un mensaje de error como:
curl: (7) Failed to connect to example.com port 81: Connection refused
o podría agotar el tiempo de espera después de 5 segundos (como se especifica con --connect-timeout):
curl: (28) Connection timed out after 5001 milliseconds
Accediendo a servidores FTP
Curl soporta múltiples protocolos, incluyendo FTP. Veamos cómo acceder a un servidor FTP:
curl ftp://ftp.gnu.org/gnu/
Este comando lista el contenido del directorio en ftp.gnu.org. La salida podría verse así:
drwxr-xr-x 8 1003 1003 4096 Dec 16 2020 0ad
drwxr-sr-x 5 1003 1003 4096 Nov 09 2020 8sync
drwxr-xr-x 2 1003 1003 4096 Jun 05 2015 GNUinfo
drwxr-xr-x 3 1003 1003 4096 Jan 23 2022 GNUnet
...
Creando un escáner de puertos simple
Creemos un script Bash simple para escanear un rango de puertos en un servidor. Cree un nuevo archivo llamado port_scanner.sh en su directorio del proyecto:
nano ~/project/port_scanner.sh
Agregue el siguiente contenido al archivo:
#!/bin/bash
## Simple port scanner using curl
## Usage: ./port_scanner.sh <hostname> <start_port> <end_port>
hostname=$1
start_port=$2
end_port=$3
echo "Scanning ports $start_port to $end_port on $hostname..."
echo
for port in $(seq $start_port $end_port); do
## Try to connect with a short timeout
curl -s --connect-timeout 1 "$hostname:$port" > /dev/null
## Check if the connection was successful
if [ $? -eq 0 ]; then
echo "Port $port is OPEN"
else
echo "Port $port is closed"
fi
done
echo
echo "Scan complete!"
Guarde el archivo presionando Ctrl+X, luego Y y luego Enter.
Haga que el script sea ejecutable:
chmod +x ~/project/port_scanner.sh
Ahora, ejecute el script para escanear los puertos 80-85 en example.com:
~/project/port_scanner.sh example.com 80 85
La salida mostrará qué puertos están abiertos y cuáles están cerrados:
Scanning ports 80 to 85 on example.com...
Port 80 is OPEN
Port 81 is closed
Port 82 is closed
Port 83 is closed
Port 84 is closed
Port 85 is closed
Scan complete!
Este script simple demuestra cómo Curl se puede usar como una herramienta básica de escaneo de puertos. En un escenario del mundo real, querría usar herramientas especializadas como nmap para un escaneo de red más completo, pero este ejemplo muestra la versatilidad de Curl.