Vinculando um http.Client a um endereço IP no Go
No domínio da computação distribuída, muitas vezes é necessário controlar o IP de origem endereço de origem das solicitações HTTP. Com vários NICs em uma máquina cliente, essa granularidade pode ser essencial.
Considere o seguinte código de cliente HTTP básico:
package main
import "net/http"
func main() {
webclient := &http.Client{}
req, _ := http.NewRequest("GET", "http://www.google.com", nil)
httpResponse, _ := webclient.Do(req)
defer httpResponse.Body.Close()
}
Para vincular este cliente a uma NIC ou endereço IP específico, precisamos modificar seu campo Transport. Usaremos um net.Transport personalizado que emprega um net.Dialer personalizado. O net.Dialer, por sua vez, nos permite especificar o endereço local para conexões de saída.
import (
"net"
"net/http"
)
func main() {
localAddr, err := net.ResolveIPAddr("ip", "")
if err != nil {
panic(err)
}
localTCPAddr := net.TCPAddr{
IP: localAddr.IP,
}
webclient := &http.Client{
Transport: &http.Transport{
Proxy: http.ProxyFromEnvironment,
DialContext: (&net.Dialer{LocalAddr: &localTCPAddr}).DialContext,
MaxIdleConns: 100,
IdleConnTimeout: 90 * time.Second,
TLSHandshakeTimeout: 10 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
},
}
}
Com esta modificação, nosso cliente HTTP agora está vinculado ao endereço IP especificado, garantindo que todas as solicitações de saída sejam originadas da NIC desejada.
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