49

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

harrymc
  • 455,459
  • 31
  • 526
  • 924
tony_sid
  • 14,001
  • 51
  • 139
  • 194

4 Answers4

50

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 127.0.0.1:8888          0.0.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.

binfalse
  • 1,794
  • 14
  • 10
  • 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
  • 1
    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
9

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.

kenorb
  • 24,736
  • 27
  • 129
  • 199
9

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

See the man page for more info.

Alex
  • 1,813
  • 5
  • 20
  • 27
4

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.

jchevali
  • 86
  • 5