„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie erzwinge ich IPv4- oder IPv6-Verbindungen im Net/http-Client von Go?

Wie erzwinge ich IPv4- oder IPv6-Verbindungen im Net/http-Client von Go?

Veröffentlicht am 12.11.2024
Durchsuche:364

How to force IPv4 or IPv6 connections in Go\'s net/http client?

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)
    }
}
Neuestes Tutorial Mehr>

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