如何从命令行访问Unix域套接字?

Ada*_*tan 11 unix linux curl unix-socket

使用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'
Run Code Online (Sandbox Code Playgroud)

由于UDS不是普通文件,因此cat不适用于它们:

$ sudo cat /tmp/tbsocket1
cat: /tmp/tbsocket1: No such device or address
Run Code Online (Sandbox Code Playgroud)

也没有curl:

$ sudo curl /tmp/tbsocket1
curl: (3) <url> malformed
Run Code Online (Sandbox Code Playgroud)

如何使用标准命令行工具(如curl)读取或写入Unix域套接字?

PS:在一个奇怪的巧合,一个卷曲补丁建议最近)

kev*_*kev 19

您可以使用项目中的ncat命令nmap:

ncat -U /tmp/tbsocket1
Run Code Online (Sandbox Code Playgroud)

为了便于访问,您可以这样做:

# 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
Run Code Online (Sandbox Code Playgroud)

您还可以使用socat:

# forward incoming 8080/tcp to unix socket
socat -d -d TCP-LISTEN:8080,fork UNIX:/tmp/tbsocket1
Run Code Online (Sandbox Code Playgroud)


Mik*_*din 6

nc -U </unix/socket> 几乎在任何 Linux、BSD、MacOs 中。