基于/proc统计网络流量的脚本

#!/bin/sh

# 下面两个参数可根据需要修改

EthXname=eth0 # 网卡名称

StatFreq=2 # 统计间隔时长,单位为:秒,建议为2或2的倍数

# 下面的参数,请不要修改

influx_kbps=0

outflux_kbps=0

influx_mbps=0

outflux_mbps=0

unsigned_long_max=4294967295 # 做溢出处理

Ethname=`cat /proc/net/dev|grep $EthXname|awk -F"[: ]+" '{ printf("%s", $2); }'`

if test "$EthXname" != "$Ethname"; then

echo "Please set EthXname first before running"

exit

fi

influx1_byte=`cat /proc/net/dev|grep $EthXname|awk -F"[: ]+" '{ printf("%d", $3); }'`

outflux1_byte=`cat /proc/net/dev|grep $EthXname|awk -F"[: ]+" '{ printf("%d", $11); }'`

while test 2 -gt 1;

do

sleep $StatFreq

influx2_byte=`cat /proc/net/dev|grep $EthXname|awk -F"[: ]+" '{ printf("%d", $3); }'`

outflux2_byte=`cat /proc/net/dev|grep $EthXname|awk -F"[: ]+" '{ printf("%d", $11); }'`

dd=`date +'%Y-%m-%d/%H:%M:%S'`

if test $influx2_byte -ge $influx1_byte; then

let influx_byte=$influx2_byte-$influx1_byte

else

let influx_byte=$unsigned_long_max-$influx1_byte

let influx_byte=$influx_byte+$influx2_byte

fi

if test $outflux2_byte -ge $outflux1_byte; then

let outflux_byte=$outflux2_byte-$outflux1_byte

else

let outflux_byte=$unsigned_long_max-$outflux1_byte

let outflux_byte=$outflux_byte+$outflux2_byte

fi

let influx_byte=$influx_byte/$StatFreq

let outflux_byte=$outflux_byte/$StatFreq

# TO bps

let influx_bps=$influx_byte*8

let outflux_bps=$outflux_byte*8

# To kbps

let influx_kbps=$influx_bps/1024

let outflux_kbps=$outflux_bps/1024

# To mbps

let influx_mbps=$influx_kbps/1024

let outflux_mbps=$outflux_kbps/1024

# 输出列说明:统计时间,输入流量(单位:Kbps),输入流量(Mbps),输出流量(Kbps),输出流量(Mbps)

echo "$dd,${influx_kbps}Kbps,${influx_mbps}Mbps,${outflux_kbps}Kbps,${outflux_mbps}Mbps"

let influx1_byte=influx2_byte

let outflux1_byte=outflux2_byte

done

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android点滴积累

快速搭建一个本地的FTP服务器

快速搭建一个本地的FTP服务器   如果需要开发FTP文件上传下载功能,那么需要在本机上搭建一个本地FTP服务器,方便调试。 第一步:配置IIS Web服务器 ...

60680
来自专栏运维前线

Linux中设置'sudo'的10个小技巧

在Linux和其他类Unix操作系统中,只有root用户可以运行所有命令并在系统上执行某些关键操作,如安装和更新,删除包,创建用户和组,修改重要的系统配置文件...

23560
来自专栏ionic3+

android报错:ERROR: In <declare-styleable> FontFamilyFont, unable to find attribute android:font

安装了cordova-plugin-file-opener2插件后build出现,移除该插件后build正常。

17330
来自专栏Java面试笔试题

什么是端口号

在网络技术中,端口(Port)包括逻辑端口和物理端口两种类型。物理端口指的是物理存在的端口,如ADSL Modem、集线器、交换机、路由器上用 于连接其他网络设...

35110
来自专栏小尘哥的专栏

一分钟系列----springboot之Validator校验

我相信每个做开发的都听过这句“永远不要相信用户的输入”,因此后台需要对用户的每个输入项都做校验:手机号、用户名、密码、邮箱、身份证号······这时候就需要hi...

9630
来自专栏Golang语言社区

源目的IP和端口都相同的连接出现的原因

线上遇到了一个比较特殊的连接,它的源目的IP和端口完全相同,复现的场景是:同一个机器上的两个模块A和B通信,A模块会向B模块的监听套接字发起连接请求,B模块重启...

32750
来自专栏张首富-小白的成长历程

Linux route指定静态路由配置

         route命令用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由。实现两个不同子网之间的通信,需要一台连接两个...

85030
来自专栏Pythonista

自动化部署nginx负载均衡及监控短信报警

开发脚本自动部署及监控 1.编写脚本自动部署反向代理、web、nfs; 要求: I、部署nginx反向代理三个web服务,调度算法...

17420
来自专栏后端技术探索

Nginx隐藏响应头信息的Server信息和版本信息

在nginx.conf里面加server_tokens off;就可以隐藏版本号。

12630
来自专栏从零学习云计算

openshift/origin学习记录(2)——添加Router组件

学习资料来源于官方英文文档与《开源容器云OpenShift》一书,因为刚开始学习,不确定博客的正确性,以下内容仅供参考。 本部分是在openshift/orig...

38100

扫码关注云+社区

领取腾讯云代金券