Linux监测某一时刻对外的IP连接情况

之前有需要,在CSDN上找到一篇不错的文章: https://blog.csdn.net/wolfzhaoshuai/article/details/46803719 此篇中介绍的直接方法仅能输出远程IP,因此做了一些改进: 可以显示进程信息和收发数据量(当然,是group之后的第一条,进程可以有些参考价值) 权当抛砖引玉,有更好的方法 ,欢迎留言交流。 命令:

netstat -untp |sed '1,2 d'|cut -d':' --output-delimiter=' ' -f1,2,3,4|awk '{print $9":"$10"|"$2"|"$3"|"$5"|"$7,$1,$4,$6}'|sort|uniq -c -f1 |sort -nr | cut -d'|' --output-delimiter=' ' -f1,2,3,4,5,6,7,8,9|awk '{print $1,$3,$4,$7,$8":"$5,$9":"$6,$2}'

分解:

1.  netstat -untp //输出网络信息
2.  sed '1,2 d'//去掉一二行
3.  cut -d':' --output-delimiter=' ' -f1,2,3,4//按:切开并用空格分开,主要是为了把端口号分离出来以免统计重复行时因为端口号不一样产生影响
4.  awk '{print $9":"$10"|"$2"|"$3"|"$5"|"$7,$1,$4,$6}'//把一些会影响重复行判断的因素组成一列
5.  sort//排序
6.  uniq -c -f1//判断复复行,忽略第一列,这就是上面为什么要把组合列放在第一列的原因了
7.  sort -nr//再次排序
8.  cut -d'|' --output-delimiter=' ' -f1,2,3,4,5,6,7,8,9//把之前的第一列再拆开
9.  awk '{print $1,$3,$4,$7,$8":"$5,$9":"$6,$2}'//重新组合输出内容

执行结果:

1.  //重复行数 recv send localAddress foreignAddress PID/ProgramName
2.  8 0 0 tcp 172.18.253.218:32894 183.61.180.220:443 -:
3.  7 0 0 tcp 172.18.253.218:34730 172.18.253.219:3306 -:
4.  6 0 0 tcp 172.18.253.218:42106 120.25.112.91:443 -:
5.  4 0 0 tcp 172.18.253.218:51590 115.28.232.153:3306 -:
6.  3 0 0 tcp 172.18.253.218:22 183.50.13.146:3835 8150/sshd:
7.  3 0 0 tcp 172.18.253.218:22 183.50.13.146:2361 10534/sshd:
8.  3 0 0 tcp 127.0.0.1:9000 127.0.0.1:47812 -:
9.  2 0 0 tcp 127.0.0.1:32000 127.0.0.1:31000 1349/wrapper:
10. 1 0 64 tcp 172.18.253.218:22 183.11.131.53:5566 9081/sshd:
11. 1 0 0 tcp 172.18.253.218:46238 106.11.248.51:80 1597/AliYunDun:
12. 1 0 0 tcp 172.18.253.218:2049 172.18.253.220:763 -:

如果有发生特别需要监控的情况,可以设定自动任务,按监控密度自已定义秒级别或分钟级别,以下代码存为.sh文件:

1.  #!/bin/bash
2.  basedir="/home/testdir/";
3.  mkdir $basedir;
4.  datedir=$(date +%y%m%d);
5.  mkdir "$basedir$datedir";
6.  fname=$(date +%H%M%S);
7.  netstat -untp |sed '1,2 d'|cut -d':' --output-delimiter=' ' -f1,2,3,4|awk '{print $9":"$10"|"$2"|"$3"|"$5"|"$7,$1,$4,$6}'|sort|uniq -c -f1 |sort -nr | cut -d'|' --output-delimiter=' ' -f1,2,3,4,5,6,7,8,9|awk '{print $1,$3,$4,$7,$8":"$5,$9":"$6,$2}' > $basedir$datedir/$fname.log
9.  //水平有限,以上代码请自己优化

记得一定要关注硬盘空间和inode消耗,否则会出大事:) 也可以网上找找自动删除过期文件的代码加上去。

使用 Hugo 构建
主题 StackJimmy 设计