gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:12:38 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com