netstat -ntap non mostra il nome pid / process per alcune connessioni?


10

Ho un server ubuntu / hardy, con kernel 2.6.24-23-server e netstat:

# netstat --version
net-tools 1.60
netstat 1.42 (2001-04-15)

Il problema è che abbiamo molte connessioni STABILITE che non mostrano PID né nome del programma in netstat -ntapuscita. Netstat è stato chiamato da root, non ci sono chroot, grsecurity, né niente del genere (o almeno così mi è stato detto :).

Qualche idea su cosa potrebbe essere sbagliato?

AGGIORNARE

lsof -n -i funziona bene e mostra il nome pid / processo per le connessioni.


2
Sei sicuro di eseguirlo come root o con sudo?
— Dom

Sì, è stato eseguito su root e persino su root tramite sudo. stesso effetto.

Sei sicuro di non fare netstat -ntapinvece netstat ntap?
— Kyle Brandt,

Sono sicuro che stavo facendo netstat -ntap- proprio come ho scritto. poiché questo è il modo in cui vengono fornite le opzioni a netstat secondo la sua pagina man.

Nota a margine: ho appena controllato e sembra che netstat non riconosca le opzioni fornite senza "-".

Risposte:


4

Ciò si verificherà con processi del kernel come NFS, ma occasionalmente si verifica anche con app normali: RHEL 5 ha lo stesso comportamento.

# netstat -taupen | grep 30715
tcp        0      0 0.0.0.0:30715           0.0.0.0:*               LISTEN      66558      81467710   - 

Si noti che lsof, d'altra parte, le parole correttamente:

# lsof -i:30715
AppName 1598 useracct   78u     IPv4           81467710                   TCP *:30715 (LISTEN)

3
198_141:~ # netstat  -anp|grep 33000
tcp        0      0 0.0.0.0:53000           0.0.0.0:*               LISTEN       -                   
198_141:~ # lsof -i:33000
COMMAND   PID USER   FD   TYPE     DEVICE SIZE NODE NAME
vsftpd  28147 root    3u  IPv4 4089990174       TCP *:33000 (LISTEN)
198_141:~ # id
uid=0(root) gid=100(users) groups=16(dialout),100(users)
198_141:~ # 

nel mio caso, ci potrebbero essere due situazioni:

1) l'utente con privilegi normali non può vedere "netstat" quei processi avviati da root

2) alcuni processi vengono eseguiti nel kernel


1

Per le connessioni stabilite, questo dovrebbe succedere solo per le connessioni che sono iniziate dallo spazio del kernel, come NFS o DRBD. Ovviamente le connessioni in attesa avrebbero potuto far morire il processo sotto di loro. Se non riesci a capire cosa sta causando una determinata connessione, incolla l'output e qualcuno può dirti di cosa si tratta.


Queste non sono sicuramente connessioni basate sul kernel in quanto si tratta di connessioni al database dall'applicazione.

Output di netstat -atnp | grep EST?
— womble

questo è il mio problema: le connessioni sono elencate in base al nome pid / programma che ho "-"

3
E mi piacerebbe vedere cosa sta realmente accadendo, piuttosto che una sua interpretazione.
— womble

Non posso mostrare l'intero output in quanto contiene nomi che potrebbero essere utilizzati per identificare l'ambiente. la linea per questa porta particolare è simile alla seguente: "tcp 0 0 localhost: 36949 localhost: 6543 STABILITO -"

1

Ho lo stesso comportamento e la mia ipotesi è che il comportamento di netstat potrebbe essere cambiato. Ad esempio, vedo la porta e il programma per "wget", ma non per i processi PHP di Apache, che sono i più importanti per me.

Soluzione alternativa: ho riscritto il mio script per utilizzare invece lsof (vedere il suggerimento sopra)


Pascal: hai eseguito questo comando con sudo o come root?
— Stefan Lasiewski,

0

Arrivo qui perché in questi giorni ho incontrato la stessa domanda su Ubuntu 18.04 LTS (netstat è la stessa versione netstat 1.42 (2001-04-15)), strano ancora nessuna risposta dopo 8 anni. Dopo aver cercato il codice sorgente di net-tools, potrei trovarlo.

Nel codice sorgente netstat:

  1. tutte le cartelle di processo in / proc sono ripetute, ogni directory fd in / proc // fd viene controllata per costruire una mappa dall'inode socket al pid / progname.

  2. quindi / proc / net / tcp viene controllato per ottenere informazioni sul socket tcp (dalla funzione tcp_info), incluso l'inode del socket.

  3. quando si trasmettono le informazioni sul socket tcp, il pid / progname viene interrogato dalla mappa nel passaggio 1 tramite l'inode del socket. se non viene trovato nulla, "-" viene visualizzato.

Se il socket viene creato dopo la creazione della mappa, il pid / progname non verrà trovato nella mappa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.