1. 安装

CentOS 7没有netstat命令,需要安装如下

yum install net-tools

2. 常见参数

  • -a (all)显示所有选项,默认不显示LISTEN相关
  • -t (tcp)仅显示tcp相关选项
  • -u (udp)仅显示udp相关选项
  • -n 拒绝显示别名,能显示数字的全部转化成数字。
  • -l 仅列出有在 Listen (监听) 的服務状态
  • -p 显示建立相关链接的程序名
  • -r 显示路由信息,路由表
  • -e 显示扩展信息,例如uid等
  • -s 按各个协议进行统计
  • -c 每隔一个固定时间,执行该netstat命令。

2.1 列出所有的连接

会列出tcp,udp和unix协议下所有套接字的连接。但是我们一般只是想查找某个协议或某个端口的具体连接情况。

netstat -a

2.2 只列出TCP或UDP协议的连接

  • 用-t选项列出TCP协议的连接
  • 用-u选项列出UDP协议的连接
[root@localhost ambari-server]# netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:netbios-ssn     0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:postgres        0.0.0.0:*               LISTEN     
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:microsoft-ds    0.0.0.0:*               LISTEN     
tcp        0      0 localhost.:microsoft-ds gateway:53025           ESTABLISHED
tcp        0      0 localhost.localdoma:ssh gateway:53021           ESTABLISHED
tcp        0     52 localhost.localdoma:ssh gateway:52988           ESTABLISHED
tcp6       0      0 [::]:netbios-ssn        [::]:*                  LISTEN     
tcp6       0      0 [::]:http               [::]:*                  LISTEN     
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
tcp6       0      0 [::]:postgres           [::]:*                  LISTEN     
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN     
tcp6       0      0 [::]:microsoft-ds       [::]:*                  LISTEN     


[root@localhost ambari-server]# netstat -au
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
udp        0      0 localhost:323           0.0.0.0:*                          
udp6       0      0 localhost:57362         localhost:57362         ESTABLISHED
udp6       0      0 localhost:323           [::]:*

2.3 禁用反向域名解析,加快查询速度

默认情况下 netstat 会通过反向域名解析技术查找每个 IP 地址对应的主机名。这会降低查找速度。如果你觉得 IP 地址已经足够,而没有必要知道主机名,就使用 -n 选项禁用域名解析功能。

[root@localhost ambari-server]# netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN     
tcp        0      0 192.168.137.101:445     192.168.137.1:53025     ESTABLISHED
tcp        0      0 192.168.137.101:22      192.168.137.1:53021     ESTABLISHED
tcp        0     52 192.168.137.101:22      192.168.137.1:52988     ESTABLISHED
tcp6       0      0 :::139                  :::*                    LISTEN     
tcp6       0      0 :::80                   :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 :::5432                 :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN     
tcp6       0      0 :::445                  :::*                    LISTEN

2.4 只列出监听中的连接

任何网络服务的后台进程都会打开一个端口,用于监听接入的请求。这些正在监听的套接字也和连接的套接字一样,也能被 netstat 列出来。使用 -l 选项列出正在监听的套接字。

[root@localhost ambari-server]# netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN     
tcp6       0      0 :::139                  :::*                    LISTEN     
tcp6       0      0 :::80                   :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 :::5432                 :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN     
tcp6       0      0 :::445                  :::*                    LISTEN

2.5 获取进程名、进程号以及用户ID

查看端口和连接的信息时,能查看到它们对应的进程名和进程号对系统管理员来说是非常有帮助的。举个例子,Apache 的 httpd 服务开启80端口,如果你要查看 http 服务是否已经启动,或者 http 服务是由 apache 还是 nginx 启动的,这时候你可以看看进程名。

[root@localhost ambari-server]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      9014/smbd           
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      9085/nginx: master  
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      9008/sshd           
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      9975/postgres       
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      9333/master         
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      9014/smbd           
tcp6       0      0 :::139                  :::*                    LISTEN      9014/smbd           
tcp6       0      0 :::80                   :::*                    LISTEN      9085/nginx: master  
tcp6       0      0 :::22                   :::*                    LISTEN      9008/sshd           
tcp6       0      0 :::5432                 :::*                    LISTEN      9975/postgres       
tcp6       0      0 ::1:25                  :::*                    LISTEN      9333/master         
tcp6       0      0 :::445                  :::*                    LISTEN      9014/smbd

使用 -p 选项时,netstat 必须运行在 root 权限之下,不然它就不能得到运行在 root 权限下的进程名,而很多服务包括 http 和 ftp 都运行在 root 权限之下。
相比进程名和进程号而言,查看进程的拥有者会更有用。使用 -ep 选项可以同时查看进程名和用户名。

[root@localhost ambari-server]# netstat -tlep
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name    
tcp        0      0 0.0.0.0:netbios-ssn     0.0.0.0:*               LISTEN      root       45417      9014/smbd           
tcp        0      0 0.0.0.0:http            0.0.0.0:*               LISTEN      root       45331      9085/nginx: master  
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      root       45177      9008/sshd           
tcp        0      0 0.0.0.0:postgres        0.0.0.0:*               LISTEN      postgres   50383      9975/postgres       
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN      root       45770      9333/master         
tcp        0      0 0.0.0.0:microsoft-ds    0.0.0.0:*               LISTEN      root       45416      9014/smbd           
tcp6       0      0 [::]:netbios-ssn        [::]:*                  LISTEN      root       45415      9014/smbd           
tcp6       0      0 [::]:http               [::]:*                  LISTEN      root       45332      9085/nginx: master  
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      root       45193      9008/sshd           
tcp6       0      0 [::]:postgres           [::]:*                  LISTEN      postgres   50384      9975/postgres       
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN      root       45771      9333/master         
tcp6       0      0 [::]:microsoft-ds       [::]:*                  LISTEN      root       45414      9014/smbd

2.6 打印统计数据

netstat 可以打印出网络统计数据,包括某个协议下的收发包数量。选项是-s
下面列出所有网络包的统计情况:

[root@localhost ambari-server]# netstat -su
IcmpMsg:
    InType0: 1725
    OutType3: 3
    OutType8: 1729
Udp:
    156 packets received
    3 packets to unknown port received.
    0 packet receive errors
    294 packets sent
    0 receive buffer errors
    0 send buffer errors
UdpLite:
IpExt:
    InBcastPkts: 12
    InOctets: 191374861
    OutOctets: 4822711
    InBcastOctets: 1389
    InNoECTPkts: 140656

2.7 显示内核路由信息

使用 -r 选项打印内核路由信息。打印出来的信息与 route 命令输出的信息一样。我们也可以使用 -n 选项禁止域名解析。

[root@localhost ambari-server]# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.137.1   0.0.0.0         UG        0 0          0 ens33
192.168.137.0   0.0.0.0         255.255.255.0   U         0 0          0 ens33