2014-11-28 9 views
8

Odczyt pliku Socket Unix domeny przy użyciu Python jest podobny do zwykłego gniazda TCP:Jak uzyskać dostęp do gniazd domeny uniksowej z wiersza poleceń?

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

Od UDS nie są zwykłymi plikami, cat nie działa na nich:

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

Ani curl:

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

Jak czytać lub pisać do gniazd domeny Unix za pomocą standardowego przecinek czy narzędzia liniowe, takie jak curl?

PS: W dziwnym zbiegiem okoliczności, o curl patch was suggested very recently)

Odpowiedz

16

Można użyć polecenia ncat z projektu nmap:

ncat -U /tmp/tbsocket1 

aby ułatwić dostęp, można to zrobić:

# 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 

Możesz również użyć socat:

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

Próbowałem za pomocą tego. Ale pojawia się błąd: "nieprawidłowy rozmiar bloku żądania: 21573 (maksymalnie 4096) pomiń ..." w dzienniku aplikacji. Czy można go używać do: uwsgi_pass unix: ///tmp/web2py.socket; – yogeshagr

Powiązane problemy