2009-05-08 12 views

risposta

16

aprire e leggere il seguente:

/proc/net/tcp - una lista di socket TCP aperte

/proc/net/udp - un elenco di socket UDP aperte

/proc/net/raw - un elenco tutte le prese "raw"

Questi sono come file "normali" che si aprono e si leggono con un filehandle e ti fornirà tutte le informazioni che potresti avere su ogni socket.

+3

anche/proc/net/unix elenca i socket di dominio Unix. – zoom23

0

I dati grezzi possono essere trovati in/proc/net/tcp,/proc/net/udp, ecc. Fare riferimento all'intestazione nella prima riga per una descrizione (tersa).

3

In directory/proc/self/fd ci sono link simbolici falsi dandovi tutti i descrittori di file aperti - prese di dare qualcosa di simile:

lrwx------ 1 root root 64 2009-05-08 07:45 4 -> socket:[4921] 
lrwx------ 1 root root 64 2009-05-08 07:45 5 -> socket:[4918] 
lrwx------ 1 root root 64 2009-05-08 07:45 6 -> socket:[5395] 

Iterate utilizzando opendir, readdir() e poi interrogarli utilizzando readlink()

Se si sa che FD 4 è un socket, è possibile chiamare getsockname() su di esso per ottenere la famiglia di indirizzo locale, l'indirizzo ecc., Se associato.

+0

Questo non funziona per tutti i socket. Per lo più, vedo i miei terminali qui. Con più connessioni aperte, non tutte le prese sono visibili. Buono strumento non-meno di avere in aggiunta a ciò che Shane Mason ha notato. Grazie. –

4

Questo programma può essere utile per voi e dimostra come analizzare i/net/proc/* file sockstat.c

+0

Grazie per l'esempio. Stavo per passare attraverso/proc/self/fd e controllare quali collegamenti sono socket e generare l'elenco in questo modo. Pubblicherò un aggiornamento con la mia soluzione qui. Grazie ancora –

+0

Link sembra non funzionare più, anche se le ricerche di google ne trova diverse copie. –

Problemi correlati