netstat muestra un puerto de escucha sin pid pero lsof no

21

Esta pregunta es similar al puerto de red abierto, pero ¿no hay ningún proceso conectado?

He intentado todo desde allí, revisé los registros, etc. y no puedo encontrar nada.

Mi netstat muestra un puerto de escucha TCP y un puerto UDP sin un pid. Cuando busco lsof para esos puertos no aparece nada.

netstat -lntup
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:44231           0.0.0.0:*               LISTEN      -               
udp        0      0 0.0.0.0:55234           0.0.0.0:*                           - 

Los siguientes comandos no muestran nada:

lsof | grep 44231
lsof | greo 55234
fuser -n tcp 44231
fuser -n udp 55234

Después de reiniciar, esas "mismas" dos conexiones están allí excepto con nuevos números de puerto:

netstat -lntup
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:45082           0.0.0.0:*               LISTEN      -               
udp        0      0 0.0.0.0:37398           0.0.0.0:*                           - 

Y una vez más, los comandos lsof y fuser no muestran nada.

Alguna idea de lo que son? ¿Debería preocuparme por ellos?

fantasma
fuente

Respuestas:

11

De los datos que proporcionó, diría que está relacionado con algunos montajes de NFS o algo con RPC.

puede consultar los rpcinfo -ppuertos que podrían ser utilizados por algunos de los servicios relacionados con RPC.

Así es como se ve en mi sistema

# netstat -nlp | awk '{if ($NF == "-")print $0}'
tcp        0      0 0.0.0.0:55349           0.0.0.0:*               LISTEN      -               
udp        0      0 0.0.0.0:18049           0.0.0.0:*                           - 

# rpcinfo -p
   program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  10249  status
    100024    1   tcp  10249  status
    100021    1   udp  18049  nlockmgr
    100021    3   udp  18049  nlockmgr
    100021    4   udp  18049  nlockmgr
    100021    1   tcp  55349  nlockmgr
    100021    3   tcp  55349  nlockmgr
    100021    4   tcp  55349  nlockmgr
Hrvoje Špoljar
fuente
1
Si tiene este problema y quiere forzar a nlockmgr a usar puertos específicos, pruebe esta solución: fclose.com/39625/fixing-ports-used-by-nfs-server .
Ryan Walls
13

Algunos procesos / pids solo están disponibles para rootear. Tratar

sudo netstat -antlp

debería devolver el pid de cada puerto abierto que no esté en un estado TIME_WAIT

usuario1389651
fuente
2
cada puerto TCP abierto solo con este comando. Los puertos UDP no se mostrarán.
petrus
8

Basado en la sugerencia de @ user202173 y otros, he podido usar lo siguiente para rastrear el proceso que posee un puerto incluso cuando está listado como -en netstat.

Aquí estaba mi situación inicial. sudo netstatmuestra puerto con PID / Programa de -. lsof -ino muestra nada

$ sudo netstat -ltpna | awk 'NR==2 || /:8785/'
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 :::8785                 :::*                    LISTEN      -
tcp6       1      0 ::1:8785                ::1:45518               CLOSE_WAIT  -
$ sudo lsof -i :8785
$

Ahora vamos a pescar. Primero obtengamos el inodo agregando -ea nuestra netstatllamada.

$ sudo netstat -ltpnae | awk 'NR==2 || /:8785/'
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode       PID/Program name
tcp6       0      0 :::8785                 :::*                    LISTEN      199179     212698803   -
tcp6       1      0 ::1:8785                ::1:45518               CLOSE_WAIT  0          0           -

Siguiente uso lsofpara obtener el proceso adjunto a ese inodo.

$ sudo lsof | awk 'NR==1 || /212698803/'
COMMAND      PID    TID                USER   FD      TYPE             DEVICE   SIZE/OFF       NODE NAME
envelope_ 145661 145766               drees   15u     IPv6          212698803        0t0        TCP *:8785 (LISTEN)

Ahora conocemos la identificación del proceso para poder ver el proceso. Y desafortunadamente es un proceso difunto. Y su PPID es 1, por lo que tampoco podemos matar a su padre (consulte ¿Cómo puedo matar un proceso cuyo padre es init? ). En teoría, init podría eventualmente limpiarlo, pero me cansé de esperar y reinicié.

$ ps -lf -p 145661
F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
0 Z drees    145661      1  2  80   0 -     0 exit   May01 ?        00:40:10 [envelope] <defunct>
studgeek
fuente
1
He estado buscando esta solución durante meses. gracias por esta joya
Prasad manish
He estado buscando una solución como esta durante años. ¡Gracias! Una de las desventajas aquí es que si un cliente o servidor NFS está bloqueado, entonces lsof | awk 'NR==1 || /212698803/'(incluso lsof -Npara mostrar solo NFS) puede ser muy lento para responder y puede agotar el tiempo de espera. Otro inconveniente es que el inodo puede cambiar mientras está solucionando esto.
Stefan Lasiewski
4

No sé cuáles son estos específicamente, pero los módulos del núcleo (NFS, por ejemplo) no tienen un PID para asociar con estos sockets. Busca algo sospechoso en lsmod.

andyortlieb
fuente
lsmod no devuelve nada. Este servidor es un cliente NFS. Ese es actualmente mi sospechoso # 1.
fantasma
Eso explicaría por qué los puertos del cliente han cambiado después de una nueva instancia del núcleo.
andyortlieb
No debería haber sido rechazado ya que esta es una respuesta totalmente legítima. Me ayudó a encontrar un caso en el que las otras respuestas (usando rpcbind o lsof) no ayudaron. (Y sí, era NFS). ¡Gracias!
Peter Hansen el
Hmm, me pregunto por qué no asigna un PID al cliente NFS solo para que puedas ver qué pasa con eso ... Supongo que eso requeriría tener un subproceso de trabajo o algo así.
SamB
3

No sé si esto puede ser útil. Tuve el mismo problema y lo que hice es lo siguiente: Primero, llamé a netstat con las opciones -a (todas) y -e (extendida). Con la última opción puedo ver el Inode asociado al puerto utilizado. Luego, llamé a lsof | grep con el número de inodo obtenido y obtuve el PID del proceso asociado a ese inodo. Eso funcionó en mi caso.

usuario202173
fuente
0

¿Hay algún tráfico entrando o saliendo de este puerto? Compruebe que con tcpdump -vv -x s 1500 port 37398 -w trace.outGuarde su captura en el archivo trace.out, luego puede abrirlo con wireshark o tcpdump -vv port 37398ver qué sucede directamente.

Intente telnet a ese puerto, use netcat para el socket udp, tal vez obtenga algún tipo de banner que ayude.

Obtenga rkhunter y verifique que su sistema no tenga una puerta trasera.

Compare el hash md5 de lsof / netstat con el de su medio de instalación, suponiendo que los archivos no estén actualizados.

Izac
fuente
Intenté netcat localmente a ambos puertos y no muestra nada. Para el puerto tcp, se cierra si escribo algo y luego ingreso. El UDP solo se cierra si presiono Ctrl + C. Tengo iptables en su lugar, y no permite conexiones a esos puertos, así que a menos que pasen por alto iptables, no puedo imaginar que algo se esté conectando a ellos.
fantasma
¿Qué tipo de servidor es DB, APP ... qué software está utilizando?
Izac
Es un servidor web que ejecuta Apache y prácticamente nada más que cosas como cron y syslog.
fantasma