Go net.DialUDP 自动选择环回接口
Go net.DialUDP auto-selecting loopback interface
我需要从主机上的 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
但是,我希望流量是 to/from 具有我定义的 IP 地址的系统接口。
我是不是漏掉了一步?
我也尝试过这种略有不同的方法,但结果相同:
src, _ := net.ResolveUDPAddr("udp", "192.168.1.158:8888")
dest, _ := net.ResolveUDPAddr("udp", "192.168.1.158:88")
However, I would expect the traffic be to/from the system interface with the IP address I've defined.
这完全是错误的期望,与围棋无关。
只需尝试 ping 192.168.1.158
并检查 tcpdump -i lo -n icmp
与 tcpdump -i eth0 -n icmp
数据实际传输的位置。您将看到数据包在 lo
接口上传输。类似的 ip route get 192.168.1.158
将向您显示到您本地地址的路由通过 lo
接口。
我需要从主机上的 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
但是,我希望流量是 to/from 具有我定义的 IP 地址的系统接口。
我是不是漏掉了一步?
我也尝试过这种略有不同的方法,但结果相同:
src, _ := net.ResolveUDPAddr("udp", "192.168.1.158:8888")
dest, _ := net.ResolveUDPAddr("udp", "192.168.1.158:88")
However, I would expect the traffic be to/from the system interface with the IP address I've defined.
这完全是错误的期望,与围棋无关。
只需尝试 ping 192.168.1.158
并检查 tcpdump -i lo -n icmp
与 tcpdump -i eth0 -n icmp
数据实际传输的位置。您将看到数据包在 lo
接口上传输。类似的 ip route get 192.168.1.158
将向您显示到您本地地址的路由通过 lo
接口。