Go च्या HTTP क्लायंटमध्ये SOCKS5 होस्टनाव निराकरण
Go च्या प्रमाणित HTTP ट्रान्सपोर्टमध्ये socks5 आणि socks5h वेगवेगळे DNS मोड का निवडत नाहीत ते समजून घ्या.
Go 1.27.3 च्या प्रमाणित HTTP ट्रान्सपोर्टमध्ये socks5 आणि socks5h गंतव्याची नावे एकाच प्रकारे हाताळतात. होस्टनावाने दिलेले लक्ष्य प्रॉक्सीकडे होस्टनाव म्हणूनच पाठवले जाते. या स्कीम बदलल्याने curl प्रमाणे स्थानिक आणि दूरस्थ DNS यांच्यात बदल होत नाही.
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)
}
दस्तऐवजीकरणासाठी दिलेला पत्ता तुमच्या SOCKS5 एंडपॉइंटने बदला; पर्याय SOCKS5 प्रॉक्सी यादीत पाहता येतील. उदाहरण net/http चा स्वतःचा ट्रान्सपोर्ट वापरते; दुसरी Go लायब्ररी वेगळे वर्तन लागू करू शकते.
तरीही दोन नावांमधील फरक लक्षात घ्यावा लागतो. संख्यात्मक प्रॉक्सी पत्त्यासाठी प्रॉक्सी होस्टचे नाव शोधण्याची गरज नसते; नावाने दिलेला प्रॉक्सी SOCKS विनंती पाठवण्यापूर्वी स्थानिकरीत्या शोधला पाहिजे. संख्यात्मक गंतव्याला निराकरण करण्यासाठी लक्ष्यनाव नसते, त्यामुळे ते होस्टनावांची हाताळणी दाखवू शकत नाही. SOCKS ची प्रत्यक्ष निवड तपासण्यासाठी गंतव्याच्या फील्डमध्ये नाव आहे की पत्ता ते पाहा.
प्रमाणित ट्रान्सपोर्ट http, https, socks5 आणि socks5h या प्रॉक्सी स्कीमना समर्थन देतो. सर्वसाधारण SOCKS लेबल एखाद्या एंडपॉइंटवर SOCKS5 समर्थन असल्याचे सिद्ध करत नाही. हे उदाहरण TCP वरून HTTP पाठवते आणि इतर SOCKS आदेश किंवा UDP रिले तपासत नाही.