Pregunta Obtenga una lista de Puertos abiertos en Linux


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

lsof -i TCP| fgrep LISTEN

No se ve que ayude, ya que los puertos que enumera no son necesariamente gratuitos. ¿Cómo hago una lista de puertos abiertos que no están en uso?


151


origen


//, ¿Qué pasa si netstat no está disponible en el host? - Nathan Basanese


Respuestas:


netstat -lntu

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

  • -l = solo servicios que están escuchando en algún puerto
  • -n = mostrar el 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 solo le interesa saber qué puertos son libres y qué programa no se está ejecutando.

Sin embargo, esto solo muestra qué puertos de tu sistema están agotados. Esto no le dice el estado de su red, p. si está detrás de NAT y desea que algunos servicios sean accesibles desde afuera. O si el firewall está bloqueando el puerto para visitantes externos. En ese caso, nmap viene al rescate. ADVERTENCIA: use nmap solo en redes que estén bajo su control. Además, existen reglas de firewall que pueden bloquear los pings de nmap, tendrás que manipular las opciones para obtener los resultados correctos.


216



Tenga en cuenta que netstat está en desuso en muchos sistemas y ss debería usarse en su lugar. - Johu


Ya que net-tools es obsoleto, puedes usar el ss mando en lugar de netstat Si netstat no está presente en su 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

53





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

netstat -lnptu

a partir de ese momento puede filtrar los resultados según sus especificaciones exactas.

También podrías usar nmap para obtener resultados más detallados sobre los puertos.


19



El distintivo -p requiere privilegios de raíz para algunos procesos, por lo que sería sudo netstat -lnptu - klaus se


Todos los puertos abiertos, incluido el tráfico de respuesta:

netstat -tuwanp 2>/dev/null | awk '{print $4}' | sort | uniq -c | wc -l

4



Una lista de sólo números de puerto únicos y solo IPv4: netstat -tuwanp4 | awk '{print $4}' | grep ':' | cut -d ":" -f 2 | sort | uniq - Aaron C. de Bruyn
+1 para mostrar cómo filtrar y extraer los números del resultado. Editado para eliminar la salida de stderr de netstat (que agrega un encabezado al resultado en Ubuntu). - datashaman
Hmm, en segundos pensamientos. -1 por no responder la pregunta. - datashaman


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

Si solo quieres IPv4:

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

Si solo quieres IPv6:

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

Si quieres ambos juntos:

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

El comando genera una lista de números de puerto que están escuchando en todas las interfaces. Si desea enumerar todos los puertos que están escuchando en la interfaz localhost, utilice algo como esto:

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

0