【发布时间】:2021-06-22 00:59:14
【问题描述】:
我正在尝试像这样设置 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,几乎没有安装任何东西。
编辑: 即使如下所示删除端口,我仍然会收到此错误: dial tcp [2620:13a:c020:16:1f7b:169c:846f:218a]:0 ->[remoteip]:[remoteport] 绑定:无法分配请求的地址
【问题讨论】:
-
2620:13a:c020:0016:1f7b:169c:846f:218a:49152 不是有效的 IPV6。例如,2001:4860:4860::8888 是有效的 IPV6
-
49152 是端口,不是地址@Ehsan.Saradar 的明确部分
-
那就是写不正确。为避免混淆,IPv6 地址应放在括号中,即
[2620:13a:c020:0016:1f7b:169c:846f:218a]:49152。您的程序需要做所有其他程序所做的事情,并在尝试在DialContext中使用它之前解析出地址。net.SplitHostPort()会为你做这件事。
标签: go networking ipv6