Alex
Alex

Reputation: 916

Proxying UDP over SOCKS5 proxy in Python

Is it possible to send UDP datagrams over SOCKS5 proxy in Python using any SOCKS client lib? SocksiPy does not seem to work or maybe I am just using it wrong. The following code does not work, it tries to connect to the destination directly:

s = socks.socksocket ( socket.AF_INET, socket.SOCK_DGRAM )
s.setproxy(socks.PROXY_TYPE_SOCKS5,"socks.proxy.lan")
s.sendto ( payload, ( ip, port ) )

If I change SOCK_DGRAM to SOCK_STREAM the code does not work either, it does not try to connect anywhere then.

Upvotes: 7

Views: 3681

Answers (2)

FlameBlazer
FlameBlazer

Reputation: 1698

Have you tried this:

socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "socks.proxy.lan", 8080, True)

replace 8080 with the port and "True" is True if you want rdns enabled.

If you are using Python version 3 and above i suggest you use PySocks and it would be

socks.set_default_proxy(socks.PROXY_TYPE_SOCKS5, "socks.proxy.lan", 8080, True)

Upvotes: 0

WGH
WGH

Reputation: 3519

Have you tried to use connect() and send() instead of sendto()? Judging from the SocksiPy source code, connectionless mode isn't implemented.

Edit:

req = struct.pack('BBB', 0x05, 0x01, 0x00)

TCP stream connection (0x01) seems to be hardcoded here. SocksiPy as it is won't work.

Upvotes: 2

Related Questions