2014-11-28 27 views
8

lettura di un file Unix Domain Socket usando Python è simile a un socket TCP ordinaria:Come accedere a Unix Domain Sockets dalla riga di comando?

>>> 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' 

Dato UDS non sono normali file, cat non funziona su di loro:

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

Nemmeno curl:

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

Come posso leggere o scrivere su Unix Domain Socket utilizzando virgola di serie strumenti di linea e curl?

PS: In una strana coincidenza, un curl patch was suggested very recently)

risposta

16

È possibile utilizzare ncat comando dal progetto nmap:

ncat -U /tmp/tbsocket1 

Per rendere più facile l'accesso, si può fare questo:

# 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 

È inoltre possibile utilizzare socat:

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

Ho provato a utilizzare questo. Ma ottengo errore: "Dimensione blocco richiesta non valida: 21573 (max 4096) salta .." nel registro applicazione. È possibile usarlo per: uwsgi_pass unix: ///tmp/web2py.socket; – yogeshagr