当前位置: 首页 > java >正文

现代c++获取linux所有的网络接口名称

现代c++获取linux所有的网络接口名称

  • 前言
  • 一、在linux中查看网络接口名称
  • 二、使用c++代码获取
  • 三、验证
  • 四、完整代码如下
  • 五、总结

前言


本文介绍一种使用c++获取本地所有网络接口名称的方法。

一、在linux中查看网络接口名称

linux系统中可以使用ifconfig -a命令列举出本机所有网络接口。如下图所示
在这里插入图片描述
在这里插入图片描述
也可以使用ip a命令,如下图所示
在这里插入图片描述

二、使用c++代码获取

需要包含<ifaddrs.h><sys/types.h>头文件
写下如下图代码
在这里插入图片描述

#include <string>
#include <sys/types.h>
#include <vector>
#include <ifaddrs.h>std::vector<std::string> interfaceNames() {std::vector<std::string> names;struct ifaddrs *ifaddr{nullptr};if (getifaddrs(&ifaddr) == 0) {for (auto ifa = ifaddr; ifa; ifa = ifa->ifa_next) {if (ifa->ifa_addr->sa_family == AF_PACKET) {names.push_back(ifa->ifa_name);}}freeifaddrs(ifaddr);}return names;
}

为了打印方便,我们重载一下左移运算符

std::ostream &operator<<(std::ostream &os, const std::vector<std::string> &v) {os << "[";for (auto &s : v) {os << s;if (&s != &v.back()) {os << ",";}}return os << "]";
}

三、验证

main.cppmain函数中写下如下代码

int main(int argc, char **argv) {std::cout << interfaceNames() << std::endl;return 0;
}

编译并验证,g++ main.cpp -o main && ./main,结果如下
在这里插入图片描述
确实可以获取到接口名称。

四、完整代码如下

#include <ifaddrs.h>
#include <iostream>
#include <string>
#include <sys/types.h>
#include <vector>std::vector<std::string> interfaceNames() {std::vector<std::string> names;struct ifaddrs *ifaddr{nullptr};if (getifaddrs(&ifaddr) == 0) {for (auto ifa = ifaddr; ifa; ifa = ifa->ifa_next) {if (ifa->ifa_addr->sa_family == AF_PACKET) {names.push_back(ifa->ifa_name);}}freeifaddrs(ifaddr);}return names;
}std::ostream &operator<<(std::ostream &os, const std::vector<std::string> &v) {os << "[";for (auto &s : v) {os << s;if (&s != &v.back()) {os << ",";}}return os << "]";
}int main(int argc, char **argv) {std::cout << interfaceNames() << std::endl;return 0;
}

五、总结

本文介绍了一种使用c++获取本地所有网络接口的方法,亲测可用!!!

http://www.xdnf.cn/news/2800.html

相关文章:

  • Java大师成长计划之第6天:Java流式API(Stream API)
  • Kubernetes基础与部署实战
  • shell(3)
  • windows中无法关闭mysql57服务
  • 深度学习近十年的汇总
  • 复习Vue136~180
  • HarmonyOS SDK助力鸿蒙版今日水印相机,真实地址防护再升级
  • n 卡编码
  • 高级java每日一道面试题-2025年4月28日-基础篇[反射篇]-反射操作中,`invoke()`方法的作用是什么?
  • 基于【低代码+AI智能体】开发智能考试系统
  • Python-Part2-集合、字典与推导式
  • 基于docker部署mssqlserver : mcr.microsoft.com/mssqlserver:2022-latest
  • 第十八节:开放性问题-Vue生态未来趋势
  • kubernetes常用命令 k8s指令大全
  • 【205】Python3 实现整数和IP地址字符串互相转换
  • 【读书笔记】机器行为与具身智能
  • pywinauto操作Windows应用
  • VUE3:封装一个评论回复组件
  • 【环境配置】Mac电脑安装运行R语言教程 2025年
  • 如何评价 DeepSeek 的 DeepSeek-V3 模型?
  • 【优选算法 | 二分查找】二分查找算法解析:如何通过二段性优化搜索效率
  • Python项目-支持自然语言处理
  • Docker和K8s面试题
  • Nacos 3.0 上线 MCP Registry,支持 MCP 服务注册到发现全流程管理
  • 从零开始学习车联网相关知识-学习计划
  • YUM/DNF管理工具
  • 蓝桥杯2025年第十六届省赛真题-可分解的正整数
  • 使用Optional优雅处理Null检查
  • 赋能航天教育:高校卫星仿真教学实验平台解决方案
  • Github两种鉴权模式PAT与SSH