尝试分配本地地址值时出错

时间:2018-11-25 06:10:14

标签: go networking ipv6

我试图像这样设置http请求的本地地址:

localAddr, err := net.ResolveIPAddr("ip6", laddr)

if err != nil {
    log.Fatal(err)
}

localTCPAddr := net.TCPAddr{
    IP: localAddr.IP,
}

client := &http.Client{
    Transport: &http.Transport{
        Proxy: http.ProxyFromEnvironment,
        DialContext: (&net.Dialer{
            LocalAddr: &localTCPAddr,
            Timeout:   30 * time.Second,
            KeepAlive: 30 * time.Second,
            DualStack: true,
        }).DialContext,
        MaxIdleConns:          100,
        IdleConnTimeout:       90 * time.Second,
        TLSHandshakeTimeout:   10 * time.Second,
        ExpectContinueTimeout: 1 * time.Second,
    },
}

供参考:laddr变量如下所示:

 2620:13a:c020:0016:1f7b:169c:846f:218a:49152

尝试发送请求时发生错误,这是错误: 2018/11/25 00:17:58查找2620:13a:c020:0016:1f7b:169c:846f:218a:49152:没有这样的主机。

我不确定是什么导致此错误。有关我的环境的一些细节:它是Ubuntu全新的VPS,几乎没有安装。

编辑: 即使按照下面指出的那样删除端口,我仍然会收到此错误:  拨打tcp [2620:13a:c020:16:1f7b:169c:846f:218a]:0-> [remoteip]:[remoteport]绑定:无法分配请求的地址

2 个答案:

答案 0 :(得分:3)

2620:13a:c020:0016:1f7b:169c:846f:218a:49152不是有效的IPv6地址。您有一个额外的49152,它甚至不是有效的IPv6附件。 2620:13a:c020:0016:1f7b:169c:846f:218a是有效的IPv6地址。

Validator

修改

地址解析与建立连接不同。如果要建立连接而不是解析地址,那就是需要端口的时间。

例如

net.Dial("tcp", "[2620:13a:c020:16:1f7b:169c:846f:218a]:49152")

答案 1 :(得分:0)

错误就在我的头上:我之前没有将地址分配给接口。感谢您通知我有关端口以及所有其他方面的信息,