Al transport HTTP estàndard de Go 1.27.3, socks5 i socks5h tracten igual els noms de destinació. Una destinació amb nom d’amfitrió s’envia al proxy com a nom d’amfitrió. Canviar aquests esquemes no alterna entre DNS local i remot com passa a curl.

package main

import (
    "fmt"
    "log"
    "net/http"
    "net/url"
    "time"
)

func main() {
    proxyURL, err := url.Parse("socks5://203.0.113.10:1080")
    if err != nil {
        log.Fatal(err)
    }

    transport := http.DefaultTransport.(*http.Transport).Clone()
    transport.Proxy = http.ProxyURL(proxyURL)
    defer transport.CloseIdleConnections()

    client := &http.Client{
        Transport: transport,
        Timeout: 15 * time.Second,
    }
    response, err := client.Get("https://example.com/")
    if err != nil {
        log.Fatal(err)
    }
    defer response.Body.Close()
    fmt.Println(response.StatusCode)
}

Substituïu l’adreça de documentació pel vostre punt d’accés SOCKS5; podeu buscar candidats a la llista de proxys SOCKS5. L’exemple usa el transport propi de net/http; una altra biblioteca Go pot tenir un comportament diferent.

Tot i això, cal distingir dos noms. Una adreça numèrica de proxy no necessita cercar el seu amfitrió; un proxy indicat per nom s’ha de trobar localment abans d’enviar una petició SOCKS. Una destinació numèrica no té nom per resoldre i no demostra el tractament dels noms d’amfitrió. Per inspeccionar la selecció SOCKS real, mireu si el camp de destinació porta un nom o una adreça.

El transport estàndard admet els esquemes de proxy http, https, socks5 i socks5h. Una etiqueta genèrica SOCKS no demostra que el punt d’accés admeti SOCKS5. Aquest exemple envia HTTP sobre TCP i no prova altres ordres SOCKS ni la retransmissió UDP.

Articles relacionats