统计网络数据包
介绍
实验楼的环境有的时候需要检测下网络通信状况,例如某个端口统计有多少数据包传输。
目前有一个需求,实现一个 Bash 脚本 /home/shiyanlou/netcheck.sh,获取指定端口的数据包统计信息。这个脚本输入参数为统计的目标端口号,只会执行3秒钟,并打印这3秒钟指定端口传输的数据包数量。
例如:
$ /home/shiyanlou/netcheck.sh 22
Packages: 2
目标
完成的脚本必须放置在 /home/shiyanlou/netcheck.sh
脚本执行时需要输入一个端口号作为参数,脚本执行时间为3秒钟
脚本执行后输出一行,统计的是脚本执行3秒钟期间进出该端口的数据包总数量
提示语
tcpdump
知识点
Linux 网络
网络数据统计
端口
来源
实验楼研发团队
这里比较纠结的是如何统计3秒内的数据包!前两次没做出来,今天偶然看到了timeout这个命令,才发现自己的见识少是真的少。所以先介绍timeout命令!
man timeout
#timeout - run a command with a time limit
timeout 3 commands
#如果commands在3秒内结束,则平安结束,如果不结束,则3秒后命令将被kill
在介绍一下抓包工具tcpdump
常用选项
-i 后跟设备名称
-c 指定抓包数量,抓够了自动退出
port 指定端口
-nn 直接以IP及port number显示,而非主机名与服务名称
-w 后接文件名,将监听所得的数据包存储下来(二进制存储)
-r 后接文件名(-w存储的文件),将这个文件读取出来
其余选项你可以通过man tcpdump一下得到!
上面题目的代码如下:
#!/bin/bash
timeout 3 tcpdump -i eth0 -nn port $1 -w out.txt &>/dev/null
num=`tcpdump -r out.txt 2>/dev/null | wc -l`
echo "Packages: $num"