目 录
一、问题
二、基于netstat,组合命令,查出问题
(一)系统分析
(二)问题定位
二、解决问题
四、总结和拓展
(一)总结
(二)命令解释
(三)拓展
1、监控网站是否被攻击
2、监视自己的应用程序,防止被攻击
一、问题
在互联网上部署了我们一套AS-V1000视频监控平台,今天我们在通过平台管理端访问的时候,非常慢,数据很长时间都出不来。
我们首先怀疑机器网络问题,网络问题排出后;我们怀疑是机器是不是磁盘问题,或者是系统资源被耗尽了。0
通过一些方式,排查,发现硬盘还有很大空间,同时CPU、I/O占用资源也比较少.
再深入查找,发现mysqld的cpu占用率比较高。
因此定位可能是mysql相关问题。
二、基于netstat,组合命令,查出问题
(一)系统分析
.操作系统是Centos7.3, 安装的数据库是mysql5.7,系统中安装的应用程序是AS-V1000视频监控平台。
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
(二)问题定位
使用组合命令:netstat -an -t | grep ":3306" | grep ESTABLISHED | awk '{printf "%s %s\n",$5,$6}' | sort
快速定位问题,如下:
[root@localhost ~]# netstat -an -t | grep ":3306" | grep ESTABLISHED | awk '{printf "%s %s\n",$5,$6}' | sort
122.101.23.223:51084 ESTABLISHED
122.101.23.223:51085 ESTABLISHED
122.101.23.223:51088 ESTABLISHED
122.101.23.223:51089 ESTABLISHED
122.101.23.223:51090 ESTABLISHED
122.101.23.223:51091 ESTABLISHED
122.101.23.223:51092 ESTABLISHED
122.101.23.223:51093 ESTABLISHED
122.101.23.223:51094 ESTABLISHED
122.101.23.223:51095 ESTABLISHED
122.101.23.223:51096 ESTABLISHED
122.101.23.223:51097 ESTABLISHED
…………………
122.101.23.223:52895 ESTABLISHED
122.101.23.223:52896 ESTABLISHED
122.101.23.223:52897 ESTABLISHED
122.101.23.223:52898 ESTABLISHED
122.101.23.223:52898 ESTABLISHED
47.151.23.245:10574 ESTABLISHED
47.151.23.245:10578 ESTABLISHED
47.151.23.245:10580 ESTABLISHED
由此定位,是122.101.23.223这个主机,一直再连接本地mysql数据库,建立了将近2000个连接。
经过确认,这个地址是某个客户的电脑发过来的,肯定是这台电脑的原因。
二、解决问题
问题查出来后,解决就非常简单:
- 客户电脑断开网络,并进行杀毒处理
- 本机防火墙打开,限制122.101.23.223对端口3306的访问
问题解决!
四、总结和拓展
(一)总结
这个问题之所以如此快的解决,主要是采用了合适的命令:
netstat -an -t | grep ":3306" | grep ESTABLISHED | awk '{printf "%s %s\n",$5,$6}' | sort
(二)命令解释
netstat -an -t | grep ":3306" | grep ESTABLISHED | awk '{printf "%s %s\n",$5,$6}' | sort
这个命令组合的目的是列出所有与本地端口的3306建立的ESTABLISHED TCP连接,并显示这些连接的远程地址和端口,最后对输出进行排序。
详细解释如下:
- netstat -an -t
- netstat:一个用于显示网络连接、路由表、接口统计等网络相关信息的命令。
- -a:显示所有活动的网络连接和监听的端口。
- -n:以数字形式显示地址和端口号,而不是尝试解析主机名、服务名等。
- -t:仅显示TCP连接。执行这个命令后,你会看到所有TCP连接的信息,包括本地地址、外部地址、状态等。
- grep ":3306"
- grep:一个搜索特定模式的命令。
- ":3306":这是你要搜索的模式,表示端口号为3306。这个命令会过滤出所有与端口3306相关的行。
- grep ESTABLISHED
- 再次使用grep命令来过滤出状态为ESTABLISHED的连接。ESTABLISHED表示一个打开的连接,数据可以在两个方向上自由流动。
- awk '{printf "%s %s\n",5,6}'
- awk:是一个文本处理工具,用于模式扫描和文本/数据提取。
- '{printf "%s %s\n",$5,$6}':这是awk的命令部分。它告诉awk打印每一行的第5个和第6个字段。默认情况下,netstat的输出中,第5个字段是远程地址,第6个字段是远程端口。因此,这个命令会提取并打印出与端口3306建立的每个ESTABLISHED连接的远程地址和端口。
- sort
- sort:一个排序命令。
- 由于awk的输出可能不是按顺序的,使用sort命令可以对输出进行排序,使其更容易阅读。
(三)拓展
1、监控网站是否被攻击
我们知道,网站很容易受到攻击,这时候,我们可以对网站的端口80 进行监视,采用如下命令即可:
netstat -an -t | grep ":80" | grep ESTABLISHED | awk '{printf "%s %s\n",$5,$6}' | sort
2、监视自己的应用程序,防止被攻击
若我们的应用程序使用的端口是8740,可以采用如下命令,实时监控本端口是否被攻击
netstat -an -t | grep ":8740" | grep ESTABLISHED | awk '{printf "%s %s\n",$5,$6}' | sort