Forçar IPv4 ou IPv6 no cliente net/http
No Go 1.11, o pacote net/http fornece uma função DialContext que permite que você interceptar e controlar a conexão de rede de saída. Esta função pode ser usada para forçar o cliente a usar IPv4 ou IPv6.
Conexões somente IPv4
Para restringir conexões a endereços IPv4, modifique o campo DualStack de o Dialer para false e defina uma função de controle que retorne um erro para o tipo de rede "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 modificação intercepta conexões de rede e retorna um erro se uma conexão IPv4 for tentada.
Nota: O valor de rede passado para a função de controle pode ser "tcp4" para IPv4 e "tcp6" para IPv6, mesmo que "tcp" tenha sido passado para a função DialContext.
Conexões somente IPv6
Para forçar conexões somente IPv6, defina DualStack como falso e retorne um erro para o tipo de rede "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)
}
}
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3