Linux C/C++ 显示NIC流量统计信息

NIC流量统计信息是由操作系统维护的。当数据包通过NIC传输时,操作系统会更新相关的计数器。这些计数器记录了数据包的发送和接收数量、字节数等。通过读取这些计数器,我们可以获得关于网络流量的信息。

为什么需要这些信息? 可以使用这些信息来监控网络性能、诊断网络问题或确定网络流量的模式。例如,如果发现某个时间段的数据包接收数量异常高,可能意味着有DDoS攻击或网络拥塞问题。

如何使用Linux命令获取流量统计信息

要显示网络接口(NIC)的流量统计信息,可以使用一些命令行工具。最常用的工具是ifconfig和ip命令。

使用ifconfig命令,可以通过指定网络接口名称来查看相关信息。例如,使用以下命令可以显示eth0接口的流量统计信息:

ifconfig eth0

使用ip命令的方式与ifconfig类似,可以显示网络接口的详细信息。例如,可以使用以下命令显示eth0接口的流量统计信息:

ip -s link show eth0

另外,你也可以使用一些其他工具来进行更详细的统计和分析,如ntop、iptraf、iftop、sar等。这些工具提供了更多的选项和图形化界面,可以更方便地查看和分析流量统计信息。

想要了解更多的解析,可以参考Linux的网络管理文档,如Linux网络管理指南或相关的官方文档。在命令行中输入以下命令可以查看相关文档:

man ifconfig
man ip

这里需要注意的是,具体的命令和工具可能会有一些不同的参数和输出格式。在使用具体的命令行工具时,可以参考工具的文档和帮助信息来了解详细的使用方法和输出解释。

/proc/net/dev

在Linux中,/proc/net/dev是一个特殊的文件,它包含了有关网络设备(如网卡)的统计信息。该文件是通过proc文件系统提供的一种方式来访问内核数据结构。

具体来说,/proc/net/dev文件提供了每个网络接口的详细统计信息,包括接收和发送的字节数、数据包数、错误计数等。这些信息对于网络的性能分析和故障排除非常有用。

通过读取/proc/net/dev文件,可以获取有关系统中每个网络接口的实时信息。此外,还可以使用一些工具(如ifconfig命令、ip命令等)来显示/proc/net/dev文件的内容以更直观地查看接口的统计信息。

所以,如果想要了解Linux系统中的网络统计信息,可以通过查看/proc/net/dev文件来获取相关的数据。

Linux C/C++ 显示NIC流量统计信息

...
void AddCount(int devnum, u32 rp1, u32 rb1, u32 tp1, u32 tb1)
{if (devnum >= MAXDEV)return;if (lrp[devnum] < rp1)rp[devnum] = rp1 - lrp[devnum], lrp[devnum] = rp1;elselrp[devnum] = rp1, rp[devnum] = 0;if (lrb[devnum] < rb1)rb[devnum] = rb1 - lrb[devnum], lrb[devnum] = rb1;elselrb[devnum] = rb1, rb[devnum] = 0;if (ltp[devnum] < tp1)tp[devnum] = tp1 - ltp[devnum], ltp[devnum] = tp1;elseltp[devnum] = tp1, tp[devnum] = 0;
...
}float Nom1(float f)
{while (f > 1000)f = f / 1000;return f;
}char Nom2(float f)
{if (f < 1e3)return ' ';if (f < 1e6)return 'K';if (f < 1e9)return 'M';if (f < 1e12)return 'G';return 'T';
}void dostatis()
{
...fp = fopen("/proc/net/dev", "r");if (fp == NULL) {fprintf(stderr, "Could not open /proc/net/dev\n");sleep(30);return;}while (fgets(buf, MAXLEN, fp) != NULL) {unsigned long int rp1, rb1, tp1, tb1, ign;int devnum, i;char *devn;char *p = buf;while (*p == ' ')p++;if (*p == 0)continue;devn = p;while (*p && (*p != ':'))p++;if (*p == 0)continue;*p = 0;p++;...if (sscanf(p, "%lu %lu %lu %lu %lu %lu %lu %lu %lu %lu",&rb1, &rp1, &ign, &ign, &ign, &ign, &ign, &ign, &tb1, &tp1) != 10) {fprintf(stderr, "Could not open /proc/net/dev\n");sleep(30);continue;}//      printf("%d %lu %lu %lu %lu\n",devnum,rp1,rb1,tp1,tb1);AddCount(devnum, rp1, rb1, tp1, tb1);}fclose(fp);if ((outlen == 0) || (outlen == 20)) {for (i = 0; i < totaldev; i++)printf("+-----------------------");printf("+\n");for (i = 0; i < totaldev; i++) {int x;printf("|");for (x = 0; x < 23 / 2 - strlen(devname[i]) / 2; x++)printf(" ");printf("%s", devname[i]);
...printf(" ");}printf("|\n");for (i = 0; i < totaldev; i++)printf("|      TX         RX    ");printf("|\n");for (i = 0; i < totaldev; i++)printf("|  PPS   BPS   PPS   BPS");printf("|\n");for (i = 0; i < totaldev; i++)printf("+-----------------------");printf("+\n");
...}outlen++;printf("|");for (i = 0; i < totaldev; i++) {printf("%4.0f%c %4.0f%c %4.0f%c %4.0f%c|",Nom1((float)tp[i]), Nom2((float)tp[i]),Nom1((float)tb[i] * 8.0), Nom2((float)tb[i] * 8.0),Nom1((float)rp[i]), Nom2((float)rp[i]),Nom1((float)rb[i] * 8.0), Nom2((float)rb[i] * 8.0));}printf("\n");}int main(int argc, char *argv[])
{
...for (i = 1; i < argc; i++) {if (strcmp(argv[i], "-h") == 0) {printf("Usage: nettraf [ -h ] [ NIC1 ] [ NIC2 ] [ NIC3 ]\n");exit(0);}if (totaldev >= MAXDEV) {printf("too much devs\n");}strncpy(devname[totaldev], argv[i], DEVNAMELEN);totaldev++;}if (totaldev == 0) {FILE *fp;char buf[MAXLEN];fp = fopen("/proc/net/dev", "r");if (fp == NULL) {fprintf(stderr, "Could not open /proc/net/dev\n");exit(0);}while (fgets(buf, MAXLEN, fp) != NULL) {char *devn;char *p = buf;
...devn = p;while (*p && (*p != ':'))p++;if (*p == 0)continue;*p = 0;strncpy(devname[totaldev], devn, DEVNAMELEN);totaldev++;if (totaldev == MAXDEV)break;}fclose(fp);}
...
}

If you need the complete source code, please add the WeChat number (c17865354792)

运行效果:

这里描述一下代码中截图,在网卡流量统计中,有一些常见的指标和术语,如PPS、BPS、TX和RX。下面对它们进行一一解释:

  1. PPS(Packets Per Second,每秒数据包数):指单位时间内通过网卡的数据包数量。PPS代表了网络流量的频率,可以用来衡量网络带宽的使用情况。

  2. BPS(Bits Per Second,每秒位数):指单位时间内通过网卡的总位数。BPS用于衡量网络流量的速率,即网络吞吐量。常见的单位有Mbps(兆位每秒)和Gbps(千兆位每秒)。

  3. TX(Transmit,发送):表示从本地主机发送的数据量。TX指标包括发送的数据包数量、发送的字节数和发送的错误数量等信息。

  4. RX(Receive,接收):表示从网络接收到的数据量。RX指标包括接收到的数据包数量、接收到的字节数和接收到的错误数量等信息。

这些指标和术语提供了对网卡流量的不同方面的了解。通过了解这些指标,可以分析网络的使用情况、网络连接的稳定性以及网络带宽的利用率等。在网络管理和故障排除中,对这些指标的监测和分析是非常有用的。

总结

NIC流量统计信息显示了网络接口卡(NIC)上的数据传输情况,包括发送和接收的数据包数量、字节数等。通过查看这些信息,可以了解网络连接的使用情况,以便进行网络性能优化和故障排查。

Welcome to follow WeChat official account【程序猿编码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/338211.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql InnoDB行锁深入理解

Record Lock记录锁 Record Lock 称为记录锁&#xff0c;锁住的是一条记录。而且记录锁是有 S 锁和 X 锁之分的&#xff1a; 当一个事务对一条记录加了 S 型记录锁后&#xff0c;其他事务也可以继续对该记录加 S 型记录锁&#xff08;S 型与 S 锁兼容&#xff09;&#xff0c;…

win10提示“KBDSF.DLL文件缺失”,游戏或软件无法启动运行,快速修复方法

很多用户在日常使用电脑的时候&#xff0c;或多或少都遇到过&#xff0c;在启动游戏或软件的时候&#xff0c;Windows桌面会弹出错误提示框“KBDSF.DLL文件缺失&#xff0c;造成软件无法启动或运行&#xff0c;请尝试重新安装解决”。 首先&#xff0c;先来了解DLL文件是什么&a…

uniapp自定义底部导航栏

1.新建 nav-custom.vue组件 <template><view class"nav-box" :style"{height:heightpx,background:bgColor}"><!-- 自定义导航栏 --><view class"status_bar" :style"{height:statusBarHeightpx}"><!-- u…

深度学习笔记(二)——Tensorflow环境的安装

本篇文章只做基本的流程概述&#xff0c;不阐述具体每个软件的详细安装流程&#xff0c;具体的流程网上教程已经非常丰富。主要是给出完整的安装流程&#xff0c;以供参考 环境很重要 一个好的算法环境往往能够帮助开发者事半功倍&#xff0c;入门学习的时候往往搭建好环境就已…

Flask 菜品管理

common/libs/Helper.py getDictFilterField() 方法 用于在web/templates/food/index.html中展示菜品分类 如何能够通过food里面的cat_id获取分类信息呢&#xff1f;只能通过for循环&#xff0c;这样会很麻烦&#xff0c;所以定义了这个方法。 这个方法可以的查询返回结果…

Word2007导出PDF的正确做法

客户让做个一程序&#xff0c;从Excel读出数据&#xff0c;经过统计、计算生成PDF文档。我的做法是中间安装模板生成Word文档&#xff0c;然后在导出为PDF。 程序完成后需要测试&#xff0c;客户的环境是Win10Office2007。我用虚拟机搭建了环境&#xff0c;发现Word2007竟然无…

Open CASCADE学习|创建拓朴

目录 1、创建点gp_Pnt 2、创建向量gp_Vec 3、创建边TopoDS_Edge 4、线网络TopoDS_Wire 5、面TopoDS_Face 6、体TopoDS_Shape OpenCascade中的拓朴实体如下图所示&#xff0c;其中Compound可以包含很多Solid&#xff1b;Solid由Shell包围而成&#xff1b;Shell由相连的Fac…

用React给XXL-JOB开发一个新皮肤(一):环境搭建和项目初始化

目录 一. 简述二. Fork 项目三. 搭建开发环境四. 初始化皮肤项目五. 添加相关依赖六. 预览 一. 简述 大名鼎鼎的 xxl-job 任务调度中心我们应该都使用过&#xff0c;项目地址&#xff1a;xxl-job。它是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单…

听劝,年度规划有它真的很必要!

2024年的时间进度条已走过一周&#xff0c;完成全年的1/52。 新年的flag悄然立下&#xff1a;愿逆风如解意&#xff0c;税后八个亿。 在不确定的世界中&#xff0c;发财暴富终归是确定的目标。 相比2023年的卷&#xff0c;年底的即兴生活正在悄悄上演&#xff0c;上一秒还在…

ISIS基本概率与配置(HCIP完整版)

目录 一、ISIS协议基础 1、ISIS概述&#xff08;认识ISIS&#xff09; 2、ISIS的应用 4、ISIS的工作过程 5、ISIS路由器的类型 6、ISIS区域 7、ISIS报文 8、ISIS基础配置 9、进程号&#xff1a; 10、NET地址 11、ISIS邻居关系 二、邻居表分析 1、ISIS邻居表字段解析…

Java8 Stream集合的筛选、归约、分组、聚合讲解

目录 1 Stream概述 2 Stream的创建 3 Stream的使用 3.1 Optional 3.2 案例 3.2.1 遍历/匹配&#xff08;foreach/find/match&#xff09; 3.2.2 筛选&#xff08;filter&#xff09; 3.2.3 聚合&#xff08;max/min/count) 3.2.4 映射(map/flatMap) 3.2.5 归约(reduce…

网络协议攻击与模拟_02ARP协议

一、arp协议简介 一个工作在二层的三层协议&#xff0c;事一个2.5层协议 ARP协议地址解析协议&#xff0c;将一个已知的Ip地址解析为MAC地址&#xff0c;从而进行二层数据交互 二、工作流程 1、两个阶段 ARP请求ARP响应 两台主机IP地址主机A和主机B&#xff0c;IP地址和MAC…