在Linux中,可以使用ifconfig
命令或ip
命令查看网络接口信息,但如果你希望通过C++程序来获取系统中的网络接口(网卡)信息,你可以使用 getifaddrs()
函数。下面是一个简单的示例,展示如何列出所有可用的网络接口及其相关信息。
示例代码
#include <iostream>
#include <cstring>
#include <sys/types.h>
#include <ifaddrs.h>
#include <arpa/inet.h>
void listNetworkInterfaces() {
struct ifaddrs *ifaddr, *ifa;
// 获取网络接口地址
if (getifaddrs(&ifaddr) == -1) {
perror("getifaddrs");
return;
}
// 遍历每个接口
for (ifa = ifaddr; ifa != nullptr; ifa = ifa->ifa_next) {
// 确保接口名称非空,并且不是回环接口
if (ifa->ifa_name && !(ifa->ifa_flags & IFF_LOOPBACK)) {
std::cout << "Interface: " << ifa->ifa_name << "\n";
// 打印IPv4和IPv6地址
if (ifa->ifa_addr->sa_family == AF_INET) { // IPv4
char address[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr, address, sizeof(address));
std::cout << " IPv4 Address: " << address << "\n";
} else if (ifa->ifa_addr->sa_family == AF_INET6) { // IPv6
char address[INET6_ADDRSTRLEN];
inet_ntop(AF_INET6, &((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr, address, sizeof(address));
std::cout << " IPv6 Address: " << address << "\n";
}
std::cout << "\n";
}
}
freeifaddrs(ifaddr); // 释放分配的内存
}
int main() {
listNetworkInterfaces();
return 0;
}
编译与运行
- 将以上代码保存为
list_network_interfaces.cpp
文件。 - 使用以下命令编译代码:
g++ -o list_network_interfaces list_network_interfaces.cpp
- 运行程序:
./list_network_interfaces
总结
该程序将列出所有可用的网络接口及其对应的IPv4和IPv6地址。根据需要,你可以扩展它以包含更多的信息,比如MAC地址、状态等。如果你有特定需求或者想了解更多,请告诉我!
内容由零声教学AI助手提供,问题来源于学员提问