SOCKS5-palvelinnimien selvitys Gon HTTP-asiakkaassa
Miksi socks5 ja socks5h eivät valitse eri DNS-tiloja Gon tavallisessa HTTP-siirtototeutuksessa.
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ä.