¿Cómo saber qué servicio está escuchando en un puerto específico de un servidor Ubuntu sin identificación de proceso?

¿Cómo saber qué servicio está escuchando en un puerto específico de un servidor Ubuntu sin identificación de proceso?

Decidí publicar esta pregunta a pesar de que hay muchas preguntas similares, pero ninguna respondió la mía.

  1. Compruebo periódicamente los puertos que escucha mi servidor.
  2. Mi sistema operativo ubuntu por la salida de lsb_relase -a:
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.3 LTS
Release:    20.04
Codename:   focal
  1. Ejecuto el comando netstat -tulpn4y el resultado muestra un puerto desconocido:
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      580/systemd-resolve 
tcp        0      0 0.0.0.0:62176           0.0.0.0:*               LISTEN      900/sshd: /usr/sbin 
tcp        0      0 0.0.0.0:1122            0.0.0.0:*               LISTEN      1158/sshd: username    
tcp        0      0 0.0.0.0:3333            0.0.0.0:*               LISTEN      1158/sshd: username    
udp        0      0 0.0.0.0:51820           0.0.0.0:*                           -                   
udp        0      0 127.0.0.53:53           0.0.0.0:*                           580/systemd-resolve 
udp        0      0 X.X.X.X:1194           0.0.0.0:*                           870/openvpn         
  1. He utilizado muchas herramientas y guías para descubrir por qué mi servidor escucha en el puerto 51820sin encontrar una respuesta.
  2. Yo he tratado:
    • sudo lsof -i :51820- y obtuve una salida vacía.
    • sudo netstat -ltnp | grep -w ':51820'- y obtuve una salida vacía.
    • sudo fuser 51820/udp- y obtuve una salida vacía.
    • sudo netstat -peanut | grep ":51820"- la salida es:
udp        0      0 0.0.0.0:51820           0.0.0.0:*                           0          26262      -                   
udp6       0      0 :::51820                :::*                                0          26263      - 
  • sudo ss -nlp | grep 51820la salida es:
udp     UNCONN   0        0                                             0.0.0.0:51820                                             0.0.0.0:*                                                                                                     
udp     UNCONN   0        0                                                [::]:51820                                                [::]:*  
  1. He mirado las siguientes respuestas y no encontré una solución:

Después de buscar en la web sobre el puerto, 51820descubrí que es el "wireguard" que instalé el que está escuchando en ese puerto, pero la pregunta sigue siendo la misma, ya que en cualquier comando que probé no pude descubrirlo.

Respuesta1

Está ejecutando un sistema operativo que implementa Wireguard como un módulo del kernel. Su kernel está escuchando en este puerto y, dado que no hay ningún proceso que posea ese socket, no se informa ningún PID netstat.

Respuesta2

General:

Después de una búsqueda de dos días sobre el problema, descubrí, como Michael Hampton y Peter Zhabin, que no existe ninguna solución que muestre una identificación de proceso del kernel a través de un puerto de escucha.

Además, durante esos dos días busqué también algunas commands combinaciones que pudieran dar la respuesta deseada y no encontré ninguna forma sencilla o conveniente de hacerlo.

La solución que creé es preliminar y estoy seguro de que los miembros de la comunidad pueden mejorarla.

Descuentos por localizar el proceso

  • El proceso se ejecuta en el nivel del kernel o en cualquier otro nivel que evite que el proceso tenga una identificación (PID).
  • La identificación del proceso o el programa del proceso no se encontró en la salida de los comandos dados: lsof, netstat, ss, fuser.
  • Encontramos un puerto de escucha a partir del resultado de los comandos anteriores, pero no podemos configurar el programa o el pid que provoca la escucha.

Acerca de grep:

Usaremos greppara encontrar más información sobre el puerto abierto.

grep- imprimir líneas que coincidan con los patrones.

Desde grepla página de manual mediante man grepcomando.

DESCRIPTION
grep  searches  for  PATTERNS  in  each  FILE.  PATTERNS is one or more
       patterns separated by newline characters, and  grep  prints  each  line
       that  matches a pattern.  Typically PATTERNS should be quoted when grep
       is used in a shell command.
  • AquíEs un gran tema sobre cómo utilizar el comando de forma correcta y eficaz.

Cómo localizar el PID o el programa que utiliza el puerto dado a través de grep:

En mi caso, la ejecución sudo grep --exclude-dir={sys,proc} -rnw / -e 51820 | grep -i portresolvió el problema y mostró mucha información sobre el programa que usa el puerto.

La salida dada:

iptables.service:6:ExecStart=/usr/sbin/iptables -I INPUT -p udp --dport 51820 -j ACCEPT
/home/username/wireguard-install.sh:238:    read -p "Port [51820]: " port
/home/username/wireguard-install.sh:241:        read -p "Port [51820]: " port
/home/username/wireguard-install.sh:243:    [[ -z "$port" ]] && port="51820"
/usr/share/doc/netplan/examples/wireguard.yaml:9:      port: 51820
/etc/wireguard/wg0.conf:8:ListenPort = 51820
/etc/systemd/system/wg-iptables.service:6:ExecStart=/usr/sbin/iptables -I INPUT -p udp --dport 51820 -j ACCEPT
/etc/systemd/system/wg-iptables.service:10:ExecStop=/usr/sbin/iptables -D INPUT -p udp --dport 51820 -j ACCEPT

La razón de tantos indicadores es que otras combinaciones que he probado tenían una gran cantidad de resultados no deseados.

grepQué significan los argumentos de mando:

  • --exclude-dir- Omita cualquier directorio de línea de comandos con un sufijo de nombre que coincida con el patrón.

sysY procdirectorios e ignorancia específicos.en nuestro caso específico es evitar resultados no deseados.

Ejemplo: grep --exclude-dir={dir1,dir2}evitará dir1 y dir2 durante la búsqueda.

  • -ro -Res recursivo.
  • -nes el número de línea.
  • -wsignifica coincidir con la palabra completa.
  • /representa el directorio "más alto" para iniciar la búsqueda de arriba a abajo.
  • -e- es el patrón utilizado durante la búsqueda.
  • 51820en nuestro caso específico es el número de puerto que encontró uno de los comandos de monitoreo de red anteriores.
  • |- es la tubería para redirigir la salida de la primera parte del comando a la segunda.

En nuestro caso: redirigir sudo grep --exclude-dir={sys,proc} -rnw / -e 51820la salida al siguiente comandogrep -i port

  • -i- Ignore las distinciones entre mayúsculas y minúsculas en patrones y datos de entrada, de modo que los caracteres que difieren sólo en mayúsculas y minúsculas coincidan entre sí.
  • port- Encontrado con el fin de acotar los resultados al propósito para el que realizamos la búsqueda, encontrando más información sobre el puerto específico que se definió después de la -ebandera.

Consejos:

  • Haga que el escaneo sea lo más grande posible en los primeros pasos comenzando desde el /directorio y usando indicadores mínimos para filtrar la salida, para asegurarse de que no se pierda ningún detalle que podamos lograr.
  • Después de encontrar el resultado deseado o de tener problemas para encontrar el resultado deseado debido a una gran cantidad de resultados no deseados, comience a agregar indicadores uno por uno.
  • Especifique el número de puerto como patrón; después de todo, este es nuestro punto de partida y nuestro objetivo final.
  • Utilice comandos dobles grepque redirijan el primer escaneo al portfiltro de patrón, puede identificarnos y acelerar la solución; después de todo, estamos buscando un número como patrón y esto puede generar muchos resultados no deseados.
  • Si no puede llegar a conclusiones con el resultado proporcionado, realice una búsqueda en la web con las palabras clave elegidas que haya encontrado.

información relacionada