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;
else
lrp[devnum] = rp1, rp[devnum] = 0;
if (lrb[devnum] < rb1)
rb[devnum] = rb1 - lrb[devnum], lrb[devnum] = rb1;
else
lrb[devnum] = rb1, rb[devnum] = 0;
if (ltp[devnum] < tp1)
tp[devnum] = tp1 - ltp[devnum], ltp[devnum] = tp1;
else
ltp[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。下面对它们进行一一解释:
-
PPS(Packets Per Second,每秒数据包数):指单位时间内通过网卡的数据包数量。PPS代表了网络流量的频率,可以用来衡量网络带宽的使用情况。
-
BPS(Bits Per Second,每秒位数):指单位时间内通过网卡的总位数。BPS用于衡量网络流量的速率,即网络吞吐量。常见的单位有Mbps(兆位每秒)和Gbps(千兆位每秒)。
-
TX(Transmit,发送):表示从本地主机发送的数据量。TX指标包括发送的数据包数量、发送的字节数和发送的错误数量等信息。
-
RX(Receive,接收):表示从网络接收到的数据量。RX指标包括接收到的数据包数量、接收到的字节数和接收到的错误数量等信息。
这些指标和术语提供了对网卡流量的不同方面的了解。通过了解这些指标,可以分析网络的使用情况、网络连接的稳定性以及网络带宽的利用率等。在网络管理和故障排除中,对这些指标的监测和分析是非常有用的。
总结
NIC流量统计信息显示了网络接口卡(NIC)上的数据传输情况,包括发送和接收的数据包数量、字节数等。通过查看这些信息,可以了解网络连接的使用情况,以便进行网络性能优化和故障排查。
Welcome to follow WeChat official account【程序猿编码】