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