Shadowsocks, SOCKS5 and HTTP proxies get compared as if they were three kinds of the same thing. They are not. An HTTP proxy and a SOCKS5 proxy are relays you point traffic at; Shadowsocks is an encrypted transport you run between your own client and your own server. The short version: use an HTTP proxy for web traffic, a SOCKS5 proxy for any TCP connection, and Shadowsocks when you want an encrypted tunnel to a server you control. This piece explains what each is, proves the encryption difference on the wire, and says plainly why a Shadowsocks server is not a commercial proxy.

The two provider protocols first

A proxy server relays your connection to a target. The protocol is how your client talks to it.

  • An HTTP proxy understands HTTP. It forwards plain requests and opens a CONNECT tunnel for HTTPS. It can read and change plain-HTTP requests.
  • A SOCKS5 proxy works a layer lower and relays any TCP stream without parsing it. It carries non-HTTP protocols that an HTTP proxy cannot.

Neither encrypts anything itself. HTTPS traffic stays protected end to end by TLS through either, but the proxy protocol adds no encryption. HTTP vs SOCKS5 proxies covers the choice between them in detail.

The point worth holding onto: with a commercial proxy you are buying access to someone else's network of exit IPs. You authenticate with a username and password or an IP allowlist, and your request leaves from one of their addresses.

What Shadowsocks is

Shadowsocks is an encrypted transport built to carry a SOCKS5 connection over a hostile network. It has two halves:

  • ssserver runs on a server you rent, listening on a port with a cipher and a pre-shared key.
  • sslocal runs on your machine and presents an ordinary local SOCKS5 proxy. Your apps point at that local proxy, and everything they send is encrypted with the shared key, carried to the server, decrypted, and forwarded.

So from your application's side Shadowsocks looks like a SOCKS5 proxy on 127.0.0.1. The difference is everything behind that local port: a symmetric-key encrypted link to a single server you operate. We ran shadowsocks-rust 1.25.0, server and client, with the 2022-blake3-aes-256-gcm cipher. A request through it came back with the server's IP as the origin, exactly as a proxy would, and the modern cipher list it supports includes the AEAD ciphers (aes-256-gcm, chacha20-ietf-poly1305) and the 2022 edition's 2022-blake3-* family.

The encryption is real, and we watched it

The headline claim is that Shadowsocks encrypts where a bare SOCKS5 proxy does not. We captured both on the wire with tcpdump:

  • On the Shadowsocks connection, the capture held no readable hostname, request line or header. The bytes were ciphertext.
  • On a plain SOCKS5 connection to the same target, the capture plainly showed the hostname, the GET /headers request line, and the username and password used to authenticate.

Give the Shadowsocks server the wrong key and it does not politely refuse; it logs decrypt header chunk failed and drops the connection, because without the key the incoming bytes are indistinguishable from noise. That design, no distinguishing handshake, is what Shadowsocks was built for.

It carries UDP too

Shadowsocks can relay UDP, which an HTTP proxy cannot and many SOCKS5 proxies do not implement. We ran a Shadowsocks tunnel forwarding UDP DNS queries to a public resolver and they returned answers. That makes it useful for traffic a plain proxy drops.

Why a Shadowsocks server is not a commercial proxy

This is the heart of it. Running ssserver on a VPS gives you a working encrypted proxy, so it is tempting to treat it as a free alternative to a provider. It is not the same product:

  • One IP, and it is yours to run. A Shadowsocks server is a single exit address, the datacenter host you rent. There is no pool, no rotation, no choice of city beyond where you placed the server, and no residential or ISP addresses. A commercial datacenter proxy is also a single-type address, but a provider gives you many, in many locations, provisioned on demand.
  • It looks like exactly what it is. The server's IP sits on a hosting provider's network, so its ASN reads as a datacenter. Sites that score the network type treat it like any other datacenter IP. Encryption hides your traffic from the network path; it does nothing about how the target classifies the exit address.
  • You own the operations. Patching, uptime, abuse handling and the bill are yours. That is the trade for control.

So Shadowsocks is the right tool when the thing you want is a private, encrypted link to a machine you control, for example reaching your own services, or carrying your own traffic across an untrusted network. It is the wrong tool when what you need is many exit addresses, residential or ISP networks, or scale, which is what a proxy provider sells.

What running one looks like

The shape of the setup makes the single-server nature concrete. On the server you start ssserver with a port, a cipher and a key. With shadowsocks-rust the pieces are:

  • a port to listen on,
  • a cipher, for which the modern choice is an AEAD cipher such as aes-256-gcm or one of the 2022-blake3-* family,
  • a key both ends share, and -U if you want UDP relayed as well as TCP.

On your own machine, sslocal connects to that server with the same cipher and key and opens a local SOCKS5 port, say 127.0.0.1:1080. Your application points at that local port exactly as it would at any SOCKS5 proxy, so the socks5 versus socks5h DNS choice applies here too: use socks5h to send hostnames to the local client for the server to resolve, keeping lookups off your own resolver. Nothing in this chain is shared with anyone else; both ends are yours, which is the whole difference from buying proxy access. Compare that with an SSH tunnel, which reaches the same "one server you control" outcome using software you already have on the server, without a separate daemon or a shared key to distribute.

Where this meets research, and where it stops

One legitimate reason to study Shadowsocks is measurement: researchers assess which protocols stay reachable from which networks over time. That kind of aggregate, academic measurement of public reachability is a use ProxyHive's allowed-use policy lists under market and academic research, including censorship and availability research.

What this article does not do is explain how to configure Shadowsocks to get around any specific country's network controls. That is a legal and safety question that depends entirely on where you are, and a generic web page is the wrong place to answer it. The protocol facts above are the facts; what is lawful to do with them is yours to establish for your jurisdiction.

A decision table

You wantUse
Scrape websites or call HTTP APIs through a providerAn HTTP proxy port
Relay a non-HTTP TCP protocol, or a database or SSH clientA SOCKS5 proxy port
An encrypted tunnel to a single server you runShadowsocks, or an SSH tunnel
Protect a whole device on public Wi-FiA VPN, not a proxy (proxy vs VPN)
Many exit IPs, locations, or residential networksA commercial proxy service

If what you need is the last row, a self-hosted Shadowsocks server will not get you there. Datacenter proxies give you many static addresses across locations with HTTP, HTTPS and SOCKS5, and ISP proxies give you static addresses on named consumer carriers when the target scores datacenter ranges. Both authenticate with a username and password, which the Python requests guide and the other integration guides show how to use.