web-dev-qa-db-ja.com

tcpdumpのようなローカルのUnixドメインソケットを監視できますか?

私は、元の接続を乱すことなく、unixソケット上の応答を監視し、それらをスクリプトに渡して処理したいと思います。

私はTCP接続のためにtcpdumpでこれを行う方法を知っていますが、私はローカルのUnixソケットのための解決策を見つけることができないようです。

これでも可能ですか?

57
ck_

2つのソケット間のゲートウェイとして機能するアプリを作成し、流れるすべてのデータをログに記録することによってそうすると主張する人がいます。だからあなたはソケットをタップすることはできませんが、あなたがサービスを再起動し、この男のアプリを使用するようにそれを調整することができればあなたはすべてのトラフィックを見ることができるでしょう。

これが記事へのリンクです: Unix Socket Sniffer

ソケットに添付されているプロセスIDを見つけ、ソケットのファイルディスクリプタをlsofで見つけて、straceを使用してファイルディスクリプタをタップする必要があるもう1つの方法があります。

クライアント/サーバがソケットを使用しているのを止めて再設定することができるなら、私は常に最初の方法、二番目の方法はトリッキーで、現在のプロセスをタップする必要があります。

誰かが別の方法で私たちを啓発することを願っています:)

がんばろう

15
Valor

あなたは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はsocatにも出力をSTDERRに出力するように指示します。

78
storoj

また、ソケットの両側にあるプロセスのいずれかでstraceを使用してみることもできます。これにより、書き込まれたものと読み取られたものを監視できるようになります。私は生産環境で見つけました、私は社交的ではありませんが、緊張を持っていますか。

あらゆる有用な目的のために、-sを大きな値に設定することは必須です。

6
omnigrok
// 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
0
任喜军