Forcer IPv4 ou IPv6 dans le client net/http
Dans Go 1.11, le package net/http fournit une fonction DialContext qui vous permet de intercepter et contrôler la connexion réseau sortante. Cette fonction peut être utilisée pour forcer le client à utiliser IPv4 ou IPv6.
Connexions IPv4 uniquement
Pour restreindre les connexions aux adresses IPv4, modifiez le champ DualStack de le numéroteur sur false et définissez une fonction de contrôle qui renvoie une erreur pour le type de réseau "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)
}
}
Cette modification intercepte les connexions réseau et renvoie une erreur si une connexion IPv4 est tentée.
Remarque : La valeur réseau transmise à la fonction Contrôle peut être "tcp4" pour IPv4 et "tcp6" pour IPv6, même si "tcp" a été transmis à la fonction DialContext.
IPv6-Only Connexions
Pour forcer les connexions IPv6 uniquement, définissez DualStack sur false et renvoyez une erreur pour le type de réseau "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)
}
}
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3