networking - 使用特定地址/接口(interface)拨号?戈朗

标签 networking go network-programming

我的计算机上有两个网络接口(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/

相关文章:

networking - 为什么dig命令只返回google.com的一个IP地址?

windows - powershell参数PolicyStore和Confirm

networking - 关于计算机网络端口号的问题

pdf - 在golang中从html创建pdf

c++ - STDIN 阻止激活其他文件描述符

networking - tcp程序无法监听80端口

c# - 在 RasDial 之后获取 IP 地址/接口(interface)号

java - 如何手动启用 LibGDX 网络?

go - 为不同的go结构创建构造函数

json - 戈朗 : Type [type] is not an expression; json config parsing