ZBLOG

linux 获取网卡

在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;
}

编译与运行

  1. 将以上代码保存为 list_network_interfaces.cpp 文件。
  2. 使用以下命令编译代码:
   g++ -o list_network_interfaces list_network_interfaces.cpp
  1. 运行程序:
   ./list_network_interfaces

总结

该程序将列出所有可用的网络接口及其对应的IPv4和IPv6地址。根据需要,你可以扩展它以包含更多的信息,比如MAC地址、状态等。如果你有特定需求或者想了解更多,请告诉我!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=5704

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?