在GNU / Linux / C中使用多播(224.0.0.12)发现DHCP服务器

时间:2012-05-10 16:00:42

标签: c linux multicast dhcp

这个问题可能源于对IP多播的基本误解,所以如果我不在基地,请纠正我。

我正在尝试编写C代码来查找网络上所有DHCP服务器的IP地址。用例是这样的:

  1. 客户端广播DHCP发现。
  2. 我的专有中继代理接收数据包,添加一些基本信息,然后将UNICAST转发到已知IP地址的DHCP服务器。
  3. 我遇到的问题是告诉中继代理DHCP服务器在哪里。我发现IANA为DHCP服务器保留了多播地址224.0.0.12,所以我想我只是将服务器配置为侦听该多播流量。但每当我将一个linux套接字选项配置为IP_ADD_MEMBERSHIP到224.0.0.12时,它就会使用IGMP,这是一个完全独立的协议,我不想实现它。

    我只是误解了多播是如何工作的?我不应该能够从中继代理向224.0.0.12发送ping并让它从所有DHCP服务器返回ping响应吗?


    其他信息:

    • 当我执行ifconfig
    • 时,所有框中的接口都会列出MULTICAST
    • 我已在所有方框
    • 上使用ip route add 224.0.0.0/4 dev eth0添加了多播路由

2 个答案:

答案 0 :(得分:2)

也许您应该做客户端做什么 - 使用DHCPDISCOVER数据包在目标网络上广播(而不是多播!)?我有几个运行正在运行的DHCP服务器,但没有一个在224网络上监听。

您可能还想要请求现有地址,或者发送DHCPRELEASE以获取您收到的任何优惠,以免在服务器上的虚假预订中占用地址。

答案 1 :(得分:0)

在一般的IPv4设置中,使用广播到UDP端口67,而不是多播。广播请求应由网络上的所有DHCP服务器应答。请查看details explained on the Wikipedia page或阅读RFC 2131第3节中的广播说明。另请参阅this thread