Go HTTP İstemcisinde SOCKS5 Ana Makine Adı Çözümleme
Go’nun standart HTTP taşımasında socks5 ve socks5h’nin neden farklı DNS modları seçmediğini öğrenin.
Go 1.27.3’ün standart HTTP taşımasında socks5 ve socks5h hedef adlarını aynı biçimde işler. Ana makine adlı hedef proxy’ye ana makine adı olarak gönderilir. Bu şemaları değiştirmek curl’deki gibi yerel ve uzak DNS arasında geçiş yapmaz.
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)
}
Belge adresini kendi SOCKS5 uç noktanızla değiştirin; adayları SOCKS5 proxy listesinde bulabilirsiniz. Örnek net/http’nin kendi taşımasını kullanır; başka Go kitaplığı farklı davranış uygulayabilir.
Yine de iki adı ayırmak gerekir. Sayısal proxy adresi proxy ana makine araması gerektirmez; adlı proxy SOCKS isteği gönderilmeden önce yerelde bulunmalıdır. Sayısal hedefin çözülecek adı yoktur ve ana makine adı işlemesini gösteremez. Gerçek SOCKS seçimini incelemek için hedef alanının ad mı adres mi taşıdığına bakın.
Standart taşıma http, https, socks5 ve socks5h proxy şemalarını destekler. Genel SOCKS etiketi uç noktanın SOCKS5 desteğini kanıtlamaz. Bu örnek TCP üzerinden HTTP gönderir; başka SOCKS komutlarını veya UDP aktarmayı test etmez.