Erzwingen von IPv4 oder IPv6 im Net/http-Client
In Go 1.11 bietet das Net/http-Paket eine DialContext-Funktion, die Ihnen dies ermöglicht Abfangen und Steuern der ausgehenden Netzwerkverbindung. Mit dieser Funktion kann der Client gezwungen werden, entweder IPv4 oder IPv6 zu verwenden.
Nur IPv4-Verbindungen
Um Verbindungen auf IPv4-Adressen einzuschränken, ändern Sie das DualStack-Feld von Setzen Sie den Dialer auf „false“ und definieren Sie eine Steuerfunktion, die einen Fehler für den Netzwerktyp „ipv4“ zurückgibt:
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)
}
}
Diese Änderung fängt Netzwerkverbindungen ab und gibt einen Fehler zurück, wenn versucht wird, eine IPv4-Verbindung herzustellen.
Hinweis: Der an die Steuerfunktion übergebene Netzwerkwert kann „tcp4“ sein. für IPv4 und „tcp6“ für IPv6, auch wenn „tcp“ an die DialContext-Funktion übergeben wurde.
Nur IPv6-Verbindungen
Um reine IPv6-Verbindungen zu erzwingen, Setzen Sie DualStack auf „false“ und geben Sie einen Fehler für den Netzwerktyp „ipv6“ zurück:
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)
}
}
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3