SOCKS5-hýsilheitauppfletting í HTTP-biðlara Go
Hvers vegna socks5 og socks5h velja ekki ólíka DNS-hami í staðlaðri HTTP-flutningslausn Go.
Í staðlaðri HTTP-flutningslausn Go 1.27.3 meðhöndla socks5 og socks5h áfangastaðarnöfn eins. Mark með hýsilheiti er sent milliþjóninum sem hýsilheiti. Að skipta milli skemanna skiptir ekki milli staðbundins og fjarlægs DNS eins og í 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)
}
Skiptu skjölunarvistfanginu út fyrir þinn SOCKS5-endapunkt; valkosti má finna á listanum yfir SOCKS5-milliþjóna. Dæmið notar eigin flutningslausn net/http; annað Go-safn getur útfært aðra hegðun.
Samt þarf að greina á milli tveggja nafna. Tölulegt milliþjónsvistfang þarf enga uppflettingu milliþjónshýsils; milliþjón með nafni verður að finna staðbundið áður en senda má SOCKS-beiðni. Tölulegur áfangastaður hefur ekkert markheiti til að leysa og getur ekki sýnt meðhöndlun hýsilheita. Til að skoða raunverulegt SOCKS-val skaltu athuga hvort áfangastaðarreiturinn beri nafn eða vistfang.
Staðlaða flutningslausnin styður milliþjónsskema http, https, socks5 og socks5h. Almennt SOCKS-heiti staðfestir ekki SOCKS5-stuðning á endapunkti. Dæmið sendir HTTP yfir TCP og prófar hvorki aðrar SOCKS-skipanir né UDP-framsendingu.