Comment voir ce qui traverse une socket Unix ?
Vous êtes fans de tcpdump
. Mais voilà, ce programme ne permet de sniffer que le trafic réseau, et pas les sockets.
Il y a un moyen de visualiser tout ce qui passe à travers une socket, à la condition de maîtriser une partie de la chaîne de transmission d’information : socat
.
logiciel 1 → socket → logiciel 2
Si vous pouvez spécifier le nom de la socket dans « logiciel 1 », alors c’est gagné ! Il vous suffit de créer un relais, une socket « maison » qui va recevoir les données envoyées par « logiciel 1 » et les relayer proprement à la socket officielle (souvent créée par « logiciel 2 »).
Et concrètement, je fais quoi ?
root@server:~# socat -t2 -v UNIX-LISTEN:/run/proxy.socket,mode=777,reuseaddr,fork UNIX-CONNECT:/run/original.socket
Exemple d'utilisation
Nginx, configuration pour envoyer des données à un logiciel backend :
upstream fastcgiwrap { #server unix:/run/fcgiwrap.socket; server unix:/run/proxy.socket; }
Socket temporaire :
root@server:~# socat -t2 -v UNIX-LISTEN:/run/jc.socat,mode=777,reuseaddr,fork UNIX-CONNECT:/run/fcgiwrap.socket
Et pour voir ce qui transite, il suffit de lire la sortie d’erreur (STDERR).