Un peu difficile à expliquer, mais j'ai remarqué en strace
le PID qui a la prise ouverte que je ne vois aucune communication. Comment puis-je m'asseoir au milieu d'un file socket pour regarder la communication?
Les sockets sont une API kernel pour la communication. A l'aide de l'API socket, vous pouvez échanger des données entre deux noeuds finaux sur des connections TCP / IP, des associations SCTP, des datagrammes UDP ou entre deux process (datagramme ou connection) à l'aide de sockets de domaine Unix.
En tant qu' API de kernel, toute interaction avec une socket s'effectue via des appels système ( socket
, bind
, connect
, listn
, accept
, sendmsg
, send
, recv
, write/read
…).
Donc typiquement, strace
sera capable de tracer ceux-ci car strace
trace les appels système. Le seul mécanisme de communication que strace
ne peut pas tracer est IPC par rapport à la memory partagée (car lire / écrire quelque chose dans la memory n'implique évidemment pas d'appel système).
Plus probablement, dans votre cas, c'est autre chose. Mon pari serait que l'application est multi-thread et vous ne stracing le bon fil. Ou il se peut que l'application soit setuid / setgid et ne soit pas démarrée en tant que superuser.
Si vous voulez comparer ce qui est échangé sur les sockets du domaine Unix, les options sont les suivantes:
strace
et autre débogueur ptrace
(trace le server ou les clients) auditd
/ auditctl
), encore une fois, qui retrace les appels système LD_PRELOAD
pour envelopper les appels système qui interagissent avec le socket Pour le MITM, vous pourriez par exemple utiliser socat
. Ici pour une socket de domaine Unix orientée connection comme pour X11:
socat -x unix-listn:/tmp/.X11-unix/X42,fork unix:/tmp/.X11-unix/X0 DISPLAY=:42 xlogo
Ensuite, vous voyez le trafic X11 que xlogo
et le server X échangent.
Vous ne pouvez pas "strace une socket", strace fonctionne sur les process, donc vous pouvez strace tous les process qui parlent à la socket, mais vous ne pouvez pas utiliser strace pour voir absolument toutes les communications impliquant la socket. Vous pouvez peut- être aller quelque part avec dtrace ou systemtap s'ils sont disponibles sur votre OS, mais c'est un peu de travail.