¿Hay algún comando que pueda ejecutar desde bash que me diga si un puerto ya está abierto?
28
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
Esta (netstat) es la solución más rápida ...
... pero esto te da más control (a costa de la velocidad (a veces mucha velocidad)) ...
El ejemplo anterior, por ejemplo, muestra todos los puertos TCP abiertos y en
LISTEN
estado, Y (-a
) que pertenecen alwww-data
usuario Apache ( ).fuente
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 -O
target
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:
amap
target
1-6000
fuente
Tratar
Si obtiene algún resultado, algo está escuchando y obligado, por ejemplo
fuente
Muestra los
t
puertos cp que se estánl
acelerando, muestran
solo los números (no resuelve los nombres, hace que sea más rápido) y muestra elp
proceso que está escuchando (p
solo funciona si eres root)Muestra los
u
puertos dp que se estánl
acelerando, muestran
solo los números (no resuelve los nombres, hace que sea más rápido) y muestra elp
proceso que está escuchando (p
solo funciona si eres root)Muestra los
u
puertos dp que están abiertos pero no escuchan, muestran
solo los números (no resuelve los nombres, hace que sea más rápido) y muestra elp
proceso que está escuchando (p
solo funciona si eres root)Mostrar todos los
a
puertos en uso, mostrarn
solo los números: no resuelva los nombresp.ej
para ver si algo está escuchando en el puerto localhost 25 / TCP, o
para ver si hay algún enchufe local o remoto, ya sea escuchando (local) o conectado a (local o remoto) para cualquier host / interfaz
fuente
lsof (lista de archivos abiertos) es una buena herramienta para ver si un proceso está escuchando en un puerto
netstat es una buena herramienta para ver si hay alguna conexión activa.
fuente
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.
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.
fuente
Yo uso fuser (en el paquete psmisc):
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 :)
fuente
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.
fuente
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
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
node
no solonodejs
o cambie el programa en consecuencia)guarde lo siguiente en un archivo llamado
check-port
en su ruta o en su proyectoestablecer permisos
huye de tu camino
o ejecutar desde el mismo directorio
Hasta ahora está funcionando bastante bien.
fuente