¿Cómo saber qué programa está escuchando en un puerto determinado?

290

Sospecho que un programa está escuchando en el puerto 8000 en mi máquina.

Cuando ejecuto el siguiente comando, aparece este error:

> python -m SimpleHTTPServer
# Lots of python error
socket.error: [Errno 98] Address already in use

Si uso otro puerto ( 8000 es el predeterminado), el servidor web funciona bien.

Si ejecuto wget localhost:8000 desde la línea de comandos, devuelve 404 Not Found .

¿Qué puedo hacer (o qué herramientas están disponibles) para encontrar qué programa está escuchando en el puerto 8000 y desde allí donde está configurado ese programa?

    
pregunta yansal 06.04.2013 - 10:36

6 respuestas

184

Abre tu terminal y escribe como

lsof -i :8000

ese comando mostrará una lista de la aplicación utilizada por ese puerto con PID. (Si no se ejecutan los resultados a través de sudo ya que es posible que no tenga permiso para ciertos procesos).

Por ejemplo, con el puerto 8000 ( python3 -m http.server ):

$ lsof -i :8000
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
python3 3269 user    3u  IPv4 1783216      0t0  TCP *:8000 (LISTEN)

Y el puerto 22 (SSH):

$ sudo lsof -i :22
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd     998 root    3u  IPv4 1442116      0t0  TCP *:ssh (LISTEN)
sshd     998 root    4u  IPv6 1442118      0t0  TCP *:ssh (LISTEN)

Espero que ayude.

    
respondido por el Ten-Coin 06.04.2013 - 10:50
328

Puede usar netstat para ver qué proceso está escuchando en qué puerto.

Puede usar este comando para tener un detalle completo:

sudo netstat -peanut

si necesita saber exactamente cuál está escuchando en el puerto 8000, puede usar esto:

sudo netstat -peanut | grep ":8000 "

No hay ningún proceso que pueda ocultarse desde netstat.

    
respondido por el Antoine Rodriguez 06.04.2013 - 10:58
163

Para explicar la respuesta por @ 33833, puede obtener información muy detallada, por ejemplo:

$ lsof -i :8000
COMMAND  PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
squid3  1289 proxy   15u  IPv6 14810490      0t0  TCP *:8000 (LISTEN)

$ ps -fp 1289
UID        PID  PPID  C STIME TTY          TIME CMD
proxy     1289     1  0 09:48 ?        00:00:00 /usr/sbin/squid3 -N -f /etc/squid-deb-proxy/squid-deb-proxy.conf

Veo que el calamar es el proceso, pero en realidad es mi squid-deb-proxy el que está ocupando el puerto.

Otro buen ejemplo de una aplicación java:

$ lsof -i :4242
COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
java    3075 root   86u  IPv4    12019      0t0  TCP *:4242 (LISTEN)

$ ps -fp 3075
UID        PID  PPID  C STIME TTY          TIME CMD
root      3075     1 15 May24 ?        3-16:07:25 /usr/local/crashplan/jre/bin/java -Dfile.encoding=UTF-8 -Dapp=CrashPlanService -DappBaseName=CrashPl

Puede ver en lsof (LiSt Open Files) que es java, que no es útil. Al ejecutar el comando ps con el PID, podemos ver de inmediato que es CrashPlan.

    
respondido por el Andrew Burns 17.06.2014 - 17:55
10

Pruebe ss desde iproute2 paquete:

ss -nlp | grep 8000
    
respondido por el korjjj 06.04.2013 - 10:44
5

Otra forma de usar socklist del paquete procinfo :

man socklist

  

DESCRIPCIÓN
socklist es un script Perl que le proporciona una lista de todos los sockets abiertos, tipos de enumeración, puerto,          inode, uid, pid, fd y el programa al que pertenece.

sudo socklist

type  port      inode     uid    pid   fd  name
tcp     53      28749       0   1721    5  dnsmasq
tcp    631      29190       0   2433   11  cupsd
tcp  42376      82230    1000   1345   84  firefox
tcp  49048      71686    1000   1345   67  firefox
tcp  41248      81672    1000   1345  119  firefox
tcp  54676      84558    1000   1345   73  firefox
udp  56107      66258       0   3268   20  dhclient
udp  40804      17857     107    679   14  avahi-daemon
udp     53      28748       0   1721    4  dnsmasq
udp     68      67427       0   3268    6  dhclient
udp    631      19692       0    765    8  cups-browsed
udp   5353      17855     107    679   12  avahi-daemon
    
respondido por el user.dz 29.06.2015 - 12:23
2

Puedes usar nmap.

  

Es muy importante saber qué puertos están abiertos en tu PC, esto   no solo es útil para Linux, sino también para otros sistemas operativos,   Linux tiene muchas herramientas para verificar qué puertos están abiertos, la mayoría   común es nmap que es una herramienta de línea de comandos, pero también existe una   Delantera gráfica Para terminar, si lo prefieres. 1

para instalarlo, simplemente presione Ctrl + Alt + T en su teclado para abrir Terminal. Cuando se abra, ejecute el siguiente comando:

sudo apt-get install nmap

Para obtener más información sobre nmap y otras utilidades, vaya a Aquí

1 Fuente: garron.me

    
respondido por el Mitch 06.04.2013 - 10:46

Lea otras preguntas en las etiquetas