web-dev-qa-db-ja.com

コマンドラインからUnixドメインソケットにアクセスするにはどうすればよいですか?

Pythonを使用してUnixドメインソケットファイルを読み取ることは、通常のTCPソケット:

>>> import socket
>>> import sys
>>>
>>> server_address = '/tmp/tbsocket1'  # Analogous to TCP (address, port) pair
>>> sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
>>> sock.connect(server_address)
>>> sock.recv(512)
'*** uWSGI Python tracebacker output ***\n\n'

UDSは通常のファイルではないため、catはそれらに対して機能しません。

$ Sudo cat /tmp/tbsocket1
cat: /tmp/tbsocket1: No such device or address

curlもしません:

$ Sudo curl /tmp/tbsocket1
curl: (3) <url> malformed

curlなどの標準のコマンドラインツールを使用してUnixドメインソケットを読み書きするにはどうすればよいですか?

PS:奇妙な偶然の一致で、 カールパッチがごく最近提案されました

12
Adam Matan

ncatプロジェクトからnmapコマンドを使用できます。

ncat -U /tmp/tbsocket1

簡単にアクセスできるようにするには、次のようにします。

# forward incoming 8080/tcp to unix socket
ncat -vlk 8080 -c 'ncat -U /tmp/tbsocket1'
# make a http request via curl
curl http://localhost:8080

socatを使用することもできます。

# forward incoming 8080/tcp to unix socket
socat -d -d TCP-LISTEN:8080,fork UNIX:/tmp/tbsocket1
19
kev

nc -U </unix/socket>ほとんどすべてのLinux、BSD、MacOで。