Liaison d'un client http.à une adresse IP dans Go
Dans le domaine de l'informatique distribuée, il est souvent nécessaire de contrôler l'adresse IP source adresse d'où proviennent les requêtes HTTP. Avec plusieurs cartes réseau sur un ordinateur client, cette granularité peut être essentielle.
Considérez le code client HTTP de base suivant :
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()
}
Pour lier ce client à une carte réseau ou une adresse IP spécifique, nous devons modifier son champ Transport. Nous utiliserons un net.Transport personnalisé qui utilise un net.Dialer personnalisé. Le net.Dialer, à son tour, nous permet de spécifier l'adresse locale pour les connexions sortantes.
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,
},
}
}
Avec cette modification, notre client HTTP est désormais lié à l'adresse IP spécifiée, garantissant que toutes les requêtes sortantes proviennent de la carte réseau souhaitée.
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