Netstat 是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字。如果你想确认系统上的 Web 服务有没有起来,你可以查看80端口有没有打开。
列出所有当前的连接。使用 -a 选项
一个要介绍的,是最简单的命令:列出所有当前的连接。使用 -a 选项即可。
- $ netstat -a
- Active Internet connections (servers and established)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- tcp 0 0 enlightened:domain *:* LISTEN
- tcp 0 0 localhost:ipp *:* LISTEN
- tcp 0 0 enlightened.local:54750 li240-5.members.li:http ESTABLISHED
- tcp 0 0 enlightened.local:49980 del01s07-in-f14.1:https ESTABLISHED
- tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN
- udp 0 0 enlightened:domain *:*、
- 上述命令列出 tcp, udp 和 unix 协议下所有套接字的所有连接。然而这些信息还不够详细,管理员往往需要查看某个协议或端口的具体连接情况。
使用 -t 选项列出 TCP 协议的连接:
- $ netstat -at
- Active Internet connections (servers and established)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- tcp 0 0 enlightened:domain *:* LISTEN
- tcp 0 0 localhost:ipp *:* LISTEN
- tcp 0 0 enlightened.local:36310 del01s07-in-f24.1:https ESTABLISHED
- tcp 0 0 enlightened.local:45038 a96-17-181-10.depl:http ESTABLISHED
默认情况下 netstat 会通过反向域名解析技术查找每个 IP 地址对应的主机名。这会降低查找速度。如果你觉得 IP 地址已经足够,而没有必要知道主机名,就使用 -n 选项禁用域名解析功能。
- $ netstat -ant
- Active Internet connections (servers and established)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN
- tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
- tcp 0 0 192.168.1.2:49058 173.255.230.5:80 ESTABLISHED
- tcp 0 0 192.168.1.2:33324 173.194.36.117:443 ESTABLISHED
- tcp6 0 0 ::1:631 :::* LISTEN
上述命令列出所有 TCP 协议的连接,没有使用域名解析技术。
查看端口和连接的信息时,能查看到它们对应的进程名和进程号对系统管理员来说是非常有帮助的。举个栗子,Apache 的 httpd 服务开启80端口,如果你要查看 http 服务是否已经启动,或者 http 服务是由 apache 还是 nginx 启动的,这时候你可以看看进程名。
使用 -p 选项查看进程信息。
- ~$ sudo netstat -nlpt
- Active Internet connections (only servers)
- Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
- tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN 1144/dnsmasq
- tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 661/cupsd
- tcp6 0 0 ::1:631 :::* LISTEN 661/cupsd
使用 -p 选项时,netstat 必须运行在 root 权限之下,不然它就不能得到运行在 root 权限下的进程名,而很多服务包括 http 和 ftp 都运行在 root 权限之下。
相比进程名和进程号而言,查看进程的拥有者会更有用。使用 -ep 选项可以同时查看进程名和用户名。
- $ sudo netstat -ltpe
- Active Internet connections (only servers)
- Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
- tcp 0 0 enlightened:domain *:* LISTEN root 11090 1144/dnsmasq
- tcp 0 0 localhost:ipp *:* LISTEN root 9755 661/cupsd
- tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN root 9754 661/cupsd
上面列出 TCP 协议下的监听套接字,同时显示进程信息和一些额外信息。
这些额外的信息包括用户名和进程的索引节点号。这个命令对网管来说很有用。
注意 - 假如你将 -n 和 -e 选项一起使用,User 列的属性就是用户的 ID 号,而不是用户名。
如果你想看看 http,smtp 或 ntp 服务是否在运行,使用 grep。
- $ sudo netstat -aple | grep ntp
- udp 0 0 enlightened.local:ntp *:* root 17430 1789/ntpd
- udp 0 0 localhost:ntp *:* root 17429 1789/ntpd
- udp 0 0 *:ntp *:* root 17422 1789/ntpd
- udp6 0 0 fe80::216:36ff:fef8:ntp [::]:* root 17432 1789/ntpd
- udp6 0 0 ip6-localhost:ntp [::]:* root 17431 1789/ntpd
- udp6 0 0 [::]:ntp [::]:* root 17423 1789/ntpd
- unix 2 [ ] DGRAM 17418 1789/ntpd
从这里可以看到 ntp 服务正在运行。使用 grep 命令你可以查看 http 或 smtp 或其它任何你想查看的服务。