拨打特定的地址/接口? Golang

时间:2014-12-10 21:03:54

标签: networking go network-programming

我的计算机上有两个网络接口(eth0和eth1),我尝试使用特定的一个(eth1)拨打连接。鉴于Go是一种系统语言的说法我是这么认为的,但是现在的标准库真的可以吗?

到目前为止,我必须按名称InterfaceByNameeth1)获取界面,然后我在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)
        }
}

输出:    2014/12/10 17:11:48 dial tcp 216.58.208.32:80: mismatched local address type ip+net

1 个答案:

答案 0 :(得分:11)

当您从接口中提取地址时,它的类型为*net.IPnet,包含在net.Addr接口中,其中包含地址和网络掩码,而不是地址和端口。但是,您可以使用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,
    }