使用 Go 撥號時設定來源介面
在具有多個介面的網路中,可能需要使用特定介面來撥號連線。儘管 Go 具有低級性質,但標準庫本質上並不支援這一點。
為了嘗試這一點,我們使用 InterfaceByName 檢索目標介面 eth1,使用 Addrs 提取第一個位址,並使用取得的位址作為 LocalAddr。然而,我們遇到了「本地地址類型不匹配」的錯誤。
出現這個問題是因為從介面取得的位址是 *net.IPnet 類型,它同時代表位址和網路遮罩。要撥號,我們需要一個 *net.TCPAddr,它是一個位址和連接埠。
要解決此問題,我們在將介面位址斷言為*net.IPnet 後明確建立一個*net.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, }
透過此配置,撥號器現在可以使用指定介面建立連線。
以上是Go中如何指定撥接網路介面?的詳細內容。更多資訊請關注PHP中文網其他相關文章!