SOCKS5 resursdatoru nosaukumu atrisināšana Go HTTP klientā
Kāpēc socks5 un socks5h neizvēlas atšķirīgus DNS režīmus Go standarta HTTP transportā.
Go 1.27.3 standarta HTTP transportā socks5 un socks5h galamērķu nosaukumus apstrādā vienādi. Mērķis ar resursdatora nosaukumu tiek nosūtīts starpniekserverim kā nosaukums. Šo shēmu maiņa nepārslēdz vietējo un attālo DNS kā 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)
}
Aizstājiet dokumentācijas adresi ar savu SOCKS5 galapunktu; kandidātus var skatīt SOCKS5 starpniekserveru sarakstā. Piemērs izmanto paša net/http transportu; cita Go bibliotēka var darboties citādi.
Tomēr jāatšķir divi nosaukumi. Skaitliskai starpniekservera adresei nav vajadzīga tā resursdatora nosaukuma meklēšana; nosaukts starpniekserveris jāatrod lokāli pirms SOCKS pieprasījuma sūtīšanas. Skaitliskam galamērķim nav atrisināma nosaukuma, un tas nepierāda nosaukumu apstrādi. Lai pārbaudītu faktisko SOCKS izvēli, skatieties, vai galamērķa lauks satur nosaukumu vai adresi.
Standarta transports atbalsta starpniekserveru shēmas http, https, socks5 un socks5h. Vispārīgs SOCKS apzīmējums nepierāda SOCKS5 atbalstu galapunktā. Šis piemērs sūta HTTP pa TCP un netestē citas SOCKS komandas vai UDP pārsūtīšanu.