The*_*hat 7 networking network-programming go
我的计算机上有两个网络接口(eth0和eth1),我正在尝试使用特定的一个(eth1)拨号连接.鉴于Go是一种系统语言的说法我是这么认为的,但是现在的标准库真的可以吗?
到目前为止,我必须通过name InterfaceByName(eth1)获取接口然后我调整Addrs方法并提取第一个地址[0],它似乎是eth1接口的源地址(例如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)
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
2014/12/10 17:11:48 dial tcp 216.58.208.32:80: mismatched local address type ip+net
Jim*_*imB 11
当您从接口中提取地址时,它的类型*net.IPnet包含在net.Addr接口中,该接口包含地址和网络掩码,而不是地址和端口.但是,您可以使用IP地址在将其声明为a后创建新的TCPAddr*net.IPnet
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,
}
Run Code Online (Sandbox Code Playgroud)