weixin_46027762 2023-08-01 14:46 采纳率: 64.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 安霸cv22 + rtl8211f 千兆,udp传输丢包
  • ¥15 关于区块链和边缘环境搭建的相关问题
  • ¥15 windows远程桌面断卡重连软件卡顿问题
  • ¥30 Unity 实现扫描效果
  • ¥15 HbuilderX检测不到安卓模拟器
  • ¥15 这个main已经在filename.obj中定义是什么错 C语言
  • ¥15 关于#linux#的问题:exsi8.0系统 怎么更改web访问端口,不用80、443
  • ¥15 使用elementor设计样式
  • ¥15 谁能提供一个中文版的推销咨询网站连接?
  • ¥15 springboot项目程序启动报错