3

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

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

问题是:

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

有没有办法找出接收到 UDP 数据包的适配器?

4

1 回答 1

2

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

于 2010-02-18T14:38:54.410 回答