Netstat简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。
输出linux系统的网络情况信息,以前面试的时候还被问过:“如何查看占用某个端口的程序的pid?”,这个问题实际用netstat -anp输出,然后再grep一下即可。
*基本格式 netstat [option]
执行netstat命令,netstat的输出结果可以分为两个部分:
一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。
另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。 Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。
提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
TCP连接状态详解
LISTEN: 侦听来自远方的TCP端口的连接请求 SYN-SENT: 再发送连接请求后等待匹配的连接请求 SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认 ESTABLISHED: 代表一个打开的连接 FIN-WAIT-1: 等待远程TCP连接中断请求,或先前的连接中断请求的确认 FIN-WAIT-2: 从远程TCP等待连接中断请求 CLOSE-WAIT: 等待从本地用户发来的连接中断请求 CLOSING: 等待远程TCP对连接中断的确认 LAST-ACK: 等待原来的发向远程TCP的连接中断请求的确认 TIME-WAIT: 等待足够的时间以确保远程TCP接收到连接中断请求的确认 CLOSED: 没有任何连接状态 SYN_RECV表示正在等待处理的请求数; ESTABLISHED表示正常数据传输状态; TIME_WAIT表示处理完毕,等待超时结束的请求数。
比如查看Nginx的并发连接情况,以便我们了解网站的负载情况。
执行以下命令:
结果:
ESTABLISHED的数量就是当前并发连接数。
访问量统计 很多时候网站会遭遇恶意攻击,我们需要找到出问题的IP进行封杀。 查询访问最频繁的IP
其他需求
如根据访问IP统计UV
列出所有端口 netstat -a
列出所有 tcp 端口 netstat -at
列出所有 udp 端口 netstat -au
显示程序的pid和名称
输出本机路由表
输出监听状态中的tcp协议统计信息
查看哪些IP连接本机
只显示监听端口 netstat -l
只列出所有监听 tcp 端口 netstat -lt
只列出所有监听 udp 端口 netstat -lu
只列出所有监听 UNIX 端口 netstat -lx
显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su
显示所有活动的网络连接
netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。
并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
找出运行在指定端口的进程
1、lsof -i:端口号 用于查看某一端口的占用情况,比如查看8000端口使用情况,lsof -i:8000 可以看到8000端口已经被轻量级文件系统转发服务lwfs占用;
统计80端口连接数 :
统计httpd协议连接数
统计已连接上的,状态为“established
查出哪个IP地址连接最多,将其封了
对连接的IP按连接数量进行排序
查看80端口连接数最多的20个IP
查找较多time_wait连接
查找较多的SYN连接
查看同时连接到哪个服务器IP比较多 判断cc攻击,使用双网卡或多网卡可用。
查看哪些IP连接到服务器连接多 可以查看连接异常IP。
显示所有80端口的网络连接并排序 这里的80端口是http端口,所以可以用来监控web服务。如果看到同一个IP有大量连接的话就可以判定单点流量攻击了。
查找出当前服务器有多少个活动的 SYNC_REC 连接 正常来说这个值很小,最好小于5。 当有Dos攻击或的时候,这个值相当的高。但是有些并发很高的服务器,这个值确实是很高,因此很高并不能说明一定被攻击。
列出所有连接过的IP地址
列出所有发送SYN_REC连接节点的IP地址
使用netstat命令计算每个主机连接到本机的连接数
列出所有连接到本机的UDP或者TCP连接的IP数量
检查 ESTABLISHED 连接并且列出每个IP地址的连接数量
列出所有连接到本机80端口的IP地址和其连接数 80端口一般是用来处理HTTP网页请求。
显示连接80 端口前10的ip,并显示每个IP的连接数 这里的80端口是http端口,所以可以用来监控web服务。如果看到同一个IP有大量连接的话就可以判定单点流量攻击了。
用tcpdump抓包
2、netstat -tunlp |grep 端口号,用于查看指定的端口号的进程情况,如查看8000端口的情况,
说明一下几个参数的含义:
附加一个python端口占用监测的程序,该程序可以监测指定IP的端口是否被占用。 该程序执行结果如下:
1,查看80端口连接数:
2,对连接的IP按连接数量进行排序:
3,用tcpdump嗅探80端口的访问看看谁最高:
4,iptables屏蔽ip:
如果只是想屏蔽IP的话“3、开放指定的端口”可以直接跳过。
5,对于web服务器(Nginx、Apache等)来说,并发连接数是一个比较重要的参数,下面就通过netstat命令和awk来查看web服务器的并发连接数以及TCP连接状态。
参数解释:
- 在 netstat 输出中显示 PID 和进程名称 netstat -p netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。
- 在 netstat 输出中不显示主机,端口和用户名 (host, port or user) 当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。
同样可以加速输出,因为不用进行比对查询。
如果只是不想让这三个名称中的一个被显示,使用以下命令
- 持续输出 netstat 信息 netstat 将每隔一秒输出网络信息。
- 显示系统不支持的地址族 (Address Families)
在输出的末尾,会有如下的信息
9、显示核心路由信息 netstat -r
注意: 使用 netstat -rn 显示数字格式,不查询主机名称。
- 找出程序运行的端口 并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
找出运行在指定端口的进程 查看所有80端口的连接数
- 显示网络接口列表
显示详细信息,像是 ifconfig 使用 netstat -ie:
- IP和TCP分析 查看连接某服务端口最多的的IP地址
TCP各种状态列表
先把状态全都取出来,然后使用uniq -c统计,之后再进行排序。
最后的命令如下:
分析access.log获得访问前10位的ip地址
13. 查看某个IP地址链接数
问题:1.2.3.4的sshd的监听端口是22,如何统计1.2.3.4的sshd服务各种连接状态(TIME_WAIT/ CLOSE_WAIT/ ESTABLISHED)的连接数。
参考答案:
14、从已经备份好的日志中查询数据 问题:从已备份的suyun.2017-06-26.log.bz2日志中,找出包含关键字1.2.3.4的日志有多少条。
参考答案:
说明:线上日志文件一般以bz2 压缩之后保留,如果解压查询,非常耗空间与时间,bzcat和bzgrep是研发同学必须掌握的工具。
问题:打包备份/opt/web/suyun_web目录,排除掉目录中的logs和目录,打包好的文件存放在/opt/backup目录下。 参考答案:
说明:这个命令线上应用较为频繁,在项目需要打包迁移时,常常需要排除掉日志目录,exclude是需要掌握的参数
16、查询线程数
问题:查询服务器运行服务的总线程数,当机器线程数超报警阀值时,能快速查出相关进程及线程信息。
参考答案:
17、磁盘报警,清空最大文件
问题:找出服务器上,某个正在运行的tomcat产生的大量异常日志,找出该文件,并释放空间。不妨设该文件包含log关键字,并且大于1G。
参考答案:
第一步,找到该文件
第二步,将文件清空
假设找到的文件为a.log
正确的情况方式应该为:echo “”>a.log,文件空间会立刻释放。
很多同学:rm -rf a.log,这样文件虽然删除,但是因tomcat服务仍在运行,空间不会立刻释放,需要重启tomcat才能将空间释放。
18、显示文件,过滤注释
问题:显示server.conf 文件,屏蔽掉#号开头的注释行
参考答案:
19、磁盘IO异常排查
问题:磁盘IO异常如何排查,类似写入慢或当前使用率较高,请查出导致磁盘IO异常高的进程ID。
参考答案: 第一步:iotop -o 查看当前正在写磁盘操作的所有进程ID信息。
第二步:如果此时各项写入指标都很低,基本没有大的写入操作,则需要排查磁盘自身。可以查看系统dmesg或cat /var/log/message 看看是否有相关的磁盘异常报错,同时可以在写入慢的磁盘上touch 一个空文件看看,是否磁盘故障导致无法写入。
linux下追查线上问题常用命令
20、查占用cpu最多的进程
实际命令:
执行效果如下:
结果:
瞧见了吧,最耗cpu的pid=30914(实际上是31396)
方法二:
核心指令:top
实际命令:
21、在上面20的基础上,对应的服务名是什么呢
方法一:
核心指令:ps
实际命令:
执行效果如下:
结果:
瞧见了吧,进程是./router2
方法二:
核心指令:…无,直接查proc
实际命令:
执行效果如下:
结果:
这个好,全路径都出来了
22、查看某个端口的连接情况 方法一:
核心指令:netstat
实际命令:
执行效果如下:
方法二:
核心指令:lsof
实际命令:
执行效果如下:
23、使用netstat命令去查TIME_WAIT状态的连接状态,输入下面的组合命令,查看当前TCP连接的状态和对应的连接数量:
答 :
这个命令会输出类似下面的结果:
我们只用关心TIME_WAIT的个数,在这里可以看到,有18000多个TIME_WAIT,这样就占用了18000多个端口。要知道端口的数量只有65535个,占用一个少一个,会严重的影响到后继的新连接。这种情况下,我们就有必要调整下Linux的TCP内核参数,让系统更快的释放TIME_WAIT连接。
编辑配置文件:/etc/sysctl.conf,在这个文件中,加入下面的几行内容:
输入下面的命令,让内核参数生效:
简单的说明上面的参数的含义:
表示开启SYNcookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
表示开启重用。允许将TIME-WAITsockets重新用于新的TCP连接,默认为0,表示关闭;
表示开启TCP连接中TIME-WAITsockets的快速回收,默认为0,表示关闭;
修改系統默认的TIMEOUT 时间。
在经过这样的调整之后,除了会进一步提升服务器的负载能力之外,还能够防御小流量程度的DoS、CC和SYN攻击。
此外,如果你的连接数本身就很多,我们可以再优化一下TCP的可使用端口范围,进一步提升服务器的并发能力。依然是往上面的参数文件中,加入下面这些配置:
这几个参数,建议只在流量非常大的服务器上开启,会有显著的效果。一般的流量小的服务器上,没有必要去设置这几个参数。
表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
表示用于向外连接的端口范围。缺省情况下很小,改为1024到65535。
表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息。默认为180000,改为5000。此项参数可以控制TIME_WAIT的最大数量,只要超出了。
24、查看Apache当前并发访问数:
查看有多少个进程数:
查看数据
统计httpd进程数,连个请求会启动一个进程,使用于Apache服务器。
表示Apache能够处理1388个并发请求,这个值Apache可根据负载情况自动调整。
netstat -an会打印系统当前网络链接状态,而grep -i "80"是用来提取与80端口有关的连接的,wc -l进行连接数统计。最终返回的数字就是当前所有80端口的请求总数。
netstat -an会打印系统当前网络链接状态,而grep ESTABLISHED 提取出已建立连接的信息。 然后wc -l统计。最终返回的数字就是当前所有80端口的已建立连接的总数。
查看当前的连接数可以用:
计算httpd占用内存的平均数:
实时检测httpd连接数:
查看Apache的并发请求数及其TCP连接状态:
25、查看某个端口链接状态的连接数
平时使用总结,使用此命令如果实在记不住后面参数有哪些,那么直接记住为:-nlap 即可,大部分情况都可以满足我们的需求
netstat常见参数如下:
提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到
26、head到仅显示前 15 行输出:
要仅显示 TCP 端口,请使用–alland–tcp选项,或者-at简称:
要仅显示 UDP 端口,请使用–alland–udp选项,或-au简称:
netstat 的选项通常很直观。例如,要显示具有进程 ID (PID) 和数字地址的所有侦听 TCP 和 UDP 端口:
这种常见组合的简短版本是-tulpn.
要显示有关特定服务的信息,请使用以下内容进行过滤grep:
下一步 运行该netstat命令后,您可以通过确保只有您积极使用的服务在您的网络上侦听来采取措施保护您的系统。
- 识别常用的端口和服务。作为一般规则,请关闭您实际上不使用的端口。
- 注意不常见的端口号,并学会识别系统上正在使用的合法端口。
- 密切注意 SELinux 错误。有时您需要做的只是更新上下文以匹配您对系统所做的 合法更改,但请阅读错误以确保 SELinux 不会提醒您可疑或恶意活动。
如果您发现某个端口正在运行可疑服务,或者您只是想关闭不再使用的端口,您可以按照以下步骤通过防火墙规则手动拒绝端口访问:
如果您正在使用firewall-cmd,请运行以下命令:
如果您使用的是 UFW,请运行以下命令:
27、
28、
29、
30、
参考链接 :
https://www.cnblogs.com/itech/archive/2012/09/09/2678041.html
https://mp.weixin.qq.com/s/OSN14MFsznIE851ypvQE0A
作者:iTech 出处:http://itech.cnblogs.com/
作者:流水莫须 链接https://www.jianshu.com/p/d9fe6be01667 來源:简书
岂止于ping-18个必备Linux网络连接命令,助你掌控黑客行踪! :http://www.safebase.cn/article-256713-1.html