2009-05-08 14 views

Répondre

16

Ouvrir et lire ce qui suit:

/proc/net/tcp - une liste des sockets TCP ouverts

/proc/net/udp - une liste des sockets UDP ouverts

/proc/net/raw - une liste tous les Sockets "raw"

Ce sont comme des fichiers "ordinaires" que vous ouvrez et lisez avec un filehandle et vous donnera toutes les informations dont vous pourriez avoir besoin sur chaque socket.

+3

aussi/proc/net/liste unix les sockets de domaine unix. – zoom23

0

Les données brutes peuvent être trouvées dans/proc/net/tcp,/proc/net/udp, etc. Reportez-vous à l'en-tête à la première ligne pour une description (laconique).

3

Dans le répertoire/proc/self/fd il y a des liens symboliques faux en vous donnant tous les descripteurs de fichiers ouverts - prises donnent quelque chose comme:

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] 

itérer les utiliser opendir, readdir(), puis les interroger à l'aide readlink (

Si vous savez que FD 4 est une socket, vous pouvez alors appeler getsockname() pour obtenir la famille d'adresses locale, l'adresse, etc., si elle est liée.

+0

Cela ne fonctionne pas pour toutes les sockets. Surtout, je vois mes terminaux ici. Avec plusieurs connexions ouvertes, toutes les prises ne sont pas visibles. Bon outil non-moins à avoir en plus de ce que Shane Mason a noté. Je vous remercie. –

4

Ce programme peut être utile pour vous et montre comment analyser les fichiers/net/proc/* sockstat.c

+0

Merci pour l'exemple. J'allais simplement passer par/proc/self/fd et vérifier quels liens sont des sockets et générer la liste de cette façon. Je posterai une mise à jour avec ma solution ici. Merci encore –

+0

Le lien semble ne plus fonctionner, même si google recherche en trouve plusieurs copies. –

Questions connexes