OVH Cloud OVH Cloud

lsof et sockets unix

12 réponses
Avatar
Vincent Bernat
Coucou !

Avec lsof, si je cherche les occurrences d'une socket unix, j'obtiens
des lignes comme ceci :

slapd 11285 root 275u unix 0xcb942460 121763703 /var/run/ldapi

Je sais donc que slapd écoute sur cette socket (et "sert" une
connexion). Maintenant, comment savoir quel programme a ouvert cette
socket à l'autre bout ?
--
I WILL NOT FEED HAIRY CORSICAN TROLLS
I WILL NOT FEED HAIRY CORSICAN TROLLS
I WILL NOT FEED HAIRY CORSICAN TROLLS
-+- TN on fufe in episode FCOL2

10 réponses

1 2
Avatar
DINH Viêt Hoà

Avec lsof, si je cherche les occurrences d'une socket unix, j'obtiens
des lignes comme ceci :

slapd 11285 root 275u unix 0xcb942460 121763703 /var/run/ldapi

Je sais donc que slapd écoute sur cette socket (et "sert" une
connexion). Maintenant, comment savoir quel programme a ouvert cette
socket à l'autre bout ?


netstat ne te l'affiche pas dans la liste des connexion sockets unix ?

--
DINH V. Hoa,

"un bon ingénieur n'est pas paresseux" -- ArSuniK [1]

Avatar
Vincent Bernat
OoO En cette matinée pluvieuse du mardi 28 septembre 2004, vers 10:41,
DINH Viêt Hoà disait:

Avec lsof, si je cherche les occurrences d'une socket unix, j'obtiens
des lignes comme ceci :

slapd 11285 root 275u unix 0xcb942460 121763703 /var/run/ldapi

Je sais donc que slapd écoute sur cette socket (et "sert" une
connexion). Maintenant, comment savoir quel programme a ouvert cette
socket à l'autre bout ?


netstat ne te l'affiche pas dans la liste des connexion sockets unix
?


Il me donne la même chose :

$ netstat -xp | grep ldap
unix 3 [ ] STREAM CONNECTE 103764598 11285/slapd /var/run/ldapi
--
BOFH excuse #416:
We're out of slots on the server


Avatar
Laurent Wacrenier
Vincent Bernat écrit:
Avec lsof, si je cherche les occurrences d'une socket unix, j'obtiens
des lignes comme ceci :

slapd 11285 root 275u unix 0xcb942460 121763703 /var/run/ldapi

Je sais donc que slapd écoute sur cette socket (et "sert" une
connexion). Maintenant, comment savoir quel programme a ouvert cette
socket à l'autre bout ?


lsof -U | fgrep 0xcb942460

Avatar
Vincent Bernat
OoO En cette matinée pluvieuse du mardi 28 septembre 2004, vers 10:59,
Laurent Wacrenier <lwa@ teaser . fr> disait:

Avec lsof, si je cherche les occurrences d'une socket unix, j'obtiens
des lignes comme ceci :

slapd 11285 root 275u unix 0xcb942460 121763703 /var/run/ldapi

Je sais donc que slapd écoute sur cette socket (et "sert" une
connexion). Maintenant, comment savoir quel programme a ouvert cette
socket à l'autre bout ?


lsof -U | fgrep 0xcb942460


Il ne me trouve que la ligne ci-dessus. Est-ce possible que la socket
ne soit ouverte que dans un sens ? Si cela a de l'importance, les
tests ont lieu sur un Linux 2.6.
--
I WILL NOT BRIBE PRINCIPAL SKINNER
I WILL NOT BRIBE PRINCIPAL SKINNER
I WILL NOT BRIBE PRINCIPAL SKINNER
-+- Bart Simpson on chalkboard in episode 8F03


Avatar
Laurent Wacrenier
Vincent Bernat écrit:
Avec lsof, si je cherche les occurrences d'une socket unix, j'obtiens
des lignes comme ceci :

slapd 11285 root 275u unix 0xcb942460 121763703 /var/run/ldapi

Je sais donc que slapd écoute sur cette socket (et "sert" une
connexion). Maintenant, comment savoir quel programme a ouvert cette
socket à l'autre bout ?


lsof -U | fgrep 0xcb942460


Il ne me trouve que la ligne ci-dessus. Est-ce possible que la socket
ne soit ouverte que dans un sens ? Si cela a de l'importance, les
tests ont lieu sur un Linux 2.6.


C'est qu'il est en attente de connection sur ce descripteur (275).

Il faut regarder ça pour chaque descripteur. Avec zsh, on peut faire

zsh% lsof -w -U -a -p 11285 | awk '{print "->"$6 }' | sort |
join -o 2.2 -t: - =(lsof -w -U | awk '{print $8 ":" $0}' | sort )



Avatar
Vincent Bernat
OoO En ce début d'après-midi nuageux du mardi 28 septembre 2004, vers
14:32, Laurent Wacrenier <lwa@ teaser . fr> disait:

Il ne me trouve que la ligne ci-dessus. Est-ce possible que la socket
ne soit ouverte que dans un sens ? Si cela a de l'importance, les
tests ont lieu sur un Linux 2.6.


C'est qu'il est en attente de connection sur ce descripteur (275).

Il faut regarder ça pour chaque descripteur. Avec zsh, on peut faire

zsh% lsof -w -U -a -p 11285 | awk '{print "->"$6 }' | sort |
join -o 2.2 -t: - =(lsof -w -U | awk '{print $8 ":" $0}' |
sort )


Cela ne me donne rien. Pourtant, il a ouvert 200 fois la socket en
question. J'ai aussi testé en lançant un programme qui ouvre la socket
pour être sûr qu'il y en ait au moins un, mais toujours
rien. Peut-être puis-je connaître les programmes qui ouvrent les
sockets avec autre chose que lsof ?
--
printk(KERN_WARNING "%s: Short circuit detected on the loben",
dev->name);
2.4.0-test2 /usr/src/linux/drivers/net/tokenring/lanstreamer.c


Avatar
Stephane Chazelas
2004-09-29, 14:59(+02), Vincent Bernat:
[...]
zsh% lsof -w -U -a -p 11285 | awk '{print "->"$6 }' | sort |
join -o 2.2 -t: - =(lsof -w -U | awk '{print $8 ":" $0}' |
sort )


Cela ne me donne rien. Pourtant, il a ouvert 200 fois la socket en
question. J'ai aussi testé en lançant un programme qui ouvre la socket
pour être sûr qu'il y en ait au moins un, mais toujours
rien. Peut-être puis-je connaître les programmes qui ouvrent les
sockets avec autre chose que lsof ?


Et qu'est-ce que dit le ls -l /proc/<pid>/fd pour les processus
en question ?

--
Stephane


Avatar
Laurent Wacrenier
Vincent Bernat écrit:
Cela ne me donne rien. Pourtant, il a ouvert 200 fois la socket en
question.


Tu lances bien "lsof" en root ?
Il doit y avoir une fuite de descripteurs.
200 ouvertures d'une même socket pour ce genre de truc, c'est anormal.

Avatar
Vincent Bernat
OoO En ce début d'après-midi ensoleillé du mercredi 29 septembre 2004,
vers 15:13, Stephane Chazelas disait:

zsh% lsof -w -U -a -p 11285 | awk '{print "->"$6 }' | sort |
join -o 2.2 -t: - =(lsof -w -U | awk '{print $8 ":" $0}' |
sort )


Cela ne me donne rien. Pourtant, il a ouvert 200 fois la socket en
question. J'ai aussi testé en lançant un programme qui ouvre la socket
pour être sûr qu'il y en ait au moins un, mais toujours
rien. Peut-être puis-je connaître les programmes qui ouvrent les
sockets avec autre chose que lsof ?


Et qu'est-ce que dit le ls -l /proc/<pid>/fd pour les processus
en question ?


Des trucs de ce genre :

lrwx------ 1 root root 64 2004-09-29 15:33 95 -> socket:[127093873]
lrwx------ 1 root root 64 2004-09-29 15:33 96 -> socket:[103764596]
lrwx------ 1 root root 64 2004-09-29 15:33 97 -> socket:[126112947]
lrwx------ 1 root root 64 2004-09-29 15:33 98 -> socket:[125645673]
lrwx------ 1 root root 64 2004-09-29 15:33 99 -> socket:[103764598]

Le bidule est un serveur LDAP, je suis donc à peu près sûr que nscd
ouvre aussi des connexions et pour nscd, j'ai :

lrwx------ 1 root root 64 2004-09-29 15:34 0 -> /dev/null
lrwx------ 1 root root 64 2004-09-29 15:34 1 -> /dev/null
lrwx------ 1 root root 64 2004-09-29 15:34 2 -> /dev/null
lrwx------ 1 root root 64 2004-09-29 15:34 3 -> socket:[103911018]
lrwx------ 1 root root 64 2004-09-29 15:34 5 -> socket:[103911044]

Et les numéros entre crochets ne se retrouvent pas dans la liste
donnée pour le premier process.
--
/* Identify the flock of penguins. */
2.2.16 /usr/src/linux/arch/alpha/kernel/setup.c



Avatar
Vincent Bernat
OoO En ce début d'après-midi ensoleillé du mercredi 29 septembre 2004,
vers 15:34, Laurent Wacrenier <lwa@ teaser . fr> disait:

Cela ne me donne rien. Pourtant, il a ouvert 200 fois la socket en
question.


Tu lances bien "lsof" en root ?


Oui.

Il doit y avoir une fuite de descripteurs.
200 ouvertures d'une même socket pour ce genre de truc, c'est anormal.


La machine est pas mal chargée et c'est pour ça que j'aurais voulu
savoir qui utilisait autant ce serveur LDAP.
--
printk("Penguin %d is stuck in the bottle.n", i);
2.0.38 /usr/src/linux/arch/sparc/kernel/smp.c


1 2