Forzar IPv4 o IPv6 en el cliente net/http
En Go 1.11, el paquete net/http proporciona una función DialContext que le permite interceptar y controlar la conexión de red saliente. Esta función se puede utilizar para forzar al cliente a usar IPv4 o IPv6.
Conexiones solo IPv4
Para restringir las conexiones a direcciones IPv4, modifique el campo DualStack de el Marcador a falso y defina una función de Control que devuelva un error para el tipo de red "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)
}
}
Esta modificación intercepta conexiones de red y devuelve un error si se intenta una conexión IPv4.
Nota: El valor de red pasado a la función de control puede ser "tcp4" para IPv4 y "tcp6" para IPv6, incluso si "tcp" se pasó a la función DialContext.
Solo IPv6 Conexiones
Para forzar conexiones solo IPv6, configure DualStack en falso y devuelva un error para el tipo de red "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)
}
}
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3