go - 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")
解决方案
但是,我希望流量来自/来自具有我定义的 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
接口。
推荐阅读
- linux - "sed" 在一个重复的段落中转换一个参数
- android - 在 android auto 中删除 get to current queue button for exoplayer
- sirikit - iOS SiriKit:在 Intent 的“resolve”和“handle”方法之间传递数据
- python-3.x - 如何使用包含超过 1 个单词但整个短语只有 1 个标签的短语更新 spaCy 的词性标注器?
- python - 如何使用 HatchPattern 用模式填充堆积条形图
- powershell - 为什么 Powershell Import-Csv 在此 CSV 文件上无法正常工作?
- c# - Net Core 自动审查未优化的实体框架查询
- r - 您如何将项目拼凑在一起,以免丢失索引?
- c# - TObase64String 未编码我的访问令牌,导致 401 未经授权
- docker - 无法停止、终止或删除 Docker 容器