Linux的netstat命令使用

Netstat简介 

Netstat 命令用于显示各类网络相关信息,如网络链接,路由表,接口状态 (Interface Statistics),masquerade 链接,多播成员 (Multicast Memberships) 等等。html

输出linux系统的网络状况信息,之前面试的时候还被问过:“如何查看占用某个端口的程序的pid?”,这个问题实际用netstat -anp输出,而后再grep一下便可。python

基本格式 netstat [option]

  • -a 显示全部socket链接linux

  • -l 显示监控中(listening)的socket链接nginx

  • -n 直接使用ip地址,而不使用域名服务器git

  • -p 显示正在使用socket的程序的pid和名称github

  • -r 打印路由表web

  • -t 显示TCP传输协议的连线情况面试

  • -u 显示UDP传输协议的连线情况ubuntu

  • -s 显示网络工做信息统计表vim

执行netstat命令,netstat的输出结果能够分为两个部分:

一个是Active Internet connections,称为有源TCP链接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字通常都应该是0。若是不是则表示软件包正在队列中堆积。这种状况只能在很是少的状况见到。

另外一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字同样,可是只能用于本机通讯,性能能够提升一倍)。
Proto显示链接使用的协议,RefCnt表示链接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示链接到套接口的其它进程使用的路径名。

 

常见参数

-a (all)显示全部选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的所有转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态

-p 显示创建相关连接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

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:没有任何链接状态

 

提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

案例 : 

        一般使用“-anpt”组合选项,以数字形式显示当前系统中全部的TCP链接信息,同事显示对应的进程信息。结合管道使用“grep”命令,过滤出所须要的特定记录

[root@localhost ~]# netstat -anpt | grep ":22"
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1367/sshd           
tcp        0     64 192.168.231.131:22          192.168.231.1:60782         ESTABLISHED 33595/sshd          
tcp        0      0 :::22                       :::*                        LISTEN      1367/sshd           

 

测试网络链接

统计httpd进程数,连个请求会启动一个进程,使用于Apache服务器。表示Apache可以处理1388个并发请求,这个值Apache可根据负载状况自动调整

netstat -nat|grep -i "80"|wc -l 4341

netstat -an会打印系统当前网络连接状态,而grep -i “80”是用来提取与80端口有关的链接的,wc -l进行链接数统计。最终返回的数字就是当前全部80端口的请求总数

netstat -na|grep ESTABLISHED|wc -l 376

netstat -an会打印系统当前网络连接状态,而grep ESTABLISHED 提取出已创建链接的信息。 而后wc -l统计最终返回的数字就是当前全部80端口的已创建链接的总数。

netstat -nat | grep ESTABLISHED|wc

输出每一个ip的链接数,以及总的各个状态的链接数

netstat -n | awk '/^tcp/ {n=split($(NF-1),array,":");if(n<=2)++S[array[(1)]];else++S[array[(4)]];++s[$NF];++N} END {for(a in S){printf("%-20s %s", a, S[a]);++I}printf("%-20s %s","TOTAL_IP",I);for(a in s) printf("%-20s %s",a, s[a]);printf("%-20s %s","TOTAL_LINK",N);}'

查看当前主机正在监听的端口

#netstat -an | grep LISTEN

查看Tcpip并发链接数以及这个 端口对外的链接

# netstat -nao |more

跑WEB 你就用iftop看下 访问进来的IP

yum install libpcap  进行安装

#nethogs eth0

DEV列显示设备名,SEND是服务器发送的流量,RECEIVED服务器接收的流量。 // 按 m 能够切换统计方式  : 流量速度KB/sec  或 总数{KB /B /m}

 

查看服务器当前的并发访问量

统计服务器全部url被请求的数量

netstat -pnt | grep :80 | wc -l

 

1. 列出全部端口 (包括监听和未监听的)

#netstat -na
显示出全部处于监听状态的应用程序及进程号和端口号:

#netstat -aultnp
若是想对一个单一的进行查询,只须要在命令后面再加上“| grep $”。这里就用到了管道符,以及grep筛选命令,$表明参数,也就是你要查询的那个。

 

显示全部80端口的网络链接:

#netstat -aultnp | grep 80

对返回的链接列表进行排序,这就要用到sort命令了,命令以下:

#netstat -aultnp | grep :80 | sort

使用netstat 命令来找到运行在这个端口上的进程

# netstat -tunp | grep 22

进行统计的话,就能够再日后面加wc命令。如:

#netstat -aultnp | grep :80 | wc -l

使用lsof 命令来找到运行在该端口的进程

# lsof -i:22

使用和iptraf 相似的工具iftop ,来找出流量从哪些端口发送出去的。

# iftop -P

查看端口以及服务,收发的流量。

#jnettop

查找出当前服务器有多少个活动的 SYNC_REC 链接。正常来讲这个值很小,最好小于5。 当有Dos攻击或者邮件炸弹的时候,这个值至关的高。尽管如此,这个值和系统有很大关系,有的服务器值就很高,也是正常现象。

#netstat -n -p | grep SYN_REC | sort -u
列出全部链接过的IP地址。

 

#netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'
列出全部发送SYN_REC链接节点的IP地址。

 

查看服务器并发链接全部状态的命令

#netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

状态:描述 
CLOSED:      无链接是活动的或正在进行 
LISTEN:        服务器在等待进入呼叫 
SYN_RECV:   一个链接请求已经到达,等待确认 
SYN_SENT:   应用已经开始,打开一个链接 
ESTABLISHED:     正常数据传输状态 
FIN_WAIT1:         应用说它已经完成 
FIN_WAIT2:         另外一边已赞成释放 
ITMED_WAIT:      等待全部分组死掉 
CLOSING:    两边同时尝试关闭 
TIME_WAIT:      另外一边已初始化一个释放 
LAST_ACK:        等待全部分组死掉
 

#netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
使用netstat命令计算每一个主机链接到本机的链接数。

#netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
列出全部链接到本机的UDP或者TCP链接的IP数量。

 

#netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
检查 ESTABLISHED 链接而且列出每一个IP地址的链接数量。

 

#netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
列出全部链接到本机80端口的IP地址和其链接数。80端口通常是用来处理HTTP网页请求。

 

       经过防火墙规则,添加一个规则拒接这个假IP的网段链接。

例如:

#iptables -A INPUT 1 -s $IPADRESS -j DROP/REJECT
      注意,你需将$IPADRESS 替换成须要拒绝链接的IP地址。执行完iptables 后呢,要重启一下web服务。

 

  列出全部端口 netstat -a 

# netstat -a | more
 Active Internet connections (servers and established)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State
 tcp        0      0 localhost:30037         *:*                     LISTEN
 udp        0      0 *:bootpc                *:*
 
Active UNIX domain sockets (servers and established)
 Proto RefCnt Flags       Type       State         I-Node   Path
 unix  2      [ ACC ]     STREAM     LISTENING     6135     /tmp/.X11-unix/X0
 unix  2      [ ACC ]     STREAM     LISTENING     5140     /var/run/acpid.socket

查看631端口

[root@localhost ~]# netstat -anpt | grep 631
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1218/cupsd 
tcp 0 0 ::1:631 :::* LISTEN 1218/cupsd

 

查看链接你服务器 top10 用户端的 IP 地址:

netstat -nat | awk '{print $5}' | awk -F ':' '{print $1}' | sort | uniq -c | sort -rn | head -n 10

 

  列出全部 tcp 端口 netstat -at

# netstat -at
 Active Internet connections (servers and established)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State
 tcp        0      0 localhost:30037         *:*                     LISTEN
 tcp        0      0 localhost:ipp           *:*                     LISTEN
 tcp        0      0 *:smtp                  *:*                     LISTEN
 tcp6       0      0 localhost:ipp           [::]:*                  LISTEN

 

  列出全部 udp 端口 netstat -au

# netstat -au
 Active Internet connections (servers and established)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State
 udp        0      0 *:bootpc                *:*
 udp        0      0 *:49119                 *:*
 udp        0      0 *:mdns                  *:*

 

查看Web服务器(Nginx Apache)的并发请求数及其TCP链接状态

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

netstat -n|grep  ^tcp|awk '{print $NF}'|sort -nr|uniq -c

 

查看服务器还在创建链接的命令

#netstat -nat|grep ESTABLISHED|wc -l

查看某个端口号的并发链接数

# netstat -antp | grep 8080 | grep ESTABLISHED -c

netstat -na | grep ESTAB | grep 8080 | wc -l //统计tomcat并发链接数;

 

查看nginx或者tomcat tcp链接

netstat -nat|grep 80

 

显示程序的pid和名称 

netstat -anp 

输出本机路由表

netstat -r

输出监听状态中的tcp协议统计信息

netstat -lts

 

2. 列出全部处于监听状态的 Sockets

  只显示监听端口 netstat -l

# netstat -l
 Active Internet connections (only servers)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State
 tcp        0      0 localhost:ipp           *:*                     LISTEN
 tcp6       0      0 localhost:ipp           [::]:*                  LISTEN
 udp        0      0 *:49119                 *:*

  只列出全部监听 tcp 端口 netstat -lt

# netstat -lt
 Active Internet connections (only servers)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State
 tcp        0      0 localhost:30037         *:*                     LISTEN
 tcp        0      0 *:smtp                  *:*                     LISTEN
 tcp6       0      0 localhost:ipp           [::]:*                  LISTEN

  只列出全部监听 udp 端口 netstat -lu

# netstat -lu
 Active Internet connections (only servers)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State
 udp        0      0 *:49119                 *:*
 udp        0      0 *:mdns                  *:*

  只列出全部监听 UNIX 端口 netstat -lx

 

# netstat -lx
 Active UNIX domain sockets (only servers)
 Proto RefCnt Flags       Type       State         I-Node   Path
 unix  2      [ ACC ]     STREAM     LISTENING     6294     private/maildrop
 unix  2      [ ACC ]     STREAM     LISTENING     6203     public/cleanup
 unix  2      [ ACC ]     STREAM     LISTENING     6302     private/ifmail
 unix  2      [ ACC ]     STREAM     LISTENING     6306     private/bsmtp

 

显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su

# netstat -st 
# netstat -su

 

3. 在 netstat 输出中显示 PID 和进程名称 netstat -p

netstat -p 能够与其它开关一块儿使用,就能够添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候能够很方便的发现特定端口运行的程序。

# netstat -pt
 Active Internet connections (w/o servers)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
 tcp        1      0 ramesh-laptop.loc:47212 192.168.185.75:www        CLOSE_WAIT  2109/firefox

tcp 0 0 ramesh-laptop.loc:52750 lax:www ESTABLISHED 2109/firefox 

 

4. 找出程序运行的端口

并非全部的进程都能找到,没有权限的会不显示,使用 root 权限查看全部的信息。

# netstat -ap | grep ssh
 tcp        1      0 dev-db:ssh           101.174.100.22:39213        CLOSE_WAIT  -
 tcp        1      0 dev-db:ssh           101.174.100.22:57643        CLOSE_WAIT  -

  找出运行在指定端口的进程

# netstat -an | grep ':80' 

 

netcat

nc -vv IP 端口号:意思是只显示该 IP 地址的某端口是否处于正常状态(succeeded:成功,Connection refused:链接拒绝)

nc -z IP 端口号; echo $?:意思是判断该 IP 地址的某端口是否有误(0:无误,1:有误)

[root@localhost ~]# nc -vv 192.168.1.127 22
Connection to 192.168.1.127 22 port [tcp/ssh] succeeded!
SSH-2.0-OpenSSH_5.3
[root@localhost ~]# nc -z 192.168.1.127 22; echo $?
Connection to 192.168.1.127 22 port [tcp/ssh] succeeded!
0
[root@localhost ~]# nc -vv 192.168.1.127 3306
nc: connect to 192.168.1.127 port 3306 (tcp) failed: Connection refused

    lsof

lsof 查看端口占用语法格式:lsof -i :端口号

 

[root@localhost ~]# lsof -i:631
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
cupsd 1218 root 6u IPv6 12257 0t0 TCP localhost:ipp (LISTEN)
cupsd 1218 root 7u IPv4 12258 0t0 TCP localhost:ipp (LISTEN)
cupsd 1218 root 9u IPv4 12261 0t0 UDP *:ipp

端口扫描工具

nmap 127.0.0.1 不加任何参数将以默认的方式扫描 127.0.0.1 主机的开放端口和服务名称。

使用 -sT 参数尝试同目标主机的每一个 TCP 端口创建链接、观察有哪些端口处于开放状态以及所运行的有哪些服务;

 

例如:扫描 GitHub 网站,看看存在哪些开放的端口。

[root@localhost ~]# nmap -sT www.github.com

Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-27 10:24 CST
Nmap scan report for www.github.com (52.74.223.119)
Host is up (0.15s latency).
rDNS record for 52.74.223.119: ec2-52-74-223-119.ap-southeast-1.compute.amazonaws.com
Not shown: 996 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
9418/tcp open git

Nmap done: 1 IP address (1 host up) scanned in 70.72 seconds

扫描指定的 IP ,看看存在哪些开放的端口。

 

[root@localhost ~]# nmap -sT 220.181.38.150

Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-27 10:40 CST
Nmap scan report for 220.181.38.150
Host is up (0.0056s latency).
Not shown: 999 filtered ports
PORT STATE SERVICE
443/tcp open https

Nmap done: 1 IP address (1 host up) scanned in 4.64 seconds
  • -O 参数:探测主机操做系统;

  • -sV 参数:探测端口上运行的软件;

 

经过上述两项参数,结合在一块儿,扫描 baidu 网站主机操做系统和扫描出的端口上运行着什么软件?

 

扫描后,咱们能够看出端口号为:80 和 443 所运行着 Microsoft Windows UPnP(微软视窗)的软件

[root@localhost ~]# sudo nmap -O -sV www.baidu.com

Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-27 10:32 CST
Nmap scan report for www.baidu.com (220.181.38.150)
Host is up (0.015s latency).
Other addresses for www.baidu.com (not scanned): 220.181.38.149
Not shown: 998 filtered ports
PORT STATE SERVICE VERSION
80/tcp open upnp Microsoft Windows UPnP
443/tcp open ssl/upnp Microsoft Windows UPnP
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: switch
Running: HP embedded
OS details: HP 4000M ProCurve switch (J4121A)
Service Info: OS: Windows

OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 22.87 seconds

 

经过上述扫描域名的方式之外,也能够采用 IP 的方式来进行扫描指定主机的操做系统和端口上所运行的软件;

[root@localhost ~]# sudo nmap -O -sV 220.181.38.150

Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-27 10:35 CST
Nmap scan report for 220.181.38.150
Host is up (0.015s latency).
Not shown: 998 filtered ports
PORT STATE SERVICE VERSION
80/tcp open upnp Microsoft Windows UPnP
443/tcp open ssl/upnp Microsoft Windows UPnP
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: switch
Running (JUST GUESSING): HP embedded (86%)
Aggressive OS guesses: HP 4000M ProCurve switch (J4121A) (86%)
No exact OS matches for host (test conditions non-ideal).
Service Info: OS: Windows

OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 21.82 seconds

 

  • -sS 参数:经过向目标的某一个端口发送 TCP SYN 包,而后根据对方不一样的回应来判断该端口是否处于监听状态。

[root@localhost ~]# nmap -sS www.github.com

Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-28 05:03 CST
Nmap scan report for www.github.com (13.229.188.59)
Host is up (0.15s latency).
rDNS record for 13.229.188.59: ec2-13-229-188-59.ap-southeast-1.compute.amazonaws.com
Not shown: 996 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
9418/tcp open git

Nmap done: 1 IP address (1 host up) scanned in 32.39 seconds

 

  • -sA 参数是 TCP ACK 扫描,只用来肯定防火墙的规则集,自己并不扫描目标主机的端口。

[root@localhost ~]# nmap -sA www.newrank.cn

Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-28 05:25 CST
Nmap scan report for www.newrank.cn (47.99.2.204)
Host is up (0.029s latency).
All 1000 scanned ports on www.newrank.cn (47.99.2.204) are filtered

Nmap done: 1 IP address (1 host up) scanned in 17.63 seconds

 

  • -sW 参数相似于 TCP ACK 扫描,能够检测处处于打开状态的端口。

[root@localhost ~]# nmap -sW www.newrank.cn

Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-28 05:55 CST
Nmap scan report for www.newrank.cn (47.99.2.204)
Host is up (0.032s latency).
All 1000 scanned ports on www.newrank.cn (47.99.2.204) are filtered

Nmap done: 1 IP address (1 host up) scanned in 46.43 seconds

 

  • -PN 参数是强制 nmap 对这类主机进行扫描。

[root@localhost ~]# nmap -sT -PN 220.181.38.150

Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-27 10:41 CST
Nmap scan report for 220.181.38.150
Host is up (0.0053s latency).
Not shown: 998 filtered ports
PORT STATE SERVICE
80/tcp open http
443/tcp open https

Nmap done: 1 IP address (1 host up) scanned in 4.00 seconds

 

[root@localhost ~]# nmap -sT -PN -p1-5000 192.168.1.127

Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-27 10:51 CST
Nmap scan report for 192.168.1.127
Host is up (0.00058s latency).
Not shown: 4998 closed ports
PORT STATE SERVICE
22/tcp open ssh
111/tcp open rpcbind

Nmap done: 1 IP address (1 host up) scanned in 0.25 seconds

 

除上述参数以外,还有一些不经常使用的参数。

 

例如:

  • -sF:向目标发送 TCP FIN 包,根据目标的响应进行判断;

[root@localhost ~]# nmap -sF www.newrank.cn

 

  • -sX:向目标发送 TCP NULL 包,根据目标的响应进行判断;

[root@localhost ~]# nmap -sX www.newrank.cn

 

  • -sN:向目标发送 FIN、PSH、URG 的包,根据目标的响应进行判断;

[root@localhost ~]# nmap -sN www.newrank.cn

 

  • -sR:用于确认是不是 RPC 端口;

[root@localhost ~]# nmap -sR www.newrank.cn

 

  • -sU:确认哪些是 UDP 端口处于开放的;

[root@localhost ~]# nmap -sU www.newrank.cn

 

  • -sP:向目标发送 TCP ACK 的包,若是有响应,则代表目标处于活动状态;

[root@localhost ~]# nmap -sP www.newrank.cn

 

五、linux中如何查询端口被占用的状况

 

一、lsof -i:端口号 用于查看某一端口的占用状况,好比查看8000端口使用状况,lsof -i:8000

能够看到8000端口已经被轻量级文件系统转发服务lwfs占用

 

二、netstat -tunlp |grep 端口号,用于查看指定的端口号的进程状况,如查看8000端口的状况,netstat -tunlp |grep 8000

说明一下几个参数的含义:

附加一个python端口占用监测的程序,该程序能够监测指定IP的端口是否被占用。

该程序执行结果以下:

六、服务器被攻击经常使用命令

1,查看80端口链接数:
netstat -nat|grep -i "80" |wc -l

2,对链接的IP按链接数量进行排序:
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

3,用tcpdump嗅探80端口的访问看看谁最高:
tcpdump -i eth0 -tnn dst port 80 -c 1000

4,iptables屏蔽ip:

  • 若是只是想屏蔽IP的话“三、开放指定的端口”能够直接跳过。
  • 屏蔽单个IP的命令是 iptables -I INPUT -s 123.45.6.7 -j DROP
  • 封整个段即从123.0.0.1到123.255.255.254的命令 iptables -I INPUT -s 123.0.0.0/8 -j DROP
  • 封IP段即从123.45.0.1到123.45.255.254的命令 iptables -I INPUT -s 124.45.0.0/16 -j DROP
  • 封IP段即从123.45.6.1到123.45.6.254的命令是 iptables -I INPUT -s 123.45.6.0/24 -j DROP

5,对于web服务器(Nginx、Apache等)来讲,并发链接数是一个比较重要的参数,下面就经过netstat命令和awk来查看web服务器的并发链接数以及TCP链接状态。
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(key in S) print key,"\t",S[key]}' FIN_WAIT2 38 CLOSING 3 SYN_RECV 1 CLOSE_WAIT 1 TIME_WAIT 261 ESTABLISHED 71 LAST_ACK 2 FIN_WAIT1 9

参数解释:
CLOSED          无链接是活动的或正在进行 
LISTEN          服务器在等待进入呼叫 
SYN_RECV        一个链接请求已经到达,等待确认 
SYN_SENT        应用已经开始,打开一个链接 
ESTABLISHED     正常数据传输状态/当前并发链接数 
FIN_WAIT1       应用说它已经完成 
FIN_WAIT2       另外一边已赞成释放 
ITMED_WAIT      等待全部分组死掉 
CLOSING         两边同时尝试关闭 
TIME_WAIT       另外一边已初始化一个释放 
LAST_ACK        等待全部分组死掉
ESTABLISHED参数后面的值就是当前系统的并发链接数了。

 

6. 在 netstat 输出中显示 PID 和进程名称 netstat -p

netstat -p 能够与其它开关一块儿使用,就能够添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候能够很方便的发现特定端口运行的程序。

# netstat -pt
 Active Internet connections (w/o servers)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
 tcp        1      0 ramesh-laptop.loc:47212 192.168.185.75:www        CLOSE_WAIT  2109/firefox
 tcp        0      0 ramesh-laptop.loc:52750 lax:www ESTABLISHED 2109/firefox

 

7. 在 netstat 输出中不显示主机,端口和用户名 (host, port or user)

当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。

一样能够加速输出,由于不用进行比对查询。

# netstat -an

若是只是不想让这三个名称中的一个被显示,使用如下命令

# netsat -a --numeric-ports
# netsat -a --numeric-hosts
# netsat -a --numeric-users

 

8. 持续输出 netstat 信息

netstat 将每隔一秒输出网络信息。

# netstat -c
 Active Internet connections (w/o servers)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State
 tcp        0      0 ramesh-laptop.loc:36130 101-101-181-225.ama:www ESTABLISHED
 tcp        1      1 ramesh-laptop.loc:52564 101.11.169.230:www      CLOSING
 tcp        0      0 ramesh-laptop.loc:43758 server-101-101-43-2:www ESTABLISHED
 tcp        1      1 ramesh-laptop.loc:42367 101.101.34.101:www      CLOSING
 ^C

8. 显示系统不支持的地址族 (Address Families)

netstat --verbose

在输出的末尾,会有以下的信息

netstat: no support for `AF IPX' on this system.
netstat: no support for `AF AX25' on this system.
netstat: no support for `AF X25' on this system.
netstat: no support for `AF NETROM' on this system.

九、显示核心路由信息 netstat -r

# netstat -r
 Kernel IP routing table
 Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
 192.168.1.0     *               255.255.255.0   U         0 0          0 eth2
 link-local      *               255.255.0.0     U         0 0          0 eth2
 default         192.168.1.1     0.0.0.0         UG        0 0          0 eth2

注意: 使用 netstat -rn 显示数字格式,不查询主机名称。

10. 找出程序运行的端口

并非全部的进程都能找到,没有权限的会不显示,使用 root 权限查看全部的信息。

# netstat -ap | grep ssh
 tcp        1      0 dev-db:ssh           101.174.100.22:39213        CLOSE_WAIT  -
 tcp        1      0 dev-db:ssh           101.174.100.22:57643        CLOSE_WAIT  -

找出运行在指定端口的进程

# netstat -an | grep ':80'

 

11. 显示网络接口列表

# netstat -i
 Kernel Interface table
 Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
 eth0       1500 0         0      0      0 0             0      0      0      0 BMU
 eth2       1500 0     26196      0      0 0         26883      6      0      0 BMRU
 lo        16436 0         4      0      0 0             4      0      0      0 LRU

显示详细信息,像是 ifconfig 使用 netstat -ie:

# netstat -ie
 Kernel Interface table
 eth0      Link encap:Ethernet  HWaddr 00:10:40:11:11:11
 UP BROADCAST MULTICAST  MTU:1500  Metric:1
 RX packets:0 errors:0 dropped:0 overruns:0 frame:0
 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:1000
 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 Memory:f6ae0000-f6b00000

 

12. IP和TCP分析

查看链接某服务端口最多的的IP地址

wss8848@ubuntu:~$ netstat -nat | grep "192.168.1.15:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20
18 221.136.168.36
3 154.74.45.242
2 78.173.31.236
2 62.183.207.98
2 192.168.1.14
2 182.48.111.215
2 124.193.219.34
2 119.145.41.2
2 114.255.41.30
1 75.102.11.99

TCP各类状态列表

wss8848@ubuntu:~$ netstat -nat |awk '{print $6}'
established)
Foreign
LISTEN
TIME_WAIT
ESTABLISHED
TIME_WAIT
SYN_SENT

先把状态全都取出来,而后使用uniq -c统计,以后再进行排序。

wss8848@ubuntu:~$ netstat -nat |awk '{print $6}'|sort|uniq -c
143 ESTABLISHED
1 FIN_WAIT1
1 Foreign
1 LAST_ACK
36 LISTEN
6 SYN_SENT
113 TIME_WAIT
1 established)

最后的命令以下:

netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn

分析access.log得到访问前10位的ip地址

awk '{print $1}' access.log |sort|uniq -c|sort -nr|head -10

 

13. 查看某个IP地址连接数

问题:1.2.3.4的sshd的监听端口是22,如何统计1.2.3.4的sshd服务各类链接状态(TIME_WAIT/ CLOSE_WAIT/ ESTABLISHED)的链接数。

 

参考答案

  • netstat -n | grep 1.2.3.4:22 | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

  • netstat -lnpta | grep ssh | egrep “TIME_WAIT | CLOSE_WAIT | ESTABLISHED”

 

1四、从已经备份好的日志中查询数据

问题:从已备份的suyun.2017-06-26.log.bz2日志中,找出包含关键字1.2.3.4的日志有多少条。

 

参考答案

  • bzcat suyun.2017-06-26.log.bz2 | grep '1.2.3.4' | wc -l

  • bzgrep '1.2.3.4' suyun.2017-06-26.log.bz2 | wc -l

  • less suyun.2017-06-26.log.bz2 | grep '10.37.9.11' | wc -l

说明:线上日志文件通常以bz2 压缩以后保留,若是解压查询,很是耗空间与时间,bzcat和bzgrep是研发同窗必须掌握的工具。

 

1五、备份服务的技巧                          

问题:打包备份/opt/web/suyun_web目录,排除掉目录中的logs和目录,打包好的文件存放在/opt/backup目录下。

 

参考答案

tar -zcvf /opt/backup/shenjian.tar.gz \

    -exclude /opt/web/suyun_web/logs \

    /opt/web/suyun_web

说明:这个命令线上应用较为频繁,在项目须要打包迁移时,经常须要排除掉日志目录,exclude是须要掌握的参数

 

1六、查询线程数                           

问题:查询服务器运行服务的总线程数,当机器线程数超报警阀值时,能快速查出相关进程及线程信息。

 

参考答案

  • ps -eLf | wc -l

  • pstree -p | wc -l

 

1七、磁盘报警,清空最大文件               

问题:找出服务器上,某个正在运行的tomcat产生的大量异常日志,找出该文件,并释放空间。不妨设该文件包含log关键字,而且大于1G。

 

参考答案

第一步,找到该文件

  • find / -type f -name "*log*" | xargs ls -lSh | more 

  • du -a / | sort -rn | grep log | more

  • find / -name '*log*' -size +1000M -exec du -h {} \;

第二步,将文件清空

假设找到的文件为a.log

正确的状况方式应该为:echo "">a.log,文件空间会马上释放。

不少同窗:rm -rf a.log,这样文件虽然删除,可是因tomcat服务仍在运行,空间不会马上释放,须要重启tomcat才能将空间释放。

 

1八、显示文件,过滤注释

问题:显示server.conf 文件,屏蔽掉#号开头的注释行

 

参考答案

  • sed -n '/^[#]/!p' server.conf

  • sed -e '/^#/d' server.conf

  • grep -v "^#" server.conf

 

1九、磁盘IO异常排查                                    

问题:磁盘IO异常如何排查,相似写入慢或当前使用率较高,请查出致使磁盘IO异常高的进程ID。

 

参考答案

第一步:iotop -o 查看当前正在写磁盘操做的全部进程ID信息

 

第二步:若是此时各项写入指标都很低,基本没有大的写入操做,则须要排查磁盘自身。能够查看系统dmesg或cat /var/log/message 看看是否有相关的磁盘异常报错,同时能够在写入慢的磁盘上touch 一个空文件看看,是否磁盘故障致使没法写入。

 

linux下追查线上问题经常使用命令

 

20、查占用cpu最多的进程

实际命令:

ps H -eo pid,pcpu | sort -nk2 | tail

执行效果以下:

[work@test01 ~]$ ps H -eo pid,pcpu | sort -nk2 | tail

31396 0.6

31396 0.6

31396 0.6

31396 0.6

31396 0.6

31396 0.6

31396 0.6

31396 0.6

30904 1.0

30914 1.0

结果:

瞧见了吧,最耗cpu的pid=30914(其实是31396)

方法二:

核心指令:top

实际命令:

top

Shift + t

 

2一、在上面20的基础上,对应的服务名是什么呢

方法一:

核心指令:ps

实际命令:

ps aux | fgrep pid

执行效果以下:

[work@test01 ~]$ ps aux | fgrep 30914

work 30914 1.0 0.8 309568 71668 ? Sl Feb02 124:44 ./router2 –conf=rs.conf

结果:

瞧见了吧,进程是./router2

 

方法二:

核心指令:…无,直接查proc

实际命令:

ll /proc/pid

执行效果以下:

[work@test01 ~]$ ll /proc/30914

lrwxrwxrwx 1 work work 0 Feb 10 13:27 cwd -> /home/work/im-env/router2

lrwxrwxrwx 1 work work 0 Feb 10 13:27 exe -> /home/work/im-env/router2/router2

结果:

这个好,全路径都出来了

 

2二、查看某个端口的链接状况

方法一:

核心指令:netstat

实际命令:

netstat -lap | fgrep port

执行效果以下:

[work@test01 ~]$ netstat -lap | fgrep 22022

tcp 0 0 10.58.xxx.29:22022 *:* LISTEN 31396/imui

tcp 0 0 10.58.xxx.29:22022 10.58.xxx.29:46642 ESTABLISHED 31396/imui

tcp 0 0 10.58.xxx.29:22022 10.58.xxx.29:46640 ESTABLISHED 31396/imui

 

方法二:

核心指令:lsof

实际命令:

lsof -i :port

执行效果以下:

[work@test01 ~]$ /usr/sbin/lsof -i :22022

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

router 30904 work 50u IPv4 69065770 TCP 10.58.xxx.29:46638->10.58.xxx.29:22022 (ESTABLISHED)

router 30904 work 51u IPv4 69065772 TCP 10.58.xxx.29:46639->10.58.xxx.29:22022 (ESTABLISHED)

router 30904 work 52u IPv4 69065774 TCP 10.58.xxx.29:46640->10.58.xxx.29:22022 (ESTABLISHED)

 

 

2三、使用netstat命令去查TIME_WAIT状态的链接状态,输入下面的组合命令,查看当前TCP链接的状态和对应的链接数量:

答 :

# netstat-n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

这个命令会输出相似下面的结果:

LAST_ACK16

SYN_RECV348

ESTABLISHED70

FIN_WAIT1229

FIN_WAIT230

CLOSING33

TIME_WAIT18098

咱们只用关心TIME_WAIT的个数,在这里能够看到,有18000多个TIME_WAIT,这样就占用了18000多个端口。要知道端口的数量只有65535个,占用一个少一个,会严重的影响到后继的新链接。这种状况下,咱们就有必要调整下Linux的TCP内核参数,让系统更快的释放TIME_WAIT链接。

编辑配置文件:/etc/sysctl.conf,在这个文件中,加入下面的几行内容:

# vim /etc/sysctl.conf

net.ipv4.tcp_syncookies= 1

net.ipv4.tcp_tw_reuse= 1

net.ipv4.tcp_tw_recycle= 1

net.ipv4.tcp_fin_timeout= 30

输入下面的命令,让内核参数生效:

# sysctl-p

简单的说明上面的参数的含义:

net.ipv4.tcp_syncookies= 1

表示开启SYNCookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少许SYN攻击,默认为0,表示关闭;

net.ipv4.tcp_tw_reuse= 1

表示开启重用。容许将TIME-WAITsockets从新用于新的TCP链接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle= 1

表示开启TCP链接中TIME-WAITsockets的快速回收,默认为0,表示关闭;

net.ipv4.tcp_fin_timeout

修改系統默认的TIMEOUT 时间。

在通过这样的调整以后,除了会进一步提高服务器的负载能力以外,还可以防护小流量程度的DoS、CC和SYN攻击。

此外,若是你的链接数自己就不少,咱们能够再优化一下TCP的可以使用端口范围,进一步提高服务器的并发能力。依然是往上面的参数文件中,加入下面这些配置:

net.ipv4.tcp_keepalive_time= 1200

net.ipv4.ip_local_port_range= 1024 65535

net.ipv4.tcp_max_syn_backlog= 8192

net.ipv4.tcp_max_tw_buckets= 5000

这几个参数,建议只在流量很是大的服务器上开启,会有显著的效果。通常的流量小的服务器上,没有必要去设置这几个参数。

net.ipv4.tcp_keepalive_time= 1200

表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改成20分钟。

ip_local_port_range= 1024 65535

表示用于向外链接的端口范围。缺省状况下很小,改成1024到65535。

net.ipv4.tcp_max_syn_backlog= 8192

表示SYN队列的长度,默认为1024,加大队列长度为8192,能够容纳更多等待链接的网络链接数。

net.ipv4.tcp_max_tw_buckets= 5000

表示系统同时保持TIME_WAIT的最大数量,若是超过这个数字,TIME_WAIT将马上被清除并打印警告信息。默认为180000,改成5000。此项参数能够控制TIME_WAIT的最大数量,只要超出了。

 

2四、

 

 

2五、

 

2六、

 

 

2七、

 

 

2八、

 

 

2九、

 

 

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 來源:简书

相关文章
相关标签/搜索