2 回答

TA貢獻1789條經驗 獲得超8個贊
您可能希望net.Interfaces()獲得net.Interface()代表系統上網絡接口的片段,或者,如您所知的接口名稱,您可以使用它net.InterfaceByName()來獲取特定的net.Interface.
ppp0, err := net.InterfaceByName("ppp0")
然后您可以調用Interface.Addrs()返回的net.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
關于同時為多個接口執行此操作,您可以為每個偵聽器/接口啟動一個 goroutine,并通過通道移動流量,但這實際上取決于您想要做什么。(您只是記錄數據、發送數據、修改數據等嗎?)

TA貢獻1982條經驗 獲得超2個贊
撥號器的 LocalAddr 不適用于 ppp 接口,我們應該SOL_SOCKET使用將標志設置為套接字setsockopt,對于 go 1.11+,您可以創建這樣的撥號器
dialer := net.Dialer{
Control: func(network, address string, c syscall.RawConn) error {
return c.Control(func(fd uintptr) {
err := syscall.SetsockoptString(int(fd), syscall.SOL_SOCKET, 25, "ppp0")
if err != nil {
log.Printf("control: %s", err)
return
}
})
},
}
// use the dialer
- 2 回答
- 0 關注
- 188 瀏覽
添加回答
舉報