Comment le déplacement d'un socket de domaine Unix permet-il à socat de surveiller le trafic?

12

socat peut être utilisé pour surveiller le trafic sur un socket de domaine Unix:

sudo mv /path/to/sock /path/to/sock.original
sudo socat -t100 -x -v UNIX-LISTEN:/path/to/sock,mode=777,reuseaddr,fork UNIX-CONNECT:/path/to/sock.original

Je ne comprends pas très bien comment ce mécanisme fonctionne, en espérant que quelqu'un pourrait l'expliquer un peu. En particulier, comment fonctionne le déplacement du fichier socket si un processus l'écoute déjà? Aussi, après le déménagement: ni lsof /path/to/sockne /path/to/sock.originalretourner aucun résultat.

Matt R
la source

Réponses:

11

Ces commandes doivent être exécutées lorsque le serveur que vous souhaitez surveiller écoute actuellement /path/to/sock. Ensuite, si vous renommez /path/to/sock, le serveur ne sera pas affecté.

La socatcommande insère un homme au milieu. Il écoute /path/to/sockset transfère tout le trafic des clients /path/to/socks.original(et l'enregistre dans le processus avec -v).

Cela ne fonctionne que pour les types de sockets de flux (utilisez UNIX-RECVFROM/ UNIX-RECVpour les sockets datagramme ) et uniquement si les clients se contentent de read/write/send/recvsur ces sockets, pas sendmsg()avec des données auxiliaires et d'autres choses fantaisistes.

lsofne rapportera que les processus d'écoute ( socatet le serveur pour les sockets d'écoute et acceptées). Il n'est généralement pas possible de lier un socket connecté sur le client au chemin du socket.

Si vous le faites avant le démarrage du serveur, qui ne fonctionnera pas que le serveur va essayer d' écouter sur /path/to/sockset échouer comme socatdéjà l' écoute sur ce point . Ou vous devez /path/to/sock.originalplutôt dire au serveur d'écouter .

Stéphane Chazelas
la source