我正在尝试用 C# 编写一个 BOOTP 服务器。

我正在接收并解析来自客户端的 BOOTP 数据包,我需要回复我的服务器 IP 地址。

问题是:

  • 计算机可以有多个网络适配器
  • 客户端还没有 IP 地址

有什么方法可以查出 UDP 数据包是在哪个适配器上接收的吗?

有帮助吗?

解决方案

有几种可能的方法可以做到这一点。在每个物理接口上的每个 IP 上绑定一个单独的套接字,然后您将始终知道数据包到达哪个接口。您还可以尝试将 IP_RECVIF 标志与 recvmsg 套接字函数一起使用,尽管我不知道 Windows 是否支持。Steven's 在《Unix 网络编程》第 22.2 和 22.6 节中提供了示例。您可以将 SIOCGIFCONF 标志与 ioctl 一起使用来获取计算机上的接口列表。UNP 第 17.6 节中有一个示例程序。如果 C# 不允许您访问这些函数,但它们在 Windows 上受支持,您可以编写一个简单的 C 程序来收集和更新接口/IP 信息,然后使用 mmap 在 C# 程序和接口枚举器之间共享内存区域。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top