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 ರಿಲೇಯನ್ನಾಗಲಿ ಪರೀಕ್ಷಿಸುವುದಿಲ್ಲ.