فرض IPv4 أو IPv6 في عميل net/http
في Go 1.11، توفر حزمة net/http وظيفة DialContext التي تتيح لك اعتراض والتحكم في اتصال الشبكة الصادرة. يمكن استخدام هذه الوظيفة لإجبار العميل على استخدام IPv4 أو IPv6.
اتصالات IPv4 فقط
لتقييد الاتصالات بعناوين IPv4، قم بتعديل حقل DualStack الخاص بـ المسجل إلى خطأ وتحديد وظيفة التحكم التي ترجع خطأ لنوع الشبكة "ipv4":
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)
}
}
يعترض هذا التعديل اتصالات الشبكة ويعيد خطأ في حالة محاولة اتصال IPv4.
ملاحظة: يمكن أن تكون قيمة الشبكة التي تم تمريرها إلى وظيفة التحكم "tcp4" لـ IPv4 و"tcp6" لـ IPv6، حتى إذا تم تمرير "tcp" إلى وظيفة DialContext.
IPv6 فقط الاتصالات
لفرض اتصالات IPv6 فقط، اضبط DualStack على false وأرجع خطأ لنوع الشبكة "ipv6":
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 == "ipv6" {
return errors.New("you should not use ipv6")
}
return nil
},
}).DialContext,
}
client := http.Client{Transport: MyTransport}
_, err := client.Get("http://www.github.com")
if err != nil {
fmt.Println(err)
}
}
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3