Proxy SOCKS5: o que é, como funciona e SOCKS4 vs SOCKS5

Publicado:

16 min de leitura

Atualizado:

Acar Diveroli
Autor: Acar Diveroli
Retrato do gateway SOCKS5: portas TCP e UDP, a placa azul de UDP suspensa no ar e o cartão de handshake da porta 1080

Um cliente de jogo que ignora o proxy do navegador, um Telegram que pede um "servidor SOCKS5", um scraper cujas consultas DNS não podem sair da rede do seu escritório: os três casos levam ao mesmo protocolo. O SOCKS5 abre uma conexão em seu nome e passa os bytes nos dois sentidos, seja qual for o tráfego.

Este guia cobre o SOCKS4 e o SOCKS5, o handshake passo a passo, UDP e DNS pelo proxy, a configuração, o que verificar na compra e os erros mais comuns. O código foi testado contra um servidor SOCKS5 local.

O que é SOCKS?

Um proxy SOCKS é um servidor intermediário entre o seu programa e o servidor de destino. O cliente diz ao proxy qual endereço e qual porta quer alcançar, o proxy abre essa conexão e, a partir daí, repassa o tráfego entre os dois lados. O destino vê o endereço IP do proxy, e não o seu.

Diferente de um proxy HTTP, o SOCKS não trabalha na camada de aplicação: não lê os pacotes nem os modifica, apenas repassa o tráfego como está. Por isso ele fica na camada 5 do modelo OSI, abaixo do HTTP, e por isso os proxies SOCKS se dão bem com programas que falam protocolos muito diferentes: um cliente de jogo, um programa de e-mail e uma sessão SSH podem usar o mesmo proxy. O próprio OpenSSH vira um servidor SOCKS local quando é iniciado com ssh -D (manual do OpenSSH).

Existem duas versões principais: SOCKS4 e SOCKS5. Quando um provedor fala em "SOCKS" hoje, ele quer dizer SOCKS5.

O que é o SOCKS4, o protocolo antigo?

O SOCKS4 surgiu antes do SOCKS5 e cobre o básico: só conexões TCP. A requisição dele é mínima: um byte de versão, um comando, a porta de destino, o endereço IPv4 de destino e um ID de usuário (especificação do SOCKS4).

Principais características do SOCKS4

  • Só TCP: CONNECT para conexões de saída (páginas web, e-mail e outros aplicativos TCP) e BIND para as de entrada. Não há UDP.
  • Só IPv4: o campo de destino tem quatro bytes, então só dá para alcançar destinos IPv4.
  • Sem senha: o ID de usuário identifica quem se conecta, mas não faz login. Na prática, os servidores SOCKS4 controlam o acesso pelo IP do cliente.
  • DNS no cliente: o cliente precisa resolver o nome de domínio e enviar um IP. A extensão SOCKS4a corrigiu isso ao permitir que o cliente envie o nome para o proxy resolver (especificação do SOCKS4a).

O SOCKS4 sobrevive em ferramentas antigas e em proxies internos simples; fora disso, você quase não vai encontrá-lo. Os clientes de jogos modernos precisam de UDP e de nomes de host, e por isso quem procura um proxy para jogos escolhe SOCKS5. Um servidor que só fala SOCKS5 recusa requisições SOCKS4, então confira qual versão a sua ferramenta envia.

O que é um proxy SOCKS5?

O SOCKS5 é a versão atual do protocolo, publicada em 1996 como RFC 1928. Ele faz o mesmo que o SOCKS4 e acrescenta os recursos de que os aplicativos modernos precisam:

  • TCP e UDP: além de CONNECT e BIND, tem o comando UDP ASSOCIATE, então transporta tráfego web, e-mail, transferência de arquivos, chamadas de voz (VoIP), consultas DNS e tráfego de jogos.
  • Autenticação: cliente e servidor combinam um método: nenhum, GSSAPI ou usuário e senha, como define a RFC 1929. Assim, só clientes autorizados usam o proxy. Provedores comerciais usam usuário e senha ou uma whitelist de IP.
  • IPv6: o destino pode ser um endereço IPv4, um endereço IPv6 ou um nome de domínio.
  • DNS no proxy: o cliente pode enviar o nome de domínio; o proxy o resolve, e a consulta não passa pela sua própria rede.

A configuração pede um host, uma porta e, geralmente, usuário e senha. O que muda é o suporte das ferramentas: o Chrome não consegue enviar senha SOCKS5, as configurações de Wi-Fi do iPhone e do Android aceitam só proxy HTTP, e algumas bibliotecas precisam de um pacote extra.

Como funciona uma conexão SOCKS5?

Toda sessão SOCKS5 começa com uma troca curta de mensagens sobre uma conexão TCP com o proxy. Os passos seguem a RFC 1928:

  1. Saudação. O cliente envia a versão e os métodos de autenticação que aceita, por exemplo 05 02 00 02: nenhum (0x00) e usuário/senha (0x02).
  2. Escolha do método. O servidor devolve a escolha dele, por exemplo 05 02, ou 05 FF se nenhum for aceitável.
  3. Autenticação. O cliente envia o usuário e a senha, cada um precedido pelo seu tamanho. Status 0 significa sucesso.
  4. Requisição. O cliente envia um comando (CONNECT = 1, BIND = 2, UDP ASSOCIATE = 3), um tipo de endereço (IPv4 = 1, nome de domínio = 3, IPv6 = 4), o endereço e a porta.
  5. Resposta. O proxy tenta a conexão e responde com um código: 0 sucesso, 1 falha geral, 2 não permitido pelas regras, 3 rede inalcançável, 4 host inalcançável, 5 conexão recusada, 6 TTL expirado, 7 comando não suportado, 8 tipo de endereço não suportado.
  6. Repasse. O proxy copia os bytes nos dois sentidos. No HTTPS, o TLS roda dentro desse túnel, então o proxy vê só dados criptografados.

O script abaixo faz esses passos à mão e depois abre uma conexão TLS com httpbin.org pelo túnel. No nosso servidor de teste, ele imprimiu server picked method 0x2, auth status 0, reply code 0 e o IP de saída; com a senha errada, parou em auth status 1.

python
import socket
import ssl
import struct

PROXY_HOST, PROXY_PORT = "pr.proxynet.io", 1080
USER, PASSWORD = b"user", b"pass"
TARGET_HOST, TARGET_PORT = "httpbin.org", 443


def recv_exact(sock, n):
    data = b""
    while len(data) < n:
        chunk = sock.recv(n - len(data))
        if not chunk:
            raise ConnectionError("proxy closed the connection")
        data += chunk
    return data


sock = socket.create_connection((PROXY_HOST, PROXY_PORT), timeout=15)

# 1. Saudação: versão 5, dois métodos oferecidos (0x00 sem autenticação, 0x02 usuário/senha)
sock.sendall(b"\x05\x02\x00\x02")
ver, method = recv_exact(sock, 2)
print("server picked method", hex(method))
if method == 0xFF:
    raise SystemExit("no acceptable authentication method: send credentials or whitelist your IP")

# 2. Subnegociação de usuário e senha (RFC 1929)
if method == 0x02:
    sock.sendall(b"\x01" + bytes([len(USER)]) + USER + bytes([len(PASSWORD)]) + PASSWORD)
    _, status = recv_exact(sock, 2)
    print("auth status", status)  # 0 = sucesso
    if status != 0:
        raise SystemExit("wrong username or password")

# 3. Requisição CONNECT com nome de domínio (ATYP 0x03): o proxy resolve o DNS
name = TARGET_HOST.encode()
sock.sendall(b"\x05\x01\x00\x03" + bytes([len(name)]) + name + struct.pack(">H", TARGET_PORT))
ver, rep, _, atyp = recv_exact(sock, 4)
print("reply code", rep)  # 0 = sucesso, 4 = host inalcançável, 5 = conexão recusada
if rep != 0:
    raise SystemExit(f"SOCKS5 request failed with REP={rep}")
addr_len = {1: 4, 4: 16}.get(atyp) or recv_exact(sock, 1)[0]
recv_exact(sock, addr_len + 2)  # endereço e porta vinculados, não precisamos deles aqui

# 4. Daqui em diante o socket é um túnel simples: o TLS vai de ponta a ponta com o destino
tls = ssl.create_default_context().wrap_socket(sock, server_hostname=TARGET_HOST)
tls.sendall(b"GET /ip HTTP/1.1\r\nHost: httpbin.org\r\nConnection: close\r\n\r\n")
response = b""
while chunk := tls.recv(4096):
    response += chunk
print(response.decode(errors="replace").split("\r\n\r\n", 1)[1])

Como o SOCKS5 transporta tráfego UDP?

O proxy não repassa UDP simplesmente na porta em que você se conecta. O caminho tem quatro etapas:

  1. O cliente abre a conexão TCP de sempre, faz a autenticação e envia uma requisição UDP ASSOCIATE.
  2. O proxy responde com o endereço e a porta do seu relay UDP, o ponto que recebe e reenvia os datagramas.
  3. O cliente envia cada datagrama ao relay com um pequeno cabeçalho que contém o endereço e a porta de destino; o relay o encaminha e empacota as respostas do mesmo jeito.
  4. A associação dura enquanto durar a conexão TCP do passo 1.

Os dois lados precisam implementar isso. O Chrome, por exemplo, nunca repassa UDP pelo SOCKS5, como afirma a documentação de proxy do Chromium. O serviço SOCKS5 da Proxynet suporta UDP. Os dois protocolos de transporte são comparados em Diferença entre TCP e UDP.

Quais são as diferenças entre SOCKS4 e SOCKS5?

O SOCKS4a entra na tabela porque fechou a lacuna do DNS antes do SOCKS5.

CaracterísticaSOCKS4SOCKS4aSOCKS5
TráfegoTCPTCPTCP e UDP
AutenticaçãoSó ID de usuário, sem senhaIgual ao SOCKS4Nenhuma, GSSAPI, usuário e senha
Endereço de destinoIPv4IPv4 ou nome de domínioIPv4, IPv6 ou nome de domínio
Resolução de DNSClienteProxyCliente ou proxy, o cliente decide
Esquema no cURLsocks4://socks4a://socks5://, socks5h://
Uso típico hojeFerramentas antigasFerramentas antigasJogos, aplicativos, mensagens, scraping

O SOCKS5 barra usuários não autorizados com senha, enquanto o SOCKS4 só consegue filtrar por IP. O SOCKS5 também alcança destinos IPv6 (veja Proxies IPv4 e IPv6: qual escolher?) e transporta UDP para chamadas, streaming e jogos. No conjunto, o SOCKS5 é a versão mais flexível, e o SOCKS4 representa um estágio mais antigo e restrito do protocolo.

SOCKS5 ou proxy HTTP: qual você precisa?

Um proxy HTTP(S) entende requisições web; o SOCKS5 transporta qualquer conexão TCP ou UDP sem saber nada de HTTP. Para tráfego web, os dois funcionam, e o HTTP(S) tem suporte mais amplo nas ferramentas: se o caso for scraping puro sobre HTTP, um proxy HTTPS não traz desvantagem. Para jogos, aplicativos de desktop, protocolos que não são web e UDP, o SOCKS5 é o que funciona. A comparação completa está em Diferença entre SOCKS e HTTP proxy: qual escolher?.

socks5 vs socks5h: onde o DNS é resolvido?

Uma requisição SOCKS5 pode indicar o destino por IP ou por nome de domínio, e isso decide quem consulta o nome:

  • cURL: socks5:// resolve localmente; socks5h:// ou --socks5-hostname deixa o proxy resolver (Everything curl).
  • Python Requests e HTTPX: os mesmos esquemas; a documentação do Requests diz que socks5h resolve no proxy.
  • Firefox: a caixa "Proxy DNS ao usar SOCKS v5", ativada por padrão desde o Firefox 128.
  • Chrome: sempre deixa a resolução para o proxy SOCKS5.

No log do nosso servidor de teste, o cURL com socks5h:// chegou como domain httpbin.org:443; com socks5://, chegou como um IP puro, ou seja, a consulta já tinha passado pelo resolvedor local. Isso é mais que um detalhe: se o nome for resolvido pela sua própria máquina, a consulta DNS revela à sua rede e à sua operadora cada domínio que você visita, mesmo que o tráfego depois passe pelo proxy. Por isso, prefira a resolução remota. Os testes de vazamento estão em Vazamentos de WebRTC e DNS: o que são e como evitar.

O proxy SOCKS5 é seguro? Ele criptografa o tráfego?

Não. O SOCKS5 muda o caminho do seu tráfego, não o conteúdo. O HTTPS já criptografa as páginas web, então o proxy só fica sabendo o destino e a porta; HTTP simples, FTP ou e-mail sem TLS podem ser lidos no caminho.

  • A senha do proxy trafega em texto puro. A própria RFC 1929 diz isso. Use uma senha exclusiva, ou uma whitelist de IP em redes compartilhadas.
  • O operador vê as suas conexões. Um proxy pago é operado por uma empresa conhecida; as listas gratuitas de SOCKS5, não. Veja Proxies gratuitos e sites de web proxy são seguros?.

Se o trecho até o proxy precisar ser criptografado, ssh -D 1080 user@server cria um servidor SOCKS local cujo tráfego viaja dentro do SSH.

Como usar um proxy SOCKS5?

FerramentaSuporte a SOCKS5Onde configurar
cURLSim, com senha-x socks5h://user:pass@host:port
Python Requests / HTTPXSim, com pacote extrapip install "requests[socks]" ou "httpx[socks]"
FirefoxSim, sem campo de senhaConfigurações, pesquise "proxy", Configurar proxy (versões antigas: Configurações de rede > Configurar conexão…), SOCKS v5
ChromeSó TCP, sem senha--proxy-server="socks5://host:port" com whitelist de IP
macOSSimAjustes do Sistema > Rede > Detalhes > Proxies > Proxy SOCKS
Wi-Fi do iPhone e do AndroidNão, só HTTPA porta HTTP, ou um aplicativo com configuração própria
Telegram, ProxifierSim, com senhaA configuração de proxy do próprio aplicativo

Guias passo a passo: Firefox, Windows e Chrome, Telegram e Proxifier.

Teste o proxy com o cURL

bash
# O proxy resolve o DNS (recomendado)
curl -x "socks5h://user:pass@pr.proxynet.io:1080" https://httpbin.org/ip

# A mesma requisição com opções separadas
curl --socks5-hostname pr.proxynet.io:1080 --proxy-user user:pass https://httpbin.org/ip

A resposta mostra o IP de saída do proxy. Mais opções estão em cURL com proxy: como configurar proxy HTTP e SOCKS5; uma verificação feita só pelo navegador está em Seu proxy está funcionando? Como testar um proxy.

Use em Python com novas tentativas

Este script tenta de novo quando a rede falha, mas para na hora diante de erros de configuração, que uma nova tentativa não resolve.

python
# pip install "requests[socks]"
import time

import requests

PROXY = "socks5h://user:pass@pr.proxynet.io:1080"  # socks5h = o proxy resolve o DNS
PROXIES = {"http": PROXY, "https": PROXY}

# Erros de configuração: tentar de novo não resolve
FATAL = ("SOCKS5 authentication failed", "sent invalid data", "Missing dependencies for SOCKS")


def fetch(url, attempts=3):
    for attempt in range(1, attempts + 1):
        try:
            r = requests.get(url, proxies=PROXIES, timeout=(10, 30))
            r.raise_for_status()
            return r
        except (requests.ConnectionError, requests.Timeout, requests.exceptions.InvalidSchema) as exc:
            message = str(exc)
            if any(text in message for text in FATAL) or attempt == attempts:
                raise
            print(f"attempt {attempt} failed, retrying: {exc.__class__.__name__}")
            time.sleep(2 ** attempt)


start = time.perf_counter()
r = fetch("https://httpbin.org/ip")
print("exit IP:", r.json()["origin"], f"({time.perf_counter() - start:.2f}s)")

No nosso teste, ele imprimiu o IP de saída, falhou na hora com a senha errada e tentou de novo duas vezes com uma porta fechada. As portas aqui são exemplos; o seu painel mostra as suas.

Para que servem os proxies SOCKS5?

  • Jogos online. Os clientes de jogos usam protocolos próprios e muitas vezes UDP; uma ferramenta de roteamento envia esse tráfego pelo SOCKS5. Veja a nossa página de proxy para Growtopia como exemplo.
  • Aplicativos de mensagens. O Telegram aceita SOCKS5 com senha nas próprias configurações.
  • Programas sem configuração de proxy. O Proxifier roteia qualquer programa de desktop pelo SOCKS5, aplicativo por aplicativo.
  • Coleta de dados. Scrapers que devem resolver o DNS na saída usam SOCKS5 com socks5h; veja as nossas soluções de web scraping.

Residencial, móvel, ISP ou datacenter: o que verificar antes de comprar proxies SOCKS5

SOCKS5 é um protocolo, não um tipo de IP. Comprar um proxy SOCKS5 significa escolher o tipo de IP certo para a tarefa e um serviço que funcione com as suas ferramentas.

Tipo de IPDe onde vem o IPIndicado para
DatacenterServidores de data center, fixoJogos, transferências grandes, destinos que não filtram por tipo de IP
ISP estáticoEndereços de provedores de internet residencial, fixos por mesesSessões longas, gestão de contas
ResidencialConexões domésticas, rotativo ou de sessão fixaScraping, resultados locais, verificação de preços
MóvelIPs de operadoras 4G/5GAplicativos móveis, plataformas que esperam IPs de operadora

Um proxy SOCKS5 privado é um IP que só você usa; os IPs residenciais e móveis, por outro lado, vêm de um pool compartilhado. Veja Diferença entre proxy residencial e datacenter. Antes de comprar, verifique:

  1. UDP. Nem todo serviço SOCKS5 repassa UDP. O da Proxynet repassa.
  2. Autenticação. Se a sua ferramenta não consegue enviar senha SOCKS5, como acontece com o Chrome, você precisa de uma whitelist de IP; a Proxynet aceita até 10 IPs. Veja Autenticação de proxy: user:pass ou whitelist de IP.
  3. DNS remoto. O serviço deve aceitar nomes de domínio para que o socks5h funcione.
  4. Portas e credenciais. Na Proxynet, residencial e móvel usam um único gateway com portas separadas para HTTP e SOCKS5; o Gerador de endpoints do painel monta o nome de usuário com país, cidade e sessão.
  5. Sessões. As sessões fixas (de 1 a 60 minutos na Proxynet) mantêm o mesmo IP durante todo um fluxo de login.
  6. Um teste antes. Rode o comando do cURL e confira a localização e os vazamentos de DNS.

Os pools residencial e móvel da Proxynet somam 160 milhões de IPs, dos quais 140 milhões são residenciais, e o pool móvel inclui linhas Turkcell, Türk Telekom e Vodafone na Türkiye. Páginas de produto: Proxies SOCKS5, Proxies residenciais, Proxies móveis e Proxies ISP. Outras perguntas estão em O que observar ao comprar um proxy: 10 perguntas. Para ver lado a lado quem vende SOCKS5 e em que condições, confira Os melhores provedores de proxy SOCKS5 - 2026.

Erros comuns do SOCKS5 e como resolver

Reproduzimos as mensagens do cURL 8.21, do Python e do Chrome no nosso servidor de teste; o texto do pacote ausente foi citado do código-fonte do Requests.

Mensagem de erroCausa provávelSolução
curl: (97) User was rejected by the SOCKS5 server (1 1).Usuário ou senha erradosCopie as credenciais de novo; codifique os caracteres especiais para URL
curl: (97) No authentication method was acceptable.Nenhuma credencial enviada e o seu IP não está na whitelistAdicione user:pass ou coloque o seu IP na whitelist
curl: (97) Received invalid version in initial SOCKS5 response.SOCKS5 enviado para uma porta de proxy HTTPUse a porta SOCKS5
curl: (56) Proxy CONNECT abortedEsquema http:// apontado para uma porta SOCKS5Troque para socks5h://
Missing dependencies for SOCKS support.O PySocks não está instaladopip install "requests[socks]"
ERR_SOCKS_CONNECTION_FAILED (Chrome)O proxy exige uma senha que o Chrome não consegue enviarColoque o seu IP na whitelist
ERR_PROXY_CONNECTION_FAILED (Chrome)Host ou porta do proxy inacessívelConfira o host, a porta e o firewall
O jogo faz login e cai no meio da partidaO UDP não é repassadoUse um serviço SOCKS5 e uma ferramenta de roteamento com suporte a UDP

O Python embrulha esses erros em uma linha Max retries exceeded; veja Max Retries Exceeded With URL: o que é e como resolver.

Guia de decisão

Sua necessidadeRecomendação
Cliente de jogo, chamadas de voz ou outro tráfego UDPSOCKS5 com UDP, mais uma ferramenta de roteamento se precisar
Telegram ou outro aplicativo com campo para SOCKS5SOCKS5 com usuário e senha
Automação com Chrome ou ChromiumSOCKS5 com whitelist de IP, ou HTTP(S) com senha
Scraping de sites com Python ou Node.jsHTTP(S), ou SOCKS5 com socks5h
Proxy para o sistema inteiro no iPhone ou no AndroidA porta HTTP(S) do mesmo plano

Perguntas frequentes

Qual porta o SOCKS5 usa?

Por convenção, a porta 1080. Os provedores costumam usar outras portas, então use a que o seu painel mostra. As portas de proxy são explicadas em O que é a porta 8080? Portas de proxy e o que significam.

SOCKS5 é a mesma coisa que VPN?

Não. Uma VPN criptografa todo o tráfego do dispositivo até o servidor dela. O SOCKS5 cobre só os aplicativos que você configura e não criptografa nada. Veja Diferença entre proxy e VPN: quando usar cada um?.

Proxy SOCKS5 é a mesma coisa que proxy residencial?

Não. SOCKS5 é o protocolo que o seu aplicativo usa para falar com o proxy; residencial descreve de onde vem o IP de saída. Proxies residenciais, de datacenter, ISP e móveis podem ser acessados por HTTP ou por SOCKS5.

O SOCKS5 funciona com sites HTTPS?

Sim. O handshake TLS e a verificação do certificado acontecem entre o seu cliente e o site, então o proxy não consegue ler a página.

Dá para usar SOCKS5 no iPhone ou no Android?

Não pelas configurações de proxy do Wi-Fi, que nos dois sistemas aceitam só proxy HTTP. Aplicativos com configuração de proxy própria, como o Telegram, aceitam SOCKS5. Para uso no sistema inteiro, informe a porta HTTP(S) do mesmo plano, como mostramos em Como configurar proxy no celular Android.

Listas gratuitas de proxies SOCKS5 são seguras?

Não para nada que envolva login. Você não tem como saber quem opera um servidor gratuito, e ele pode ler o tráfego não criptografado. Use essas listas só para testes descartáveis.

Em resumo

O SOCKS5 repassa conexões TCP e UDP sem lê-las e substitui o SOCKS4 em todos os aspectos práticos, mas não criptografa. Use socks5h, uma whitelist de IP quando a ferramenta não consegue enviar senha SOCKS5, e confira o suporte a UDP para jogos ou chamadas. Para acesso SOCKS5 e HTTP(S) no mesmo plano, veja os nossos serviços de proxy.