本程序旨在通过检查当前网络是否支持 IPv6 服务,以及判断指定的网络接口是否拥有全局 IPv6 地址。以下是程序的主要思路和函数概述。
1. getInterfaceNameFromSockaddr
1 | std::string getInterfaceNameFromSockaddr(const struct sockaddr_in &sockAddr) |
思路:
- 通过创建一个 IPv4 套接字,建立到一个虚拟地址的连接。
- 获取本地套接字的信息,即获取与之连接的本地 IP 地址。
- 遍历系统网络接口信息,根据 IP 地址的匹配找到对应的网络接口名称。
函数功能:
- 获取与指定
sockaddr_in
地址关联的网络接口名称。
2. hasGlobalIPv6
1 | bool hasGlobalIPv6(const char *interfaceName) |
思路:
- 通过读取
/proc/net/if_inet6
文件,获取所有网络接口的 IPv6 地址信息。 - 针对指定的网络接口名称,检查是否存在具有全局作用域的 IPv6 地址。
函数功能:
- 检查指定网络接口是否拥有全局 IPv6 地址。
3. getCurrentNetworkInterface
1 | std::string getCurrentNetworkInterface() |
思路:
- 创建一个 IPv4 套接字并连接到一个虚拟地址,获取本地套接字信息。
- 调用
getInterfaceNameFromSockaddr
函数,从本地套接字信息中获取网络接口名称。
函数功能:
- 获取当前网络接口名称。
4. main
思路:
- 调用
getCurrentNetworkInterface
函数,获取当前网络接口名称。 - 如果接口名称不为空,输出当前网络接口名称。
- 调用
hasGlobalIPv6
函数,判断当前网络接口是否拥有全局 IPv6 地址。 - 根据 IPv6 地址判断结果,输出相应信息。
通过以上函数,程序可以判断当前网络是否支持 IPv6 服务,并检查指定的网络接口是否拥有全局 IPv6 地址。整个程序通过与虚拟地址建立连接以及检查文件来获取网络信息,提供了一种简单的方法来判断网络是否支持 IPv6,以及网络接口是否拥有全局 IPv6 地址。