I standard-HTTP-transporten i Go 1.27.3 handsamar socks5 og socks5h målnamn likt. Eit mål med vertsnamn vert sendt til proxyen som vertsnamn. Byte mellom desse skjemaa vekslar ikkje mellom lokal og ekstern DNS slik som i 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)
}

Byt ut dokumentasjonsadressa med ditt SOCKS5-endepunkt; kandidatar finst i lista over SOCKS5-proxyar. Dømet nyttar transporten til net/http sjølv; eit anna Go-bibliotek kan ha ei anna åtferd.

To namn må likevel skiljast. Ei numerisk proxyadresse krev ikkje oppslag av proxyverten; ein namngjeven proxy må finnast lokalt før ein SOCKS-førespurnad kan sendast. Eit numerisk mål har ikkje noko målnamn å slå opp og viser ikkje vertsnamnhandsaminga. For å sjå det faktiske SOCKS-valet, kontroller om målfeltet inneheld eit namn eller ei adresse.

Standardtransporten støttar proxyskjemaa http, https, socks5 og socks5h. Ein generell SOCKS-etikett slår ikkje fast SOCKS5-støtte på eit endepunkt. Dømet sender HTTP over TCP og testar korkje andre SOCKS-kommandoar eller UDP-vidaresending.

Relaterte artiklar