Tcp

如何記錄互動 socat TCP/TLS 會話?

  • March 8, 2014

Socat非常適合互動式測試基於行的人類可讀協議,例如 HTTP 或 IMAP。

例如:

$ socat -d -d READLINE,history=$HOME/s.hist openssl:host:port,crnl,cafile=some.ca

為了更好地分析,我需要擷取這樣一個互動式會話——即接收和發送的字節。

僅僅通過 eg 硬拷貝終端輸出tux是不夠的,因為客戶端/伺服器部分沒有被標記,並且像 ‘\t’ 這樣的字元會失去/被靜默轉換。

使用tcpdump擷取僅有助於未加密的連接。

因此我的問題。

答案不一定是基於 socat 的。如果另一種工具更適合該案例,我想了解一下。

解決方案的獎勵積分

  • 時間戳也被記錄下來
  • 可以選擇交錯記錄(客戶端/伺服器端)或記錄到單獨的文件

我非常喜歡 tcpdump 來記錄網路連接。您實際上可以將它用於您想要實現的目標。不要在 socat 連接中使用 READLINE 端點,而是讓它監聽某個埠。

remote server with ssl
    ^
    |       (ssl-encrypted)
  socat
    |       (not ssl-encrypted)
    v
local port   <-- run tcpdump here
    ^
    |       
  socat
    |
    v
your terminal

然後,您使用第二個 socat 連接連接到第一個 socat 正在偵聽的本地埠。這是未加密的。在這個埠上你可以執行 tcpdump。

$ # easiest to use a separate terminal window for each command
$ socat TCP-LISTEN:9000,reuseaddr openssl:host:port,cafile=some.ca
$ tcpdump -i lo -w /tmp/tcpdump.output port 9000
$ socat READLINE,history=$HOME/.socat.hist TCP:localhost:9000

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