नेट/http क्लाइंट में IPv4 या IPv6 को बाध्य करना
गो 1.11 में, नेट/http पैकेज एक डायलकॉन्टेक्स्ट फ़ंक्शन प्रदान करता है जो आपको अनुमति देता है आउटगोइंग नेटवर्क कनेक्शन को रोकना और नियंत्रित करना। इस फ़ंक्शन का उपयोग क्लाइंट को IPv4 या IPv6 का उपयोग करने के लिए बाध्य करने के लिए किया जा सकता है। डायलर गलत है और एक नियंत्रण फ़ंक्शन को परिभाषित करता है जो नेटवर्क प्रकार "आईपीवी4" के लिए एक त्रुटि देता है:
टाइप मायट्रांसपोर्ट संरचना { http.राउंडट्रिपर } func (t *MyTransport) राउंडट्रिप(req *http.Request) (*http.Response, त्रुटि) { वापसी http.DefaultTransport.RoundTrip(req) } func मुख्य() { मेरापरिवहन := &मेरापरिवहन{ डायलकॉन्टेक्स्ट: (&net.Dialer{ डुअलस्टैक: गलत, नियंत्रण: func(नेटवर्क, एड्रेस स्ट्रिंग, c syscall.RawConn) त्रुटि { यदि नेटवर्क == "आईपीवी4" { वापसी त्रुटियाँ.नया('आपको आईपीवी4 का उपयोग नहीं करना चाहिए') } शून्य वापसी }, }).DialContext, } ग्राहक := http.ग्राहक {परिवहन: MyTransport} _, गलती := client.Get('http://www.github.com') यदि त्रुटि !=शून्य { fmt.Println(त्रुटि) } }
यह संशोधन नेटवर्क कनेक्शन को रोकता है और यदि आईपीवी4 कनेक्शन का प्रयास किया जाता है तो एक त्रुटि देता है।type MyTransport struct {
http.RoundTripper
}
func (t *MyTransport) RoundTrip(req *http.Request) (*http.Response, error) {
return http.DefaultTransport.RoundTrip(req)
}
func main() {
MyTransport := &MyTransport{
DialContext: (&net.Dialer{
DualStack: false,
Control: func(network, address string, c syscall.RawConn) error {
if network == "ipv4" {
return errors.New("you should not use ipv4")
}
return nil
},
}).DialContext,
}
client := http.Client{Transport: MyTransport}
_, err := client.Get("http://www.github.com")
if err != nil {
fmt.Println(err)
}
}
आईपीवी6-केवल कनेक्शनकेवल-आईपीवी6 कनेक्शन को बाध्य करने के लिए, डुअलस्टैक को गलत पर सेट करें और नेटवर्क प्रकार "आईपीवी6" के लिए एक त्रुटि लौटाएं:
MyTransport संरचना टाइप करें { http.राउंडट्रिपर } func (t *MyTransport) राउंडट्रिप(req *http.Request) (*http.Response, त्रुटि) { वापसी http.DefaultTransport.RoundTrip(req) } func मुख्य() { मेरापरिवहन := &मेरापरिवहन{ डायलकॉन्टेक्स्ट: (&net.Dialer{ डुअलस्टैक: गलत, नियंत्रण: func(नेटवर्क, एड्रेस स्ट्रिंग, c syscall.RawConn) त्रुटि { यदि नेटवर्क == "आईपीवी6" { वापसी त्रुटियाँ.नया('आपको आईपीवी6 का उपयोग नहीं करना चाहिए') } शून्य वापसी }, }).DialContext, } ग्राहक := http.ग्राहक {परिवहन: MyTransport} _, गलती := client.Get('http://www.github.com') यदि त्रुटि !=शून्य { fmt.Println(त्रुटि) } }
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3