当我尝试将数据包写入 linux 上的 TAP 设备时,为什么会出现错误号 5?

Why do I get errno 5 when I try to write a packet to a TAP device on linux?

当我尝试使用 write(2)BOOTP 请求数据包写入 tun 设备文件描述符时,我得到 errno 5。任何想法为什么?我已经检查过 IP 级别和 UDP 级别的校验和是否正确。该程序能够使用 write(2) 编写 ARP 回复数据包。我试过 运行 它作为 root,出现同样的问题。

test: output packet: ff.ff.ff.ff.ff.ff.0a.f7.1f.f8.08.02.08.00.45.00.01.48.00.00.00.00.40.11.79.a6.00.00.00.00.ff.ff.ff.ff.00.44.00.43.01.34.05.88.01.01.06.00.be.ba.fe.ca.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.0a.f7.1f.f8.08.02.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.00.
write: errno=5

找到问题了。要发送 IP 数据包,tap 接口必须配置 IP 地址。