¿Cómo puedo saber si hay un puerto disponible en Ubuntu 8.04?

28

¿Hay algún comando que pueda ejecutar desde bash que me diga si un puerto ya está abierto?

Codebeef
fuente

Respuestas:

37

Use "netstat" para verificar el uso actual de puertos.

netstat -antp

Proto Recv-Q Send-Q Dirección local Dirección extranjera Estado PID / Nombre del programa
tcp 0 0 xxx.xxx.xxx.xxx 0.0.0.0:* ESCUCHAR 16297 / named     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297 / named     
tcp 0 0 xxx.xxx.xxx.xxx:53 0.0.0.0:* LISTEN 16297 / named     
tcp 0 0 127.0.0.1:53 0.0.0.0:* ESCUCHAR 16297 / named     
Oruga
fuente
2
"netstat -antp | grep 80" donde 80 es el número de puerto a buscar.
Umair A.
13

Esta (netstat) es la solución más rápida ...

netstat -lnt

... pero esto te da más control (a costa de la velocidad (a veces mucha velocidad)) ...

lsof -n -i -a -u www-data

El ejemplo anterior, por ejemplo, muestra todos los puertos TCP abiertos y en LISTENestado, Y ( -a) que pertenecen al www-datausuario Apache ( ).

Jerjes
fuente
8

Todas buenas respuestas.

Sin embargo, no menciona si ha iniciado sesión en la computadora en cuestión. ;PAGS

Si no, entonces nmap es tu amigo.

para empezar prueba:

nmap -Otarget

amap también es una buena opción que también intentará adivinar el software del servidor agarrando páginas de banner.

para empezar prueba:

amaptarget1-6000

Mateo
fuente
7

Tratar

lsof -i :<port number>

Si obtiene algún resultado, algo está escuchando y obligado, por ejemplo

# lsof -i :80
COMMAND   PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
nginx    1833 nobody    3u  IPv4 51091229      0t0  TCP odessa.cheney.net:http->79.173.188.214:52918 (ESTABLISHED)
nginx    1833 nobody    5u  IPv4 46221856      0t0  TCP odessa.cheney.net:http->66.36.243.182:37876 (CLOSE_WAIT)
nginx    1833 nobody    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx    1833 nobody   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)
nginx    1833 nobody   14u  IPv4 46221857      0t0  TCP odessa.cheney.net:http->66.36.243.182:37880 (CLOSE_WAIT)
nginx    1833 nobody   15u  IPv4 51091030      0t0  TCP odessa.cheney.net:http->msnbot-65-55-106-132.search.msn.com:51708 (ESTABLISHED)
nginx   11832   root    9u  IPv4 34733048      0t0  TCP localhost.localdomain:http (LISTEN)
nginx   11832   root   10u  IPv4 34733049      0t0  TCP odessa.cheney.net:http (LISTEN)
Dave Cheney
fuente
4
netstat -tlnp  

Muestra los tpuertos cp que se están lacelerando, muestra nsolo los números (no resuelve los nombres, hace que sea más rápido) y muestra el pproceso que está escuchando ( psolo funciona si eres root)

netstat -ulnp  

Muestra los upuertos dp que se están lacelerando, muestra nsolo los números (no resuelve los nombres, hace que sea más rápido) y muestra el pproceso que está escuchando ( psolo funciona si eres root)

netstat -unp  

Muestra los upuertos dp que están abiertos pero no escuchan, muestra nsolo los números (no resuelve los nombres, hace que sea más rápido) y muestra el pproceso que está escuchando ( psolo funciona si eres root)

netstat -an

Mostrar todos los apuertos en uso, mostrar nsolo los números: no resuelva los nombres

lsof -i <proto>@<host>:<port>

p.ej

lsof -i tcp@localhost:25

para ver si algo está escuchando en el puerto localhost 25 / TCP, o

lsof -i tcp@0.0.0.0:636 

para ver si hay algún enchufe local o remoto, ya sea escuchando (local) o conectado a (local o remoto) para cualquier host / interfaz

Jason Tan
fuente
2

lsof (lista de archivos abiertos) es una buena herramienta para ver si un proceso está escuchando en un puerto

lsof -P | grep: <número de puerto>

netstat es una buena herramienta para ver si hay alguna conexión activa.

netstat -n | grep: <número de puerto>

Jamie
fuente
2

No menciona qué protocolo desea utilizar, es decir, TCP o UDP, y también es importante darse cuenta de que el "puerto" no es tan granular que el sistema admite para desambiguar sockets. Por ejemplo, si su sistema tiene varias direcciones IP, entonces el puerto 80 podría estar en uso en todas las direcciones IP (ya sea que la aplicación esté vinculada a "0.0.0.0" o "::" o a cada dirección IP en sucesión), o podría estar en usar solo en un subconjunto de esas direcciones IP.

La mejor y más segura forma de determinar si un puerto / dirección es gratuito y está disponible es intentar enlazarlo. Netcat es útil para esto.

nc -l [-s abcd] -p NN

intentará enlazar con el puerto TCP NN activado (opcional, el valor predeterminado será todas las direcciones) abcd Agregue la opción -u para hacer lo mismo en UDP.

Luego, para saber si el puerto está realmente "abierto" como usted lo solicita, debe comenzar a buscar posibles reglas de firewall. Una vez más, lo más fácil es intentar conectarse al puerto. Use netcat como se indicó anteriormente, en el servidor, y desde un cliente use netcat para intentar conectarse al puerto que abrió.

nc [-u] abcd NN

se conectará al puerto NN en abcd, usando UDP si se especifica el indicador -u. Luego, puede escribir la entrada en el extremo del cliente, y debería aparecer en el servidor. Si no es así, debe buscar herramientas específicas del sistema y la red.

colmmacc
fuente
2

Yo uso fuser (en el paquete psmisc):

fuser -n tcp PORT

Trae de vuelta el pid de proceso vinculado a este puerto.

Si esto es para saber si un puerto está escuchando, el viejo telnet hace el truco :)

Telnet 127.0.0.1 PUERTO

oct
fuente
2

Esta línea le proporcionará una lista de todos los puertos TCP en uso. Funciona en bash en Ubuntu y OS X.

netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq

La lista tendrá un puerto por línea sin ninguna información adicional.

Josiah Johnston
fuente
¡Quiéralo! for port in $(netstat -ant | sed -e '/^tcp/ !d' -e 's/^[^ ]* *[^ ]* *[^ ]* *.*[\.:]\([0-9]*\) .*$/\1/' | sort -g | uniq); do echo EXECUTE COMMAND FOR PORT $port; done
gret visita los
0

Muchas formas de hacerlo me dieron problemas porque no funcionaban en Linux y OSX, y / o porque no mostraban los puertos utilizados por Docker, o los procesos que eran propiedad de root. Ahora solo uso este programa javascript:

(asegúrese de tener un nodo instalado y que funcione nodeno solo nodejso cambie el programa en consecuencia)

guarde lo siguiente en un archivo llamado check-porten su ruta o en su proyecto

#!/usr/bin/env node
var http = require('http');
var app = new http.Server();
app.listen(process.argv[2], () => {
  process.exit(0)
});

establecer permisos

chmod +x path/to/check-port

huye de tu camino

check-port 8080

o ejecutar desde el mismo directorio

./check-port 8080

Hasta ahora está funcionando bastante bien.

Alex028502
fuente