1

我使用 recvmsg(2) 收到一个 UDP 数据包。我想知道它是否来自本地机器。

我可以将 IP_PKTINFO 与 recvmsg 一起使用来获取接收数据包的接口。当数据包被发送到环回地址时,这就是环回接口,这很棒。当数据包被发送到某个其他网络接口的地址时,无论数据包是否是本地生成的,它都会作为该接口返回,这不是很好。

我可以检查数据包的源地址是否是本地机器的地址,但如果禁用反向路径过滤,那么它可能具有该地址并且仍然来自另一台机器,我不能假设它不是。此外,这将是我收到数据包和检查本地地址之间的竞争。

系统是Linux。C 或 C++。执行此操作的进程具有 CAP_NET_ADMIN。如何确定收到的数据包是否来自本地机器?

4

0 回答 0