2014年4月20日星期日

Linux_036:常用命令之七:netstat

我们知道,计算机与网络上的其他计算机建立连接是通过开放端口的方式来实现的。
而查看本机开放的端口就要用到netstat命令。
netstat命令用来显示本机网络连接、运行端口和路由表等信息。
netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。

其格式如下:netstat [参数选项]

(1)-a:显示本机所有连接和监听端口。
(2)-n:以网络IP地址的形式显示当前建立的有效连接和端口。
(3)-r:显示路由表信息。
(4)-s:显示按协议的统计信息。默认显示IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP和UDPv6的统计信息。
(5)-v:显示当前的有效连接,与“-n”选项类似。
(6)-t:显示所有的TCP连接情况。
(7)-u:显示所有的UDP连接情况。
(8)-c[秒数]:后面跟的秒数表示每隔几秒就刷新显示一次。
(9)-i:显示自动配置接口的状态。
(10)-l:仅显示连接状态为“LISTEN”的服务的网络状态。
(11)-p:显示连接对应的PID与Program name。

运行netstat需要root权限,下面列举一些常用的命令参数。

1. 列出本机所有连接和监听端口以及对应的PID和Program name:netstat -anp

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 127.0.0.1:9999              0.0.0.0:*                   LISTEN      4849/java        
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1244/rpcbind      
tcp        0      0 127.0.0.1:8080              0.0.0.0:*                   LISTEN      4849/java        
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1664/sshd        
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      1407/cupsd        
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1744/master      
tcp        0      0 127.0.0.1:4447              0.0.0.0:*                   LISTEN      4849/java        
tcp        0      0 127.0.0.1:9990              0.0.0.0:*                   LISTEN      4849/java        
tcp        0      0 0.0.0.0:38310               0.0.0.0:*                   LISTEN      1374/rpc.statd    
tcp        0      0 10.0.2.15:54360             173.194.127.73:80           ESTABLISHED 3265/firefox      
tcp        0      0 10.0.2.15:41326             74.125.235.206:80           ESTABLISHED 3265/firefox      
tcp        1      0 10.0.2.15:38472             23.61.250.43:80             CLOSE_WAIT  2258/clock-applet
tcp        0      0 :::111                      :::*                        LISTEN      1244/rpcbind      
tcp        0      0 :::22                       :::*                        LISTEN      1664/sshd        
tcp        0      0 ::1:631                     :::*                        LISTEN      1407/cupsd        
tcp        0      0 ::1:25                      :::*                        LISTEN      1744/master      
tcp        0      0 :::59594                    :::*                        LISTEN      1374/rpc.statd    
udp        0      0 0.0.0.0:48238               0.0.0.0:*                               1374/rpc.statd    
udp        0      0 0.0.0.0:111                 0.0.0.0:*                               1244/rpcbind      
udp        0      0 0.0.0.0:631                 0.0.0.0:*                               1407/cupsd        
udp        0      0 0.0.0.0:702                 0.0.0.0:*                               1374/rpc.statd    
udp        0      0 0.0.0.0:68                  0.0.0.0:*                               5167/dhclient    
udp        0      0 0.0.0.0:995                 0.0.0.0:*                               1244/rpcbind      
udp        0      0 :::111                      :::*                                    1244/rpcbind      
udp        0      0 :::41636                    :::*                                    1374/rpc.statd    
udp        0      0 :::995                      :::*                                    1244/rpcbind  

1.1 以 tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1664/sshd 这行数据为例说明
(1)tcp 表示使用的传输层协议是TCP。
(2)0.0.0.0:22 表示本机上的任意IP地址,端口是22。
(3)0.0.0.0:* 表示接受任意IP地址的连接,端口任意。
(4)LISTENING 表示处于监听状态。
(5)1664/sshd 表示PID是524,运行的程序是sshd。
这条数据告诉我们:本机运行的程序sshd,其PID是1664,正在本机绑定的任意IP地址的端口22上监听来自任意IP地址任意端口的访问。

1.2 以 tcp        0      0 10.0.2.15:54360             173.194.127.73:80           ESTABLISHED 3265/firefox 这行数据为例说明  
这条数据告诉我们:本机中的firefox(PID=3265)进程使用54360与远程web服务器(173.194.127.73)的80端口建立了一个TCP连接,ESTABLISHED表示已经建立了连接。

2. 端口状态的含义
(1)LISTEN 表示服务器端口正在开放,等待客户端连接。
(2)ESTABLISHED 表示已经建立了连接,数据处于正常传输状态。
(3)CLOSE_WAIT 表示正在关闭的端口。
(4)TIME_WAIT 表示本地连接(客户端)已经正常关闭,此时服务器端状态为TIME_WAIT。
(5)CLOSED 表示没有活动的连接。

要想清楚知道这些状态的含义,就要了解TCP协议的工作过程。






查看本机各个状态的连接有多少个:netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c

3. 查看本机路由信息:netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
0.0.0.0         10.0.2.2        0.0.0.0         UG        0 0          0 eth0
(1)第1行数据:10.0.2.0 表示主机所在网络的地址。
如果数据传送目标是在本局域网内通信,则可直接通过eth0转发数据包。
(2)第2行数据:0.0.0.0 表示默认路由的目标。
默认路由的意思是当一个数据包的目的网段(比如访问Internet)不在当前的路由表中时,将会把这个数据包通过eth0这个接口发送到10.0.2.2这个地址,这个地址是下一个路由器的接口。

4. 查看JVM都在监听哪些进程:netstat -naoputl | grep java


参考文献:
1. http://hi.baidu.com/senya/item/c9031d0f6cd1f511acdc706e
2. http://www.cnblogs.com/peida/archive/2013/03/08/2949194.html
3. http://www.itokit.com/2012/0516/73950.html
4. http://xcily1.blog.163.com/blog/static/2871691620096911313479/
5. http://www.blogjava.net/spray/archive/2008/06/19/209158.html?opt=admin

没有评论: