Heim >Backend-Entwicklung >Golang >Wie erzwinge ich die IPv4/IPv6-Nutzung im Net/http-Client von Go?

Wie erzwinge ich die IPv4/IPv6-Nutzung im Net/http-Client von Go?

Linda Hamilton
Linda HamiltonOriginal
2024-11-01 04:33:28418Durchsuche

How to Enforce IPv4/IPv6 Usage in Go's net/http Client?

Erzwingung der IPv4/IPv6-Nutzung im Netz/http-Client von Go

Problem:

Verwendung des Netzes/ von Go 1.11/ http-Client, wie kann man feststellen, ob eine Domain nur IPv6 ist, und verhindern, dass sie IPv4 verwendet, wenn? gewünscht?

Lösung:

Um die IPv4- oder IPv6-Nutzung im Net/HTTP-Client von Go zu erzwingen, ändern Sie dessen DialContext-Funktion mithilfe der Control-Option des net.Dialer. Diese Funktion überprüft den Netzwerktyp, der für ausgehende Verbindungen verwendet wird.

Kopieren Sie den folgenden Code in Ihre Hauptfunktion:

<code class="go">func ModifiedTransport() {
    var MyTransport = &http.Transport{
        DialContext: (&net.Dialer{
            Timeout:   30 * time.Second,
            KeepAlive: 30 * time.Second,
            DualStack: false,
            Control: func(network, address string, c syscall.RawConn) error {
                if network == "ipv4" {
                    // Force cancellation of IPv4 connections
                    return errors.New("you should not use ipv4")
                }
                return nil
            },
        }).DialContext,
        MaxIdleConns:          100,
        IdleConnTimeout:       90 * time.Second,
        TLSHandshakeTimeout:   10 * time.Second,
        ExpectContinueTimeout: 1 * time.Second,
    }
    var myClient = http.Client{Transport: MyTransport}
    resp, myerr := myClient.Get("http://www.github.com")
    if myerr != nil {
        fmt.Println("request error")
        return
    }
    var buffer = make([]byte, 1000)
    resp.Body.Read(buffer)
    fmt.Println(string(buffer))
}</code>

Erklärung:

  • Die Steuerungsfunktion wird mit dem Netzwerktyp der ausgehenden Verbindung aufgerufen (z. B. „tcp4“ oder „tcp6“).
  • Wenn der Netzwerktyp „ipv4“ ist, gibt die Kontrollfunktion einen Fehler zurück, um den Aufbau einer IPv4-Verbindung zu verhindern.
  • Mit diesem Ansatz werden nur IPv6-Verbindungen hergestellt erlaubt sein, wodurch jegliche IPv4-Nutzung effektiv blockiert wird.

Das obige ist der detaillierte Inhalt vonWie erzwinge ich die IPv4/IPv6-Nutzung im Net/http-Client von Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn