猿问

Go net.DialUDP 自动选择环回接口

我需要从主机上的 eth0 向自身发送一些 UDP 数据包,也在 eth0 上。


我有一些可用的 Go 代码,但它似乎使用的是环回接口而不是 eth0 预期的那样。


package main


import (

    "net"

)


func main() {

    ip := net.ParseIP("192.168.1.158")


    src := net.UDPAddr{IP: ip, Port: 8888,}

    dest := net.UDPAddr{IP: ip, Port: 88}


    conn, _ := net.DialUDP("udp", &src, &dest)


    conn.Write([]byte("hi"))

}

192.168.1.158 是我机器上接口的主要和唯一 IP 地址。


运行以下命令会显示流量:


sudo tcpdump udp -v -i lo

但是,我希望流量来自/来自具有我定义的 IP 地址的系统接口。


我在这里错过了一步吗?


我也尝试过这种略有不同的方法,但结果相同:


src, _ := net.ResolveUDPAddr("udp", "192.168.1.158:8888")

dest, _ := net.ResolveUDPAddr("udp", "192.168.1.158:88")


慕侠2389804
浏览 326回答 1
1回答

波斯汪

但是,我希望流量来自/来自具有我定义的 IP 地址的系统接口。这只是错误的期望,与 Go 无关。只需尝试ping 192.168.1.158检查tcpdump -i lo -n icmp数据tcpdump -i eth0 -n icmp实际传输的位置即可。您将看到数据包在lo接口上传输。类似的 aip route get 192.168.1.158将向您显示到您的本地地址的路由通过该lo接口。
随时随地看视频慕课网APP

相关分类

Go
我要回答