2013-07-08 10 views
11

Il mio programma si apre un socket con questa funzione:controllo tutto lo zoccolo aperto nel sistema operativo Linux

sockfd = socket (AF_INET, SOCK_RAW, IPPROTO_ICMP)

Dopo che i dati finitura inviare il socket viene chiuso:

close (sockfd);

Ma il problema è quando il programma non funziona bene e sta bloccando. In tal modo la presa non sarà chiusa.

Come posso controllare tutti i socket aperti con il SO Linux?

+2

chiedere un elenco dei "file" aperti lsof – doctorlove

+0

Se è necessario gestire nel codice, si dovrebbe mantenere una lista di socket validi e vicino in caso di necessità. – VoidPointer

+0

Poco fuori tema, dovresti controllare il valore di socketfd (restituito dal socket) per una migliore gestione degli errori. –

risposta

20

/proc/net list/tcp -a di socket TCP aperte

/proc/net list/UDP -a di socket UDP aperte

/proc/net list/raw -a tutti le prese "raw"

Questi sono i file, utilizzare il comando cat per visualizzarli. Per esempio:

cat /proc/net/tcp

È anche possibile utilizzare il comando lsof.

lsof è un comando che significa "Lista file aperti", che viene utilizzato in molti sistemi Unix-like segnalare un elenco di tutti i file aperti ei processi che li riaprì.

+2

questi comandi non funzionano in ubuntu (Ubuntu/Linaro 4.6.1-9ubuntu3)) ===> ** root @ root:/home/aa/test #/proc/net/** ::::: ** dev_snmp6/netfilter/rpc/stat/** –

+2

questi sono file, usa il comando cat per visualizzare, come 'cat/proc/net/tcp' –

+0

Di solito è più semplice usare 'lsof' invece di questi. – Hasturkun

10

È possibile utilizzare netstat comando

netstat --listen

Per visualizzare le porte aperte e le connessioni TCP stabilite,

netstat -vatn

per visualizzare solo le porte UDP aperte cercano il seguente comando:

netstat -vaun

+0

I socket ICMP RAW non vengono visualizzati in netstat sul mio sistema. Risposta di Chankeys per me su CentOS 'cat/proc/net/raw' – Tricky

+0

@tricky Questo perché devi usare * netstat -w -l *, o meglio ancora * ss -w -l *. Questi comandi mostreranno * ascolto * socket non elaborati. Se vuoi maggiori informazioni, usa per esempio * ss -w -lnp *. – MariusMatutiae

15

Inoltre è possibile utilizzare ss utility per eseguire il dump statistiche prese.

a discarica sintesi:

ss -s 

Total: 91 (kernel 0) 
TCP: 18 (estab 11, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0 

Transport Total  IP  IPv6 
*   0   -   -   
RAW  0   0   0   
UDP  4   2   2   
TCP  18  16  2   
INET  22  18  4   
FRAG  0   0   0 

Per visualizzare tutti i socket:

ss -a 

per visualizzare i socket UDP:

ss -u -a 

per visualizzare i socket TCP:

ss -t -a 

Qui potete leggere ss uomo: ss

Problemi correlati