weixin_46027762 2023-08-01 14:46 采纳率: 65.7%
浏览 40
已结题

linux获取网卡的信息,c++

使用c++代码获取:
网卡的字典消息:型号、传输速度、接口类型(RJ-45/FDDI/ATM等)、ip(多个)、子网掩码、网关、mac地址
网卡的性能指标:上行kb/s、下行kb/s、上行package/s、下行package/s、丢包/s、丢包率、错包/s、错包率

  • 写回答

8条回答 默认 最新

  • 王家的小先生 2023-08-02 23:51
    关注

    这个算是比较详细的方法了,希望能帮到你,解决问题望采纳。:
    在Linux上,可以使用C++代码来获取网卡的信息。以下是一个示例代码,使用Linux系统调用和网络工具来获取网卡的信息:

    #include <iostream>
    #include <fstream>
    #include <sstream>
    
    // 获取网卡型号信息
    std::string getNicModel(const std::string& interfaceName) {
        std::ifstream file("/sys/class/net/" + interfaceName + "/device/model");
        std::string model;
        std::getline(file, model);
        return model;
    }
    
    // 获取网卡传输速度信息
    std::string getNicSpeed(const std::string& interfaceName) {
        std::ifstream file("/sys/class/net/" + interfaceName + "/speed");
        std::string speed;
        std::getline(file, speed);
        return speed + " Mbps";
    }
    
    // 获取网卡接口类型信息
    std::string getNicInterfaceType(const std::string& interfaceName) {
        std::ifstream file("/sys/class/net/" + interfaceName + "/type");
        std::string type;
        std::getline(file, type);
        if (type == "1") {
            return "Ethernet";
        } else if (type == "32") {
            return "Wireless";
        } else {
            return "Unknown";
        }
    }
    
    // 获取网卡IP地址信息
    std::string getNicIP(const std::string& interfaceName) {
        std::ifstream file("/sbin/ifconfig " + interfaceName + " | grep 'inet '");
        std::string line;
        std::getline(file, line);
        std::istringstream iss(line);
        std::string word;
        std::getline(iss, word, ' ');
        std::getline(iss, word, ' ');
        return word;
    }
    
    // 获取网卡子网掩码信息
    std::string getNicSubnetMask(const std::string& interfaceName) {
        std::ifstream file("/sbin/ifconfig " + interfaceName + " | grep 'netmask '");
        std::string line;
        std::getline(file, line);
        std::istringstream iss(line);
        std::string word;
        std::getline(iss, word, ' ');
        std::getline(iss, word, ' ');
        return word;
    }
    
    // 获取网卡网关信息
    std::string getNicGateway(const std::string& interfaceName) {
        std::ifstream file("/sbin/ip route show | grep 'default via' | grep " + interfaceName + " | awk '{print $3}'");
        std::string gateway;
        std::getline(file, gateway);
        return gateway;
    }
    
    // 获取网卡MAC地址信息
    std::string getNicMAC(const std::string& interfaceName) {
        std::ifstream file("/sys/class/net/" + interfaceName + "/address");
        std::string mac;
        std::getline(file, mac);
        return mac;
    }
    
    int main() {
        std::string interfaceName = "eth0";  // 请根据实际网卡名称进行修改
    
        std::cout << "Interface Name: " << interfaceName << std::endl;
        std::cout << "Interface Model: " << getNicModel(interfaceName) << std::endl;
        std::cout << "Interface Speed: " << getNicSpeed(interfaceName) << std::endl;
        std::cout << "Interface Type: " << getNicInterfaceType(interfaceName) << std::endl;
        std::cout << "IP Address: " << getNicIP(interfaceName) << std::endl;
        std::cout << "Subnet Mask: " << getNicSubnetMask(interfaceName) << std::endl;
        std::cout << "Gateway: " << getNicGateway(interfaceName) << std::endl;
        std::cout << "MAC Address: " << getNicMAC(interfaceName) << std::endl;
    
        return 0;
    }
    
    
    

    请根据您的实际网卡名称将interfaceName变量设置为您要查询的网卡名称。代码将打印出网卡的型号、传输速度、接口类型、IP地址、子网掩码、网关和MAC地址等信息。

    请注意,在Linux系统上,ifconfig和ip命令可能需要使用root权限才能执行。此外,您需要根据您的操作系统和开发环境设置适当的编译选项和库依赖关系。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

问题事件

  • 系统已结题 8月12日
  • 已采纳回答 8月4日
  • 创建了问题 8月1日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀