我在服务器上绑定(bind)了几个vpn,就是ppp0 ~ ppp4。
现在问题来了。我想开始 5 个进程,每个进程都使用不同的网络接口(interface)。
proc0 -> ppp0
proc1 -> ppp1
proc2 -> ppp2
proc3 -> ppp3
proc4 -> ppp4
我现在如何用 c 语言做到这一点。只需使用带有参数 SO_BINDTODEVICE 的 setsockopt。
但是如何在 golang 中使用 net package 来做到这一点?
最佳答案
你可能想要 net.Interfaces()
得到一片 net.Interface()
表示系统上的网络接口(interface),或者,如您所知,可以使用接口(interface)名称 net.InterfaceByName()
获取特定的 net.Interface
。
ppp0, err := net.InterfaceByName("ppp0")
然后您可以调用 Interface.Addrs()
在返回的 net.Interface
上获取接口(interface)的 IP 地址。
addrs, err := ppp0.Addrs()
然后您可以在其余代码中使用所需的地址(可能使用 net.ListenIP
或 net.DialIP
。
addr, err := net.ResolveIPAddr("ip4", addrs[0])
// check err
conn, err := net.ListenIP("ip4:pptp", addr)
// check err, then do stuff with conn
关于同时为多个接口(interface)执行此操作,您可以为每个监听器/接口(interface)启动一个 goroutine,并通过 channel 移动流量,但这实际上取决于您想要做什么。 (你只是记录数据、发送数据、修改数据等)
关于go - 如何将 VPN(pptp) 与 golang net 包一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28081336/