2013-01-08 07:34:55 +0000 2013-01-08 07:34:55 +0000
202
202

Obtener una lista de los Puertos Abiertos en Linux

Necesito un comando de Linux para listar todos los puertos abiertos libres para su uso en una aplicación

lsof -i TCP| fgrep LISTEN

No se ve que ayude ya que los Puertos que lista no son necesariamente libres para su uso. ¿Cómo puedo listar los puertos abiertos libres que no están en uso?

Respuestas (7)

268
268
268
2013-01-08 11:51:03 +0000
netstat -lntu

como respuesta de @askmish le dará una lista de los servicios que se ejecutan en su sistema en los puertos tcp y udp donde

  • -l = sólo los servicios que están escuchando en algún puerto
  • -n = mostrar número de puerto, no intente resolver el nombre del servicio
  • -t = puertos tcp
  • -u = puertos udp
  • -p = nombre del programa

No necesita el parámetro ‘p’ ya que sólo le interesa saber qué puertos están libres y no qué programa se está ejecutando en él.

Esto sólo muestra qué puertos de tu sistema están agotados. Esto no te dice el estado de tu red, por ejemplo, si estás detrás de NAT y quieres que algunos servicios sean accesibles desde fuera. O si el cortafuegos está bloqueando el puerto para los visitantes externos. En ese caso, nmap viene al rescate. ADVERTENCIA: Use nmap sólo en redes que estén bajo su control. Además, hay reglas del cortafuegos que pueden bloquear los pings de nmap, tendrá que juguetear con las opciones para obtener resultados correctos.

93
93
93
2016-06-08 20:19:05 +0000

Como net-tools está desactualizado , puedes usar el ss comando en lugar de netstat si netstat no está presente en tu máquina:

ss -lntu

debería funcionar de manera similar a

netstat -lntu

de acuerdo con la ayuda incorporada:

-n, --numeric don't resolve service names
-l, --listening display listening sockets
-t, --tcp display only TCP sockets
-u, --udp display only UDP sockets
21
21
21
2013-01-08 07:45:50 +0000

Este comando listará los puertos de red abiertos y los procesos que los poseen:

netstat -lnptu

puedes después filtrar los resultados a tus especificaciones exactas.

También puedes usar nmap para obtener resultados más granulares sobre los puertos.

5
5
5
2014-11-03 04:33:36 +0000

Todos los puertos abiertos incluyendo el tráfico de respuesta:

netstat -tuwanp 2>/dev/null | awk '{print $4}' | sort | uniq -c | wc -l
1
1
1
2019-01-16 23:21:34 +0000

Mi opinión sobre la pregunta original era que él preguntaba sobre los puertos no utilizados, no los puertos actualmente conectados a los servicios. Si este es el caso, no hay una forma específica de listarlos, aparte de listar los puertos usados y asumir que los otros están sin usar.

Un punto adicional a tener en cuenta: como usuario, no podrá abrir un puerto menor a 1024 (necesitará permisos de root para eso).

0
0
0
2019-01-16 19:51:05 +0000

Prueba

sudo netstat -plnt | grep -E '(0.0.0.0:|:::|127.0.0.1:|::1:)' | awk 'NR>2{print $7}' | sort -n | uniq

y mira esto.

0
0
0
2016-04-04 06:29:27 +0000

El siguiente comando funcionará en cualquier Unix que salga en el mismo formato que Ubuntu / Debian - donde la dirección local está en la columna 4 y la salida incluye un encabezado de 2 líneas en la parte superior. Si alguno de esos números es diferente, modifica el comando awk que aparece a continuación.

Si quieres sólo IPv4:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '0.0.0.0:' | sed 's/.*://' | sort -n | uniq

Si quieres sólo IPv6:

netstat -lnt | awk 'NR>2{print $4}' | grep -E ':::' | sed 's/.*://' | sort -n | uniq

Si quieres los dos juntos:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(0.0.0.0:|:::)' | sed 's/.*://' | sort -n | uniq

El comando produce una lista de números de puerto que están a la escucha en todas las interfaces. Si quiere listar todos los puertos que están a la escucha en la interfaz del host local, entonces use algo como esto:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(127.0.0.1:|::1:)' | sed 's/.*://' | sort -n | uniq