首頁 > 後端開發 > Golang > 如何在 Go 的 net/http 用戶端強制使用 IPv4/IPv6?

如何在 Go 的 net/http 用戶端強制使用 IPv4/IPv6?

Linda Hamilton
發布: 2024-11-01 04:33:28
原創
443 人瀏覽過

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

在Go 的net/http 用戶端強制使用IPv4/IPv6

問題:

使用🎜>問題:

使用Go 1.11 的Go 1.11 net/ http 用戶端,如何確定網域是否僅支援IPv6 並在需要時阻止其使用IPv4?

解決方案:

強制使用 IPv4 或 IPv6 Go的net/http客戶端,使用net.Dialer的Control選項修改其DialContext函數。此函數檢查用於傳出連線的網路類型。
<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>
登入後複製

將以下程式碼複製到您的主函數中:

    說明:
  • 使用傳出連接的網路類型(例如“tcp4”或“tcp6”)呼叫Control 函數。
  • 如果網路類型為“ipv4”,Control 函數將傳回錯誤以防止建立 IPv4 連線。
透過使用此方法,僅允許 IPv6 連接,有效阻止任何 IPv4 使用。

以上是如何在 Go 的 net/http 用戶端強制使用 IPv4/IPv6?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板