Is there an easy way, preferably by using the Linux terminal, to check if a Socks5 proxy works?


If you created the proxy by yourself you should first of all check whether there is an open port (the p argument only works if the concerning process is yours or you are root):

netstat -tlnp

This should give you a line like: (I have a proxy on localhost:8888)

tcp        0      0*               LISTEN

If you found such a line or the proxy isn't yours, try sending packets through it. For example request a web page with curl:

curl --socks5 localhost:8888 binfalse.de

Should output some HTML stuff. Hope this helps to search for mistakes ;-)

Aux: For my example I created the proxy via:

ssh -o ServerAliveInterval=60 -D8888 someone@somewhere

Replace someone with your username and somewhere with your destination server. Of course using OpenSSH is just one method in a bunch of possible socks5 proxies.

| improve this answer | |
  • 1
    ssh: Could not resolve hostname somewhere: Name or service not known – tony_sid Jun 28 '11 at 11:06
  • 6
    Of course you have to replace someone@somewhere with your username and your server, e.g. ssh -D8888 YOURUSER@YOURHOST ;-) – binfalse Jun 28 '11 at 11:09
  • On windows, the netstat command is: nestat -an or netstat -an | grep LISTEN if you have grep in your path. – Erik Aronesty Dec 22 '18 at 10:08
  • Thanks for the curl hint. FWIW, curl also supports --socks5-hostname which is like --socks5 but does not attempt to locally resolve the hostname of the submitted URL (which may be super useful for connecting to intranets). – kostix Oct 17 '19 at 14:19

To get curl to resolve the DNS on the other side, change --socks5 with --socks5-hostname.

See the man page for more info.

| improve this answer | |
  • Thanks, didn't realize why my request was failing until using this. – xamox Jun 10 '17 at 2:41

The following command will test whether Socks 5 proxy works at localhost:8080:

timeout 5 curl -x socks5://localhost:8080 http://example.com/

Otherwise it'll timeout after 5 seconds. If you don't have a timeout command, drop it.

| improve this answer | |

You may connect with netcat and follow the rules of RFC 1928 to talk to the server. You'd have to be able to type and read non-printable characters though, or log them to a file for further examination.

E.g., to test if it's a SOCKS5 server and find out which of no-auth, gssapi, or usr+pwd authentication methods it would support, send 0x05 0x03 0x00 0x01 0x02. A SOCKS5 server prepared to use usr+pwd authentication would reply 0x05 0x02.

Or here's how to check if it's a SOCKS5 server and no-auth (method 0) works:

echo 050100 | xxd -p -r | netcat -o out.txt {server} {port}

After you interrupt that, towards the end of out.txt it should have produced 0x05 0x00 if the server supports that method (0), or 0x05 0xFF if it does not.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.