コマンド出力に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ソケットファイルの名前を表示しませんが、+E
lsofを使用するとリスニングソケットファイルの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