第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

golang 強(qiáng)制 net/http 客戶端使用 IPv4 / IPv6

golang 強(qiáng)制 net/http 客戶端使用 IPv4 / IPv6

Go
DIEA 2023-05-04 16:58:39
我正在使用 go1.11 net/http 并希望檢測(cè)域是否僅支持 ipv6。你做了什么?我創(chuàng)建了自己的 DialContext,因?yàn)槲蚁霗z測(cè)域是否僅支持 ipv6。下面的代碼package mainimport (    "errors"    "fmt"    "net"    "net/http"    "syscall"    "time")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" {                    // I want to  cancel connection here client.Get("http://myexample.com") return a non-nil err.                    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))}func main(){    ModifiedTransport();}我現(xiàn)在不知道如何關(guān)閉請(qǐng)求,即使我可以進(jìn)入network == "ipv4".添加Python 可以通過Force requests to use IPv4 / IPv6 來解決這個(gè)問題。我不知道如何在 golang 中做到這一點(diǎn)。有人可以幫助我嗎?非常感謝!
查看完整描述

4 回答

?
RISEBY

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊

傳遞networkControl函數(shù)的是tcp4IPv4 連接或tcp6IPv6 連接(如果您正在建立傳出 TCP 連接)。

? ? ? ? // Network and address parameters passed to Control method are not

? ? ? ? // necessarily the ones passed to Dial. For example, passing "tcp" to Dial

? ? ? ? // will cause the Control function to be called with "tcp4" or "tcp6".

(在非 TCP 連接的情況下,其他字符串也是可能的。)

已知網(wǎng)絡(luò)是“tcp”、“tcp4”(僅限 IPv4)、“tcp6”(僅限 IPv6)、“udp”、“udp4”(僅限 IPv4)、“udp6”(僅限 IPv6)、“ip” 、“ip4”(僅限 IPv4)、“ip6”(僅限 IPv6)、“unix”、“unixgram”和“unixpacket”。


查看完整回答
反對(duì) 回復(fù) 2023-05-04
?
弒天下

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊

哦。我自己解決了這個(gè)問題。


我們無法配置強(qiáng)制 ipv6 連接,因?yàn)樗怯簿幋a的


...

if cm.scheme() == "https" && t.DialTLS != nil {

? ? ? ? var err error

? ? ? ? pconn.conn, err = t.DialTLS("tcp", cm.addr())

? ? ? ? if err != nil {

? ? ? ? ? ? return nil, wrapErr(err)

? ? ? ? }

...

我為 transport.go 添加了一個(gè) ipv6only 標(biāo)志,一個(gè) getTcpString() 并且它有效。


查看完整回答
反對(duì) 回復(fù) 2023-05-04
?
30秒到達(dá)戰(zhàn)場(chǎng)

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊

這適用于 go1.17.1:


var (

    zeroDialer net.Dialer

    httpClient = &http.Client{

        Timeout: 10 * time.Second,

    }

)


func init() {

    transport := http.DefaultTransport.(*http.Transport).Clone()

    transport.DialContext = func(ctx context.Context, network, addr string) (net.Conn, error) {

        return zeroDialer.DialContext(ctx, "tcp4", addr)

    }

    httpClient.Transport = transport

}


查看完整回答
反對(duì) 回復(fù) 2023-05-04
?
慕雪6442864

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

我認(rèn)為即使服務(wù)器正在偵聽“tcp6”,使用“tcp”運(yùn)行 net.Dial 的客戶端也應(yīng)該可以正常工作——在雙棧設(shè)置中。


當(dāng)我遇到這個(gè)問題時(shí),罪魁禍?zhǔn)资?/etc/hosts。它有一個(gè)主機(jī)條目,映射到 ipv4 地址而不是 ipv6 地址。這導(dǎo)致連接被拒絕。


我的測(cè)試示例如下:


客戶端代碼:


package main


import "net"

import "fmt"


func main() {

    conn, err := net.Dial("tcp", "hostname:9876")

    if err != nil {

        fmt.Println("Error in net.Dial", err)

        return

    }


    conn.Close()

    fmt.Println("Successful")

}

服務(wù)器代碼:


package main


import "net"

import "fmt"


func main() {

    lis, err := net.Listen("tcp6", ":9876")

    if err != nil {

        fmt.Println("Error in listen", err)

        return

    }


    for {

        _, err := lis.Accept()

        if err != nil {

            fmt.Println("Error in Accept", err)

            return

        }

    }

}

這段代碼應(yīng)該可以在雙堆棧設(shè)置上與干凈的 /etc/hosts 文件一起正常工作。


謝謝。


查看完整回答
反對(duì) 回復(fù) 2023-05-04
  • 4 回答
  • 0 關(guān)注
  • 814 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)