我的计算机上有两个网络接口(interface)(eth0 和 eth1),我正在尝试使用特定接口(interface) (eth1) 拨号连接。鉴于我认为 Go 是一种系统语言的说法,但当前的标准库真的有可能吗?
到目前为止,我必须通过名称获取接口(interface) InterfaceByName
(eth1
) 然后我在 Addrs
范围内方法并提取出第一个地址[0],这似乎是eth1接口(interface)的源地址(例如xxx.xxx.xxx/24);另一个是 ipv6 地址。
我创建了一个新的 Dialer
并设置 Dialer.LocalAddr
与提取的地址。但是我收到此错误 mismatched local address type
这似乎与来自 dial.go 的 dialSingle 函数有关
编辑 一些代码:
package main
import (
"net"
"log"
)
func main(){
ief, err := net.InterfaceByName("eth1")
if err !=nil{
log.Fatal(err)
}
addrs, err := ief.Addrs()
if err !=nil{
log.Fatal(err)
}
d := net.Dialer{LocalAddr: addrs[0]}
_, err = d.Dial("tcp", "google.com:80")
if err != nil {
log.Fatal(err)
}
}
输出:
2014/12/10 17:11:48 dial tcp 216.58.208.32:80: 不匹配的本地地址类型 ip+net
最佳答案
当你从一个接口(interface)中提取地址时,它是 *net.IPnet
类型,包裹在一个 net.Addr
接口(interface)中,其中包含一个地址和网络掩码 不是地址和端口。您可以使用 IP 地址,但是,您必须在将其断言为 *net.IPnet
TCPAddr
ief, err := net.InterfaceByName("eth1")
if err !=nil{
log.Fatal(err)
}
addrs, err := ief.Addrs()
if err !=nil{
log.Fatal(err)
}
tcpAddr := &net.TCPAddr{
IP: addrs[0].(*net.IPNet).IP,
}
关于networking - 使用特定地址/接口(interface)拨号?戈朗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27410764/