0

我正在尝试创建一个 BSD 套接字来侦听来自特定 IPv6 多播地址的消息。我目前创建侦听正确地址 0::0 的套接字没有问题。

问题是我在具有多个 NIC 的小型嵌入式 linux 服务器上运行;这里 ipv6_mreq 的 ipv6mr_interface 字段很重要。通过反复试验,我确定 0、1 和 3 不起作用,但 2 起作用(它将所有 IPv6 多播消息发送到我的地址 ff05::3,到达正确的接口)。

我的问题是:在 linux 中,我如何将我的接口、我知道的谁的地址与正确的接口号相关联?

4

2 回答 2

3

maybe you can have a look to the if_nametoindex(3) function (seen in /usr/include/net/in.h).

Sincerely, Rémi

于 2009-10-24T20:48:10.847 回答
0

总结我对原始答案的评论:

  1. Stevens (UNIX Network Programming Vol. 1) 提供了一种将设备名称映射到接口编号的解决方案。这涉及通过原始套接字查询 OS 路由表以获取接口号。在第二版中,这在第 17.6 节中,在第三版中,在第 18.6 节中。
  2. 您还可以使用 proc 文件系统在选项一中收集相同的信息。特别感兴趣的是 /proc/net/dev_mcast 文件。该文件给出了接口名称和接口编号之间的映射;从 IP 地址到接口名称的映射可能同样简单。

大概选项 1 是最强大的,因为 proc 文件系统可以更改其组织方式、可用信息以及格式化方式。我个人并不熟悉 Linux Kernel 更改这些属性的频率,因此,欢迎对此有更多信息的人发表评论或编辑这篇文章。

于 2009-10-23T16:19:45.930 回答