为 IPv6 找到正确的“网络接口”编号

Dyl*_*ens 3 networking ipv6 boost-asio

我正在尝试将 Boost 用于某些 IPv6 和多播网络通信。我需要构造一个使用特定网络接口索引的 IPv6 多播套接字。

我能够在 boost/asio/ip/detail/socket_option.hpp 中找到正确的多播选项来设置网络接口索引:explicit multicast_request(const boost::asio::ip::address_v6& multicast_address, unsigned long network_interface = 0)

问题是,我不知道如何找到“network_interface”参数的正确值。有没有办法使用我可以提供的本地 IPv6 地址获取 network_interface 值?我查看了文档和示例,但找不到任何内容。

——迪伦

Ste*_*e-o 6

每个平台都提供 API 来枚举网络接口,例如getifaddrs对于许多 Unix 和GetAdaptersAddressesWindows。请注意,在 Windows 上,IPv4 和 IPv6 适配器有一个单独的数字空间,这使得 API 调用if_nametoindex非常混乱。

您可能希望检查我在 OpenPGM 中使用的方法的可移植性,考虑到 Windows 并没有真正有用的适配器名称:

http://code.google.com/p/openpgm/source/browse/trunk/openpgm/pgm/getifaddrs.c

http://code.google.com/p/openpgm/source/browse/trunk/openpgm/pgm/nametoindex.c

http://code.google.com/p/openpgm/source/browse/trunk/openpgm/pgm/indextoaddr.c

http://code.google.com/p/openpgm/source/browse/trunk/openpgm/pgm/indextoname.c