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

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 errorsocket.error: [Errno 98] Address already in use

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

Si corro 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 a partir de ahí donde se configura ese programa?

Abra su terminal y escriba como

lsof -i :8000

ese comando le mostrará la aplicación utilizada por ese puerto con PID.(Si no hay resultados, ejecute via sudo ya que es posible que no tenga permiso para ciertos procesos.)

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

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

Y el puerto 22 (SSH):

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

Espero que eso ayude.

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 de Netstat.

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

$ lsof -i :8000COMMAND  PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAMEsquid3  1289 proxy   15u  IPv6 14810490      0t0  TCP *:8000 (LISTEN)$ ps -fp 1289UID        PID  PPID  C STIME TTY          TIME CMDproxy     1289     1  0 09:48 ?        00:00:00 /usr/sbin/squid3 -N -f /etc/squid-deb-proxy/squid-deb-proxy.conf

Puedo ver ahí mismo que el calamar es el proceso, pero en realidad es mi squid-deb-proxy eso es ocupar el puerto.

Otro buen ejemplo de una aplicación java:

$ lsof -i :4242COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAMEjava    3075 root   86u  IPv4    12019      0t0  TCP *:4242 (LISTEN)$ ps -fp 3075UID        PID  PPID  C STIME TTY          TIME CMDroot      3075     1 15 May24 ?        3-16:07:25 /usr/local/crashplan/jre/bin/java -Dfile.encoding=UTF-8 -Dapp=CrashPlanService -DappBaseName=CrashPl

Se puede ver en lsof (Enumere los archivos abiertos) que es Java, lo cual es menos que útil. Ejecutando el ps comando con el PID podemos ver enseguida que es CrashPlan.

Tratar ss de iproute2 paquete:

ss -nlp | grep 8000

Otra forma de usar socklist de procinfo paquete:

man socklist

descripción
socklist es un script de Perl que le proporciona una lista de todos los sockets abiertos, enumerando los tipos, el puerto, el inodo, el uid, el pid, el fd y el programa al que pertenece.

sudo socklist

type  port      inode     uid    pid   fd  nametcp     53      28749       0   1721    5  dnsmasqtcp    631      29190       0   2433   11  cupsdtcp  42376      82230    1000   1345   84  firefoxtcp  49048      71686    1000   1345   67  firefoxtcp  41248      81672    1000   1345  119  firefoxtcp  54676      84558    1000   1345   73  firefoxudp  56107      66258       0   3268   20  dhclientudp  40804      17857     107    679   14  avahi-daemonudp     53      28748       0   1721    4  dnsmasqudp     68      67427       0   3268    6  dhclientudp    631      19692       0    765    8  cups-browsedudp   5353      17855     107    679   12  avahi-daemon

Debido al bajo nivel de la comunidad, no puedo comentar aquí. Sin sudo todos los comandos anteriores no le proporcionarán Id de proceso / Nombre de programa.

Por lo tanto, necesita las siguientes cosas:

sudo lsof -i :8000

o

sudo netstat -lntup

puede verificar esos detalles de comando a través de man, help o mi ayudante favorito

Puedes usar nmap.

Es realmente importante saber qué puertos están abiertos en su 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 más común es nmap, que es una herramienta de línea de comandos, pero también existe una interfaz gráfica si lo prefiere de esa manera.1

para instalarlo, simplemente presione Ctrl+Alt+T en el 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 Aqui

1Fuente:garron.me

Aquí hay un comando fácil de recordar

ss -townlup Netid               State                 Recv-Q                Send-Q                                    Local Address:Port                               Peer Address:Porticmp6               UNCONN                0                     0                                                *%eth0:58                                            *:*udp                 UNCONN                0                     0                                         127.0.0.53%lo:53                                      0.0.0.0:*udp                 UNCONN                0                     0                                     172.31.26.71%eth0:68                                      0.0.0.0:*tcp                 LISTEN                0                     128                                             0.0.0.0:22                                      0.0.0.0:*tcp                 LISTEN                0                     128                                             0.0.0.0:443                                     0.0.0.0:*tcp                 LISTEN                0                     128                                       127.0.0.53%lo:53                                      0.0.0.0:*tcp                 LISTEN                0                     128                                                [::]:22                                         [::]:*tcp                 LISTEN                0                     128                                                [::]:443                                        [::]:*tcp                 LISTEN                0                     100                                                   *:9090                                          *:*                    users:(("java",pid=13008,fd=16))tcp                 LISTEN                0                     100                                                   *:8080                                          *:*                    users:(("java",pid=11556,fd=12))