Go 1.27.3:n tavallisessa HTTP-siirtototeutuksessa socks5 ja socks5h käsittelevät kohdenimiä samalla tavalla. Palvelinnimellä annettu kohde lähetetään välityspalvelimelle palvelinnimenä. Näiden skeemojen vaihtaminen ei vaihda paikallisen ja etä-DNS:n välillä kuten curlissa.

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)
}

Korvaa dokumentaation osoite omalla SOCKS5-päätepisteelläsi; ehdokkaita voi selata SOCKS5-välityspalvelinten luettelosta. Esimerkki käyttää net/http:n omaa siirtototeutusta; toinen Go-kirjasto voi toimia eri tavalla.

Kaksi nimeä on silti erotettava. Numeerinen välityspalvelinosoite ei tarvitse välityspalvelimen nimen hakua; nimetty välityspalvelin on löydettävä paikallisesti ennen SOCKS-pyynnön lähettämistä. Numeerisella kohteella ei ole selvitettävää nimeä eikä se osoita palvelinnimien käsittelyä. Tarkista todellinen SOCKS-valinta katsomalla, sisältääkö kohdekenttä nimen vai osoitteen.

Tavallinen siirtototeutus tukee välityspalvelinskeemoja http, https, socks5 ja socks5h. Yleinen SOCKS-nimike ei osoita päätepisteen SOCKS5-tukea. Tämä esimerkki lähettää HTTP:tä TCP:n päällä eikä testaa muita SOCKS-komentoja tai UDP-välitystä.

Aiheeseen liittyvät artikkelit