Linux-Kernel

如何“追踪”一個 unix 域套接字?

  • June 27, 2014

有點難以解釋,但我注意到在strace打開套接字的 PID 時,我看不到任何通信。我怎樣才能坐在套接字文件的中間觀看通信?

套接字是用於通信的核心 API。使用套接字 API,您可以通過 TCP/IP 連接、SCTP 關聯、UDP 數據報在兩個端點之間交換數據,或者使用 Unix 域套接字在兩個程序(數據報或連接)之間交換數據……

作為核心 API,任何與套接字的互動都是通過系統呼叫(socket, bind, connect, listen, accept, sendmsg, send, recv, write/read…)。

所以通常情況下,strace將能夠跟踪那些,因為strace跟踪系統呼叫。唯一strace無法追踪的通信機制是共享記憶體上的 IPC(因為在記憶體中讀/寫某些東西顯然不涉及系統呼叫)。

更有可能的是,在你的情況下,它是別的東西。我敢打賭,該應用程序是多執行緒的,並且您沒有跟踪正確的執行緒。或者可能是應用程序是 setuid/setgid 並且沒有以超級使用者身份啟動。

如果您想跟踪通過 Unix 域套接字交換的內容,可以選擇:

  • strace和其他ptrace調試器(跟踪伺服器或客戶端)
  • 審計系統(auditd/ auditctl),再次跟踪系統呼叫
  • 使用LD_PRELOAD技巧來包裝與套接字互動的系統呼叫
  • 檢測應用程序的程式碼以在其中添加日誌記錄。
  • 如前所述,systemtap 和其他低級核心跟踪/調試系統
  • 在中間插入一個人。

例如,對於 MITM,您可以使用socat. 這裡是面向連接的 Unix 域套接字,如 X11:

socat -x unix-listen:/tmp/.X11-unix/X42,fork unix:/tmp/.X11-unix/X0
DISPLAY=:42 xlogo

然後,您會看到xlogo與 X 伺服器交換的 X11 流量。

引用自:https://unix.stackexchange.com/questions/82947