Go HTTP mijozida SOCKS5 xost nomlarini aniqlash
Go standart HTTP transportida socks5 va socks5h nima uchun turli DNS rejimlarini tanlamasligini tushuning.
Go 1.27.3 standart HTTP transportida socks5 va socks5h manzil nomlarini bir xil qayta ishlaydi. Xost nomi bilan berilgan nishon proksiga xost nomi sifatida yuboriladi. Bu sxemalarni almashtirish curl dagidek mahalliy va masofaviy DNS o‘rtasida almashmaydi.
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)
}
Hujjatlar uchun berilgan manzilni o‘z SOCKS5 oxirgi nuqtangiz bilan almashtiring; variantlarni SOCKS5 proksilar ro‘yxatida ko‘rish mumkin. Misol net/http paketining o‘z transportidan foydalanadi; boshqa Go kutubxonasi boshqacha ishlashi mumkin.
Shunga qaramay, ikkita nomni farqlash kerak. Raqamli proksi manzili proksi xostini qidirishni talab qilmaydi; nom bilan berilgan proksi SOCKS so‘rovi yuborilishidan oldin mahalliy tarzda topilishi kerak. Raqamli nishonda aniqlanadigan nom yo‘q va u xost nomlari qanday qayta ishlanishini ko‘rsata olmaydi. SOCKS amalda nimani tanlaganini tekshirish uchun nishon maydonida nom yoki manzil borligiga qarang.
Standart transport http, https, socks5 va socks5h proksi sxemalarini qo‘llaydi. Umumiy SOCKS yorlig‘i oxirgi nuqtada SOCKS5 qo‘llanishini isbotlamaydi. Ushbu misol HTTP ni TCP orqali yuboradi; boshqa SOCKS buyruqlarini ham, UDP uzatishni ham sinamaydi.