¿Cómo puedo verificar qué puertos están ocupados y qué puertos están libres en mi máquina Linux?


30

¿Hay algún comando de línea de comando o alguna otra forma de encontrar y enumerar los números de puerto ocupados y libres en mi máquina Linux?

Respuestas:


41

El comando

netstat -antu

mostrará todos los puertos tcp y udp en uso. La salida se verá más o menos así:

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:59753           0.0.0.0:*               LISTEN

El número después de los dos puntos en el campo Dirección local muestra el puerto en uso. Si el estado es "ESCUCHAR" significa un puerto que está utilizando para las conexiones entrantes. Si la dirección IP en elLocal Address campo es 0.0.0.0, significa que las conexiones entrantes serán aceptadas en cualquier dirección IP asignada a una interfaz, lo que significa que las conexiones se originan fuera de su máquina.

Si decía localhost o 127.0.0.1solo aceptaría conexiones de su máquina.

Además, si agrega el -pparámetro y lo ejecuta como root, mostrará el proceso que abrió el puerto:

$ sudo netstat -antup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:59753           0.0.0.0:*               LISTEN      860/rpc.statd

Todo lo que no se muestre como en uso es gratuito, sin embargo, los usuarios (cuentas sin privilegios) solo pueden abrir puertos superiores a 1023.


significa que las conexiones entrantes serán aceptadas en cualquier dirección IP asignada a una interfaz , por lo que esto significa que las conexiones que se originan fuera de su máquina no cometieron un error aquí? Probablemente quisiste decir que las conexiones se aceptarán si vienen en cualquier dirección asignada a una interfaz determinada, independientemente de su origen. El origen de las conexiones entrantes probablemente se especifica en la siguiente columna Dirección extranjera. Entonces está ahí, si uno tiene 0.0.0.0 como valor, significa que las conexiones serán aceptadas desde cualquier lugar, incluso fuera de la máquina
user907860

1
@ user907860 Puede que no esté claro, pero la distinción que estoy haciendo es entre 0.0.0.0 y 127.0.0.1: este último solo aceptará conexiones de su máquina, porque está escuchando en una dirección IP no enrutada. Donde como 0.0.0.0 significa cualquier dirección en su máquina, y siempre que estén enrutadas, se pueden hacer conexiones desde otras máquinas.
Paul

Solo para tu información, -antuse puede escribir como -tuna🐟
Abdennour TOUMI


7

Una forma buena y confiable de verificar los puertos abiertos es usar ss(reemplazo para los obsoletos netstat ), es utilizable en un script sin requerir privilegios elevados (es decirsudo ).

Uso: opción -lpara escuchar puertos, opción -npara omitir la resolución DNS y el filtro en el puerto de origen NN: src :NN(reemplácelo NNpor el puerto que desea monitorear). Para más opciones, veaman ss

ss -ln src :NN

Ejemplos:

[user@server ~]# ss -ln src :80
State       Recv-Q Send-Q       Local Address:Port   Peer Address:Port
LISTEN      0      128                      *:80                *:*
[user@server ~]# ss -ln src :81
State       Recv-Q Send-Q       Local Address:Port   Peer Address:Port

Y en un script, usando grep, podemos probar si la salida contiene el puerto que solicitamos. Ejemplo con el puerto 80 en uso (ver arriba):

myport=80
# count the number of occurrences of port $myport in output: 1= in use; 0 = not in use
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if [ "$result" -eq 1 ]; then
  echo "Port $myport is in use (result == $result) "
else
  echo "Port $myport is NOT in use (result == $result) "
fi

# output:
Port 80 is in use (result == 1)

Ejemplo con el puerto 81 no en uso (ver arriba)

myport=81
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if [ "$result" -eq 1 ]; then
  echo "Port $myport is in use (result == $result) "
else
  echo "Port $myport is NOT in use (result == $result) "
fi

# output:
Port 81 is NOT in use (result == 0)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.