回答:
2つのソケット間のゲートウェイとして機能するアプリを作成し、流れるすべてのデータをログに記録することで、そうすることを主張する人がいます。したがって、ソケットをタップすることはできませんが、サービスを再起動し、このガイアプリを使用するように調整できる場合は、すべてのトラフィックを表示できます。
投稿へのリンクはこちら:Unix Socket Sniffer
ソケットに接続されているプロセスIDを見つけ、ソケットのファイル記述子をlsofで見つけ、straceを使用してファイル記述子をタップする必要がある別の方法があります。
ソケットを使用しているクライアント/サーバーを停止して再構成できる場合は、常に最初の方法をお勧めします。2番目の方法は注意が必要であり、一部のアプリではクラッシュする可能性がある現在のプロセスをタップする必要があります。
誰かが別の方法で私たちを啓発することを願っています:)
幸運を
socatを使用できます。
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
上記で何が起こっているのか:最初に元のソケットをsock.originalに移動します。Socatは、元の場所に新しいソケット(「UNIX-LISTEN」)を作成し、すべてを元の場所(「UNIX-connect」)に転送します。-vは、出力をSTDERRに出力するようsocatに指示します。
また、ソケットのいずれかの側のプロセスの1つでstraceを使用してみることもできます。これにより、書き込み/読み取りの内容を監視できるからです。私の実稼働環境では、socatはありませんが、straceはあります。
便利な目的のためには、-sを大きな値に設定する必要があります。
strace -p <pid>
実行中のプロセスを監視するために使用します。
strace -s9999 -f $(for i in $( pidof php5-fpm ) ; do echo -n " -p $i "; done ) 2>&1 | tee /tmp/php.log
そして、テストを実行します。ログが大きすぎるかどうかをゆっくり確認するための/tmp/php.logがあります。あなたはあまりにも多くのトラフィックを取得している場合は、ログでそれを検索することができますので、あなたの名前か何かでクエリ文字列とリクエストを行う
printf
繰り返しを処理することができます。printf " -p %s" $(pidof php5-fpm)
各pid引数をプレフィックスとして使用し-p
、より実用的です。
// backup the socket
sudo mv /var/run/docker.sock /var/run/docker.sock.original
// use tcp port 8089 proxy the original socket
sudo socat TCP-LISTEN:8089,reuseaddr,fork UNIX-CONNECT:/var/run/docker.sock.original
// use the new socket to proxy the 8089 port
sudo socat UNIX-LISTEN:/var/run/docker.sock,fork TCP-CONNECT:127.0.0.1:8089
その後:
sudo tcpdump -i lo -netvv port 8089