Respuestas:
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 ...
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 LISTEN
estado, Y ( -a
) que pertenecen al www-data
usuario Apache ( ).
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
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)
netstat -tlnp
Muestra los t
puertos cp que se están l
acelerando, muestra n
solo los números (no resuelve los nombres, hace que sea más rápido) y muestra el p
proceso que está escuchando ( p
solo funciona si eres root)
netstat -ulnp
Muestra los u
puertos dp que se están l
acelerando, muestra n
solo los números (no resuelve los nombres, hace que sea más rápido) y muestra el p
proceso que está escuchando ( p
solo funciona si eres root)
netstat -unp
Muestra los u
puertos dp que están abiertos pero no escuchan, muestra n
solo los números (no resuelve los nombres, hace que sea más rápido) y muestra el p
proceso que está escuchando ( p
solo funciona si eres root)
netstat -an
Mostrar todos los a
puertos en uso, mostrar n
solo 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
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.
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.
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 solo nodejs
o cambie el programa en consecuencia)
guarde lo siguiente en un archivo llamado check-port
en 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.