2014-11-28 5 views
8

Чтение файла Unix Domain сокетов с использованием Python похож на обычный TCP сокет:Как получить доступ к Unix Domain Sockets из командной строки?

>>> 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 Domain Sockets с использованием стандартной запятой nd инструменты, такие как завиток?

PS: В странном совпадении, curl patch was suggested very recently)

ответ

16

Вы можете использовать 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 
+0

Я попытался использовать это. Но я получаю ошибку: «недопустимый размер блока запроса: 21573 (максимум 4096) пропустить ..» в журнале приложений. Можно ли использовать его для: uwsgi_pass unix: ///tmp/web2py.socket; – yogeshagr