目的 自动 捕获指定IP或端口的流量生成日志,实现流量探测功能
准备 Root用户权限下才能运行tcpdump脚本
优势 Liunx系统自带,无需安装其他组件,捕获准确度高
缺点 不能同时检测多个IP流量,效率低
重点
日志文件 touch /home/node1/scripts/tcpdump.log
脚本文件 touch /home/node1/scripts/tcpdump.sh
#!/bin/bashServer_ip=(192.168.0.61 192.168.0.62 192.168.0.63 ) #服务器ip
#Server_port=(80 90) #测试端口号
# 定义日志文件路径
log_file="/home/node1/scripts/tcpdump.log"
# 清空日志文件内容
>$log_fileecho "======== `date +"%Y-%m-%d %H:%M:%S"`========" >>$log_file#当脚本意外停止运行,改变i值,从指定位置开始遍历ip
for ((i=0; i<${#Server_ip[@]}; i++))
do
a=${Server_ip[i]}
#b=${Server_port[i]}# 使用tcpdump命令监听指定网卡上与指定IP地址有关的数据包,并提取数据包的长度tcpdump_output=$(timeout --signal=9 60 tcpdump -i ens160 host $a 2>/dev/null)#tcpdump_output=$(timeout --signal=9 60 telnet $a $b 2>/dev/null)data_lengths=$(echo "$tcpdump_output" | grep "length" | awk '{print $NF}')# 统计数据包数量和总长度packet_count=$(echo "$data_lengths" | wc -l)total_length=$(echo "$data_lengths" | awk '{sum += $1} END {print sum}')
if [ $packet_count -ne 0 ];thenif [ $total_length -ne 0 ];thenecho "服务器$i $a $b流量长度$total_length" | tee -a "$log_file"else echo "服务器$i $a $b流量长度为0" | tee -a "$log_file"fi
else echo "服务器$i $a $b无流量" | tee -a "$log_file"
fi
done
重中重需要修改 $ (timeout --signal=9 60 tcpdump -i ens160 host $a 2>/dev/null)
每个IP探测时间为60秒,网卡为ens160
使用 ip addr 命令查看网卡及其状态