此脚本包含的功能有:1、实时监控任意网卡的流量

2、统计10秒内平均流量

3、统计每个端口在10秒内的平均流量,基于客户端和服务端端口统计。可以看出哪些端口占流量比较大,对于web服务器,一般是80端口。其它端口受到***时,也有可能其它端口流量比较大。所以此功能可以帮助我们端口流量是否正常。

4、统计在10s内占用带宽最大的前10个ip。此项功能可以帮助我们来查出是否有恶意占用带宽的ip。

5、统计连接状态。此项功能可以让我们看出哪些连接状态比较大。如果SYN-RECV状态比较多的话,有可以受到半连接***。如果ESTABLISED非常大,但通过日志发现没有那么多请求,或者通过tcpdump发现大量ip只建立连接不请求数据的话,可能是受到了全连接***,这时候如果你使用的是nginx服务器,可以在配置文件增加listen 80 deferred来防止。

6、统计各端口连接状态。当可能受到***时,此项功能可以帮助我们发现是哪个端口受到***。

7、统计端口为80且状态为ESTAB连接数最多的前10个IP。此项功能可以帮助我们来找出创建连接过多的Ip,进而屏蔽。

8、统计端口为80且状态为SYN-RECV连接数最多的前10个IP。当受到半连接***时,此项功能可以帮助我们找到恶意ip

用到的网络分析工具:1、tcpdump:此脚本用tcpdump来统计基于ip或基于端口的流量。

2、ss: 此脚本用ss命令来统计连接状态,实际使用发现ss比netstat高效得多。

3、/proc/net/dev,用来统计指定网卡的流量。#!/bin/bash

#显示菜单(单选)

display_menu(){

local soft=$1

local prompt="which ${soft} you'd select: "

eval local arr=(\${${soft}_arr[@]})

while true

do

echo -e "#################### ${soft} setting ####################\n\n"

for ((i=1;i<=${#arr[@]};i++ )); do echo -e "$i) ${arr[$i-1]}"; done

echo

read -p "${prompt}" $soft

eval local select=\$$soft

if [ "$select" == "" ] || [ "${arr[$soft-1]}" == ""  ];then

prompt="input errors,please input a number: "

else

eval $soft=${arr[$soft-1]}

eval echo "your selection: \$$soft"

break

fi

done

}

#把带宽bit单位转换为人类可读单位

bit_to_human_readable(){

#input bit value

local trafficValue=$1

if [[ ${trafficValue%.*} -gt 922 ]];then

#conv to Kb

trafficValue=`awk -v value=$trafficValue 'BEGIN{printf "%0.1f",value/1024}'`

if [[ ${trafficValue%.*} -gt 922 ]];then

#conv to Mb

trafficValue=`awk -v value=$trafficValue 'BEGIN{printf "%0.1f",value/1024}'`

echo "${trafficValue}Mb"

else

echo "${trafficValue}Kb"

fi

else

echo "${trafficValue}b"

fi

}

#判断包管理工具

check_package_manager(){

local manager=$1

local systemPackage=''

if cat /etc/issue | grep -q -E -i "ubuntu|debian";then

systemPackage='apt'

elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat";then

systemPackage='yum'

elif cat /proc/version | grep -q -E -i "ubuntu|debian";then

systemPackage='apt'

elif cat /proc/version | grep -q -E -i "centos|red hat|redhat";then

systemPackage='yum'

else

echo "unkonw"

fi

if [ "$manager" == "$systemPackage" ];then

return 0

else

return 1

fi

}

#实时流量

realTimeTraffic(){

local eth=""

local nic_arr=(`ifconfig | grep -E -o "^[a-z0-9]+" | grep -v "lo" | uniq`)

local nicLen=${#nic_arr[@]}

if [[ $nicLen -eq 0 ]]; then

echo "sorry,I can not detect any network device,please report this issue to author."

exit 1

elif [[ $nicLen -eq 1 ]]; then

eth=$nic_arr

else

display_menu nic

eth=$nic

fi

local clear=true

local eth_in_peak=0

local eth_out_peak=0

local eth_in=0

local eth_out=0

while true;do

#移动光标到0:0位置

printf "\033[0;0H"

#清屏并打印Now Peak

[[ $clear == true ]] && printf "\033[2J" && echo "$eth--------Now--------Peak-----------"

traffic_be=(`awk -v eth=$eth -F'[: ]+' '{if ($0 ~eth){print $3,$11}}' /proc/net/dev`)

sleep 2

traffic_af=(`awk -v eth=$eth -F'[: ]+' '{if ($0 ~eth){print $3,$11}}' /proc/net/dev`)

#计算速率

eth_in=$(( (${traffic_af[0]}-${traffic_be[0]})*8/2 ))

eth_out=$(( (${traffic_af[1]}-${traffic_be[1]})*8/2 ))

#计算流量峰值

[[ $eth_in -gt $eth_in_peak ]] && eth_in_peak=$eth_in

[[ $eth_out -gt $eth_out_peak ]] && eth_out_peak=$eth_out

#移动光标到2:1

printf "\033[2;1H"

#清除当前行

printf "\033[K"

printf "%-20s %-20s\n" "Receive:  $(bit_to_human_readable $eth_in)" "$(bit_to_human_readable $eth_in_peak)"

#清除当前行

printf "\033[K"

printf "%-20s %-20s\n" "Transmit: $(bit_to_human_readable $eth_out)" "$(bit_to_human_readable $eth_out_peak)"

[[ $clear == true ]] && clear=false

done

}

#流量和连接概览

trafficAndConnectionOverview(){

if ! which tcpdump > /dev/null;then

echo "tcpdump not found,going to install it."

if check_package_manager apt;then

apt-get -y install tcpdump

elif check_package_manager yum;then

yum -y install tcpdump

fi

fi

local reg=""

local eth=""

local nic_arr=(`ifconfig | grep -E -o "^[a-z0-9]+" | grep -v "lo" | uniq`)

local nicLen=${#nic_arr[@]}

if [[ $nicLen -eq 0 ]]; then

echo "sorry,I can not detect any network device,please report this issue to author."

exit 1

elif [[ $nicLen -eq 1 ]]; then

eth=$nic_arr

else

display_menu nic

eth=$nic

fi

echo "please wait for 10s to generate network data..."

echo

#当前流量值

local traffic_be=(`awk -v eth=$eth -F'[: ]+' '{if ($0 ~eth){print $3,$11}}' /proc/net/dev`)

#tcpdump监听网络

tcpdump -v -i $eth -tnn > /tmp/tcpdump_temp 2>&1 &

sleep 10

clear

kill `ps aux | grep tcpdump | grep -v grep | awk '{print $2}'`

#处理tcpdump文件

awk '/^IP/{print;getline;print}' /tmp/tcpdump_temp > /tmp/tcpdump_temp2

awk '{len=$NF;sub(/\)/,"",len);getline;print $0,len}' /tmp/tcpdump_temp2 > /tmp/tcpdump

#10s后流量值

local traffic_af=(`awk -v eth=$eth -F'[: ]+' '{if ($0 ~eth){print $3,$11}}' /proc/net/dev`)

#打印10s平均速率

local eth_in=$(( (${traffic_af[0]}-${traffic_be[0]})*8/10 ))

local eth_out=$(( (${traffic_af[1]}-${traffic_be[1]})*8/10 ))

echo -e "\033[32mnetwork device $eth average traffic in 10s: \033[0m"

echo "$eth Receive: $(bit_to_human_readable $eth_in)/s"

echo "$eth Transmit: $(bit_to_human_readable $eth_out)/s"

echo

#统计每个端口在10s内的平均流量

regTcpdump=$(ifconfig | grep -A 1 $eth | awk -F'[: ]+' '$0~/inet addr:/{printf $4"|"}' | sed -e 's/|$//' -e 's/^/(/' -e 's/$/)\\\\\.[0-9]+:/')

echo -e "\033[32maverage traffic in 10s base on server port: \033[0m"

awk -F'[ .:]+' -v regTcpdump=$regTcpdump '{if ($0 ~ regTcpdump){line="clients > "$8"."$9"."$10"."$11":"$12}else{line=$2"."$3"."$4"."$5":"$6" > clients"};sum[line]+=$NF*8/10}END{for (line in sum){printf "%s %d\n",line,sum[line]}}' /tmp/tcpdump | \

sort -k 4 -nr | head -n 10 | while read a b c d;do

echo "$a $b $c $(bit_to_human_readable $d)/s"

done

echo

echo -e "\033[32maverage traffic in 10s base on client port: \033[0m"

awk -F'[ .:]+' -v regTcpdump=$regTcpdump '{if ($0 ~ regTcpdump){line=$2"."$3"."$4"."$5":"$6" > server"}else{line="server > "$8"."$9"."$10"."$11":"$12};sum[line]+=$NF*8/10}END{for (line in sum){printf "%s %d\n",line,sum[line]}}' /tmp/tcpdump | \

sort -k 4 -nr | head -n 10 | while read a b c d;do

echo "$a $b $c $(bit_to_human_readable $d)/s"

done

echo

#统计在10s内占用带宽最大的前10个ip

echo -e "\033[32mtop 10 ip average traffic in 10s : \033[0m"

awk -F'[ .:]+' -v regTcpdump=$regTcpdump '{if ($0 ~ regTcpdump){line=$2"."$3"."$4"."$5" > "$8"."$9"."$10"."$11":"$12}else{line=$2"."$3"."$4"."$5":"$6" > "$8"."$9"."$10"."$11};sum[line]+=$NF*8/10}END{for (line in sum){printf "%s %d\n",line,sum[line]}}' /tmp/tcpdump | \

sort -k 4 -nr | head -n 10 | while read a b c d;do

echo "$a $b $c $(bit_to_human_readable $d)/s"

done

echo

#统计连接状态

regSS=$(ifconfig | grep -A 1 $eth | awk -F'[: ]+' '$0~/inet addr:/{printf $4"|"}' | sed -e 's/|$//')

ss -an | grep -v -E "LISTEN|UNCONN" | grep -E "$regSS" > /tmp/ss

echo -e "\033[32mconnection state count: \033[0m"

awk 'NR>1{sum[$(NF-4)]+=1}END{for (state in sum){print state,sum[state]}}' /tmp/ss | sort -k 2 -nr

echo

#统计各端口连接状态

echo -e "\033[32mconnection state count by port: \033[0m"

awk 'NR>1{sum[$(NF-4),$(NF-1)]+=1}END{for (key in sum){split(key,subkey,SUBSEP);print subkey[1],subkey[2],sum[subkey[1],subkey[2]]}}' /tmp/ss | sort -k 3 -nr | head -n 10

echo

#统计端口为80且状态为ESTAB连接数最多的前10个IP

echo -e "\033[32mtop 10 ip ESTAB state count at port 80: \033[0m"

cat /tmp/ss | grep ESTAB | awk -F'[: ]+' '{sum[$(NF-2)]+=1}END{for (ip in sum){print ip,sum[ip]}}' | sort -k 2 -nr | head -n 10

echo

#统计端口为80且状态为SYN-RECV连接数最多的前10个IP

echo -e "\033[32mtop 10 ip SYN-RECV state count at port 80: \033[0m"

cat /tmp/ss | grep -E "$regSS" | grep SYN-RECV | awk -F'[: ]+' '{sum[$(NF-2)]+=1}END{for (ip in sum){print ip,sum[ip]}}' | sort -k 2 -nr | head -n 10

}

main(){

while true; do

echo -e "1) real time traffic.\n2) traffic and connection overview.\n"

read -p "please input your select(ie 1): " select

case  $select in

1) realTimeTraffic;break;;

2) trafficAndConnectionOverview;break;;

*) echo "input error,please input a number.";;

esac

done

}

main

linux前10ip,检查网口流量与前10名流量大IP相关推荐

  1. 检查网口流量与前10名流量大IP

    此脚本包含的功能有: 1.实时监控任意网卡的流量 2.统计10秒内平均流量 3.统计每个端口在10秒内的平均流量,基于客户端和服务端端口统计.可以看出哪些端口占流量比较大,对于web服务器,一般是80 ...

  2. linux开机磁盘检查启动慢,Ubuntu 7.10开机启动慢的完美解决

    全新安装Ubuntu 7.10后启动速度变得异常缓慢,多方查找后发现是File System Check(Fsck)的问题 解决方法如下: 1. 在Terminal中输入:sudo gedit /et ...

  3. 图的m着色问题——回溯法及其优化(变量排序MRV, 值排序MCV, 前向检查ForwardChecking, 智能回溯, 边相容,K阶相容)python C++实现

    文章目录 图的m着色问题背景 背景知识 问题描述 回溯法的原理及其实现 回溯法基本思想 朴素回溯法解决图的m着色问题 回溯优化策略 回溯法优化--变量排序MRV 回溯法优化--值排序MCV 回溯法优化 ...

  4. (五)Debian Linux中部署Spring Boot + Vue的前后端分离项目详细过程(arm64/aarch64架构下)

    专题系列往期文章目录 (一)移动端安卓手机改造成linux服务器&Linux中安装软件踩坑历险记 (二)Debian Linux系统中安装oracle JDK1.8详细过程(arm64/aar ...

  5. 检查oracle安装,oracle安装前环境检查

    oracle安装前需要检查系统环境,需保证系统中有如下包: binutils-2.17.50.0.6,compat-libstdc++-33-3.2.3,compat-libstdc++-33-3.2 ...

  6. cpu开机就是60℃_注意,制冷机组开机前这些检查很重要

    一.操作前检查 制冷设备开机前检查是关系到制冷设备正常运行的关键一环,所以操作维修人员检查时要特别认真仔细: 1.供电电源是否在380V±5%的范围内. 2.供电及控制开关是否在合闸位置. 3.电控柜 ...

  7. 大陆中文网站流量排名前100

    大陆中文网站流量排名前100 1.   Baidu.com 全球最大中文搜索引擎,向人们提供简单.可依赖的信息获取方式. The leading Chinese language search eng ...

  8. SCI论文投稿前必须检查的29个细节

    论文投稿前必须检查的29个细节 1.拼写检查? 主要检查是否有写错的单词.用错的语句以及标书不合适的地方. 2.多次修改? 一般情况下,论文从写成初稿到最终投稿,至少要修改三遍. 3.不要反复的检查, ...

  9. 中国流量排名前一百名网站

    中国流量排名前一百名网站 1. 百度  主要提供网页.音乐.图片.新闻搜索,同时有贴吧和WAP搜索功能. www.baidu.com 2. 腾讯QQ  腾讯QQ官方网站,提供QQ软件.插件和QQ游戏的 ...

最新文章

  1. oracle中master实例,oracle基础(基本介绍)
  2. 【Spring boot 实战】使用Maven插件构建Docker镜像
  3. SAP MM 初阶之事务代码MIGO中采购退货的处理
  4. 微信小游戏开发教程-游戏实现2
  5. java 布局教程_java布局学习(新)
  6. python合并pdf 加书签_使用Python批量合并PDF文件(带书签功能)
  7. java实现二进制转十六进制
  8. poj 2299 Ultra-QuickSort
  9. pytorch torch.narrow
  10. python私有仓库_创建git私有仓库
  11. postman传数组参数
  12. 史上最全CSDN中免积分下载攻略
  13. 【语义分割系列:一】DeepLab v1 / v2 论文阅读翻译笔记
  14. 摘要:英语词汇记忆方法大家谈
  15. 学习进度2012-6-26(动态规划算法、Prim算法、Dijkstra算法)
  16. Rom制作工具让你一键root畅想未来
  17. 华为防火墙企业双出口专线,配置策略路由实现多个ISP出接口的智能选路和双向NAT
  18. LLVM中指令的一生
  19. IG中最多案赞数居然是一棵蛋?!网友共同合作打破美国女星记录
  20. Cannot add property xxx, object is not extensible

热门文章

  1. php钩子的作用,php中的钩子理解及应用实例分析
  2. 20211217 为什么正定矩阵的主子式都是正的?(注意是主子式,不止是顺序主子式)
  3. CF1096E The Top Scorer
  4. shell 循环 read line
  5. python2.7+pyqt4实现记事本基本功能
  6. 201506251117_《react——所需知识、主要技术》
  7. PHP之Smarty简单实现
  8. #讲座#低碳经济0814
  9. linux命令 - free -m
  10. 设计模式 -(5)装饰模式(结构型)