SOCKS5-gépnévfeloldás a Go HTTP-kliensében
Miért nem választ eltérő DNS-módot a socks5 és a socks5h a Go standard HTTP-transportjában?
A Go 1.27.3 standard HTTP-transportjában a socks5 és a socks5h azonosan kezeli a célneveket. A gépnévvel megadott célt gépnévként küldi a proxynak. E sémák cseréje nem vált helyi és távoli DNS között úgy, mint a curlben.
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)
}
Cserélje le a dokumentációs címet saját SOCKS5-végpontjára; jelölteket a SOCKS5-proxyk listáján talál. A példa a net/http saját transportját használja; más Go-könyvtár eltérő működést valósíthat meg.
Két nevet továbbra is meg kell különböztetni. A számszerű proxycím nem igényli a proxy gépnevének keresését; a névvel megadott proxyt helyben meg kell találni a SOCKS-kérés küldése előtt. A számszerű célnak nincs feloldandó célneve, így nem mutatja meg a gépnevek kezelését. A tényleges SOCKS-választáshoz nézze meg, hogy a célmező nevet vagy címet tartalmaz-e.
A standard transport a http, https, socks5 és socks5h proxysémákat támogatja. Az általános SOCKS-címke nem bizonyítja a végpont SOCKS5-támogatását. Ez a példa HTTP-t küld TCP-n, és nem tesztel más SOCKS-parancsot vagy UDP-továbbítást.