ソケットのパス名でソケットの詳細を調べますか?

ソケットのパス名でソケットの詳細を調べますか?

straceクライアント アプリケーションの障害に対して を実行すると、次のような結果になりました。

socket(PF_LOCAL, SOCK_SEQPACKET|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
setsockopt(3, SOL_SOCKET, SO_PASSCRED, [1], 4) = 0
connect(3, {sa_family=AF_LOCAL, sun_path="/path/to/socket"}, 19) = -1 EPROTOTYPE (Protocol wrong type for socket)
close(3)                                = 0
exit_group(2)                           = ?
+++ exited with 2 +++

私はその後推測さまざまなパラメータを使用してソケットをエミュレートすることでソケット タイプをテストしましたsocatが、効果はありませんでした。

この回答のコードも見ましたここしかし、既存のソケットを使用するのではなく、ソケットを作成しているようで、パスからソケットを取得する方法が見つからないようです。

ソース コードを詳しく調べなくても、ソケットのパス (存在する場合) から既存のソケットの詳細 (プロトコル タイプなど) を簡単に確認する方法はありますか?

答え1

以下を使用できますlsof /path/to/socket:

COMMAND     PID USER   FD   TYPE             DEVICE SIZE/OFF      NODE NAME
hindsight 19619 root    6u  unix 0xffff88038612b480      0t0 257123917 /path/to/socket

これを知ることで、PIDプロセス自体についてさらに詳しく知ることができます。

cat /proc/19619/io 
rchar: 11635200437
wchar: 2722080850
syscr: 16905056
syscw: 920240
read_bytes: 36397568
write_bytes: 3515994112
cancelled_write_bytes: 760422400

ssまたは、すべての Unix ソケットを表示するために使用することもできます。

ss -x
  • -xUnixドメインソケットを表示する
  • -e詳細なソケット情報を表示する
  • -mソケットのメモリ使用量を表示する

いくつかのタイプをフィルタリングできます:

ss -x -A unix_stream

関連情報