- 您有多个网络适配器。
- 将 UDP 套接字绑定到本地端口,而不指定地址。
- 在其中一个适配器上接收数据包。
你如何获得接收数据包的适配器的本地 IP 地址?
问题是,“接收适配器的 IP 地址是什么?”不是我们从发件人那里得到的地址
receive_from( ..., &senderAddr, ... );
称呼。
原文由 Christopher 发布,翻译遵循 CC BY-SA 4.0 许可协议
你如何获得接收数据包的适配器的本地 IP 地址?
问题是,“接收适配器的 IP 地址是什么?”不是我们从发件人那里得到的地址
receive_from( ..., &senderAddr, ... );
称呼。
原文由 Christopher 发布,翻译遵循 CC BY-SA 4.0 许可协议
timbo 提供的解决方案假设地址范围是唯一的并且不重叠。虽然这通常是这种情况,但它不是一个通用的解决方案。
在 Steven 的书“Unix 网络编程”(第 20.2 节)中提供了一个很好的函数实现,它是基于 recvmsg() 而不是 recvfrom() 的函数。如果您的套接字启用了 IP_RECVIF 选项,则 recvmsg() 将返回接收数据包的接口的索引。然后可以使用它来查找目标地址。
源代码可 在此处 获得。有问题的函数是’recvfrom_flags()’
原文由 Andrew Edgecombe 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
您可以枚举所有网络适配器,获取它们的 IP 地址,并将子网掩码覆盖的部分与发送者的地址进行比较。
喜欢: