¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Puertos y una petición web, paso a paso

Después de esta lección: Puedo comprobar en qué puertos escucha una máquina y leer una respuesta web.

Lección de 55 min7 comandosLaboratorio de pasarela NAT: masquerade y reenvío de puertos con nftables en tu navegador

La caja que dice conexión rechazada

Un puerto es el número que nombra un programa dentro de una máquina. Un código de estado es el número con el que un servidor web dice cómo fue una petición. Leer los dos permite saber qué falló.

La caja de una tienda muestra un mensaje rojo: conexión rechazada. El lector de tarjetas está encendido y su cable está bien. El mensaje dice algo exacto: la caja llegó a la máquina, y allí nada esperaba en esa puerta.

Al final de esta lección

Nota

Puedo comprobar en qué puertos escucha una máquina y leer una respuesta web.

Palabras clave

PalabraQué significaEjemplo
Puertoun número que nombra una puerta de una máquina80
Escuchandoesperando conexiones en un puerto
HTTPel lenguaje de las peticiones y respuestas web
Código de estadoun número de tres cifras que dice cómo fue una petición200
Cabecerauna línea de información extra en una petición o respuesta

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un puerto es una puerta de la máquina

Una dirección encuentra una máquina. Un puerto encuentra un programa dentro de ella. Un servidor web espera en el puerto 80, y otro programa espera en otro puerto.

Un programa que espera en un puerto está escuchando. La orden ss -ltn lista todos los puertos que escuchan: l de listening, t de TCP y n para números sin traducir.

Lista lo que escucha la máquina LAN

Comando
sudo ip netns exec lan ss -ltn

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Lista lo que escucha el servidor exterior

Comando
sudo ip netns exec srv ss -ltn

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Llama a un puerto para ver quién responde

Desde otra máquina, nc -zv llama a un puerto sin enviar nada. La z significa solo comprobar, y la v decir qué pasó.

Imprime uno de tres resultados, y la tabla de abajo dice qué significa cada uno.

Llama a un puerto abierto

Comando
sudo ip netns exec gw nc -zv -w 2 10.0.0.2 80

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Llama a un puerto donde nadie escucha

Comando
sudo ip netns exec gw nc -zv -w 2 10.0.0.2 9999

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejemplo resuelto: qué dice una llamada

nc imprimeQué significaDónde mirar
succeededUn programa escuchaEl propio programa
Connection refusedLa máquina respondió y nadie escucha ahíSi el programa funciona, y en qué puerto
timed outNo volvió ninguna respuestaUn cortafuegos, o una ruta que falla

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Una respuesta web tiene tres partes

Una petición web es texto sencillo. La respuesta también, en tres partes: una línea de código de estado, unas cabeceras y luego el cuerpo.

El código de estado dice cómo fue. La primera cifra da la familia. Un 2 es éxito y un 3 es un traslado. Un 4 es un error de quien pide, y un 5 es un error del servidor.

Lee una respuesta entera, con cabeceras

Comando
sudo ip netns exec gw curl --noproxy '*' -s -i -m 3 http://10.0.0.2/

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Imprime solo el código de estado

Comando
sudo ip netns exec gw curl --noproxy '*' -s -o /dev/null -w '%{http_code}\n' http://10.0.0.2:8081/

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejemplo resuelto: las familias de código

CódigoFamiliaEn palabras sencillas
2002xxFuncionó, y aquí está la página
3013xxSe movió: pide esta otra dirección
4044xxNo hay nada en esa ruta
5035xxEl servidor no pudo hacerlo ahora

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Envía una petición a mano

Comando
printf 'GET /hello HTTP/1.0\r\n\r\n' | sudo ip netns exec gw nc -w 2 10.0.0.2 80

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente cree que el puerto 80 es la web y que ningún otro puerto puede serlo. Un puerto es un número que alguien eligió, y 80 es solo la elección habitual para HTTP. El servidor exterior habla HTTP en el puerto 8000. Pregunta qué escucha, y hazle una pregunta.

Para ir más lejos: encuentra el proceso

Ejecuta sudo ip netns exec lan ss -ltnp y lee la última columna de cada línea. Nombra el programa que tiene el puerto.

¿Qué programa escucha en el puerto 80? ¿Es el mismo proceso que tiene el 8081? ¿Por qué te ayudaría eso cuando un puerto ya está ocupado?