go - 如何将 VPN(pptp) 与 golang net 包一起使用?

标签 go vpn pptp

我在服务器上绑定(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.ListenIPnet.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/

相关文章:

go - 编码成 bson.Raw

go - gorm 执行不必要的查询以在数据库表中插入数据

docker - 从远程机器访问托管在 digital ocean 水滴上的容器化 API

pointers - X不实现Y(…方法具有指针接收器)

java - 无法在从html文件呈现的aspose ppt中嵌入样式

Linux PPTP服务器中继

linux - 是否可以从一个点创建多个独立的持久 VPN 连接?

amazon-web-services - 我在 EC2 安全组中允许哪些 IP 地址允许客户端 VPN 流量通过?

android - 如何在 Android 上以编程方式配置 VPN?

Android开发,VPNService.buider中的FileDescriptor不能读写