Как получить доступ к Unix Domain Sockets из командной строки?

Чтение файла Unix Domain Socket с использованием Python аналогично обычному 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

Как читать или писать в доменные сокеты Unix с помощью стандартных инструментов командной строки, таких как curl?

PS: По странному совпадению совсем недавно был предложен патч для завитков)

Ответ 1

Вы можете использовать команду 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

Ответ 2

nc -U </unix/socket> почти в любом Linux, BSD, MacO.