lsofのUnixソケットとの対話

lsofのUnixソケットとの対話

コマンド出力にUnixソケットが使用されていることを確認しましたlsof

COMMAND    PID  TID TASKCMD               USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
screen    110970         username    4u     unix 0xffff91fe3134c400       0t0   19075659 socket

「DEVICE」列には、メモリアドレスのように見えるものが含まれています。 lsofのマニュアルページによると:

DEVICE     contains the device numbers, separated by commas, for a character special, block special, regular, directory or NFS file;

                  or ``memory'' for a memory file system node under Tru64 UNIX;

                  or the address of the private data area of a Solaris socket stream;

                  or a kernel reference address that identifies the file (The kernel reference address may be used for FIFO's, for example.);

                  or the base address or device name of a Linux AX.25 socket device.

                  Usually only the lower thirty two bits of Tru64 UNIX kernel addresses are displayed.

私の質問は、次のうちどれが価値があるかを見つけることです0xffff91fe3134c400

また、どのようにやり取りできますか? Unixドメインソケットへの接続に使用できることはわかっていますが、netcatオンラインで例を読んでファイルを指定する必要があるようです。

ベストアンサー1

UNIXソケットに関連したファイルを見つけるには、フラグを使用してソケットのエンドポイントを表示でき+Eますlsof。マニュアルページから:

+ | -E + E Linuxパイプ、Linux UNIXソケット、およびLinux疑似端末ファイルがエンドポイント情報とともに表示され、エンドポイントのファイルも表示されることを指定します。

たとえば、これは次のようになります。質問誰かがプロセスfd 6のエンドポイントを見つけようとしましたtop

# lsof -d 6 -U -a +E -p $(pgrep top)
COMMAND     PID       USER   FD   TYPE             DEVICE SIZE/OFF      NODE NAME
dbus-daem   874 messagebus   12u  unix 0xffff9545f6fee400      0t0 366381191 /var/run/dbus/system_bus_socket type=STREAM ->INO=366379599 25127,top,6u
top       25127       root    6u  unix 0xffff9545f6fefc00      0t0 366379599 type=STREAM ->INO=366381191 874,dbus-daem,12u

フラグは Unix ソケットファイル-Uのみを表示します。lsof

ソケットファイルの名前のみが表示されます。聞くプロセス。他のプロセスはUnixソケットファイルの名前を表示しませんが、+Elsofを使用するとリスニングソケットファイルのinodeが表示され、このソケットをリスニングするプロセスの行も追加されます(ソケットファイル名とともに)。

lsofこの例では、showコマンドのファイル記述子のみを要求しましたが、top別のlsof行を追加しましたdbus-daem。これはリスニングプロセスであり、リッスンするソケットファイルです/var/run/dbus/system_bus_socket

  • Pid 25127(inode 366379599)はinode 366381191()とtype=STREAM ->INO=366381191 874,dbus-daem,12u対話します。
  • Inode 366381191はpid 874に属し、このプロセスには2番目のプロセスの受信側にfd()があることがわかります/var/run/dbus/system_bus_socket type=STREAM ->INO=366379599 25127,top,6u。ここでソケットファイル名はです/var/run/dbus/system_bus_socket

また、どのようにやり取りできますか?

UNIXソケットのファイル名があるので、次のようなさまざまな方法で対話できます。

socat - UNIX-CONNECT:/run/dbus/system_bus_socket
nc -U /run/dbus/system_bus_socket

詳細は: Debian Squeezeでシェルを介してUnixドメインソケットと通信するには?

おすすめ記事