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 ରିଲେ ପରୀକ୍ଷା କରେ ନାହିଁ।