netstat 命令
在 Linux 下,netstat 命令用于显示网络状态,包括与 IP、TCP、UDP、ICMP 协议相关的统计数据,一般用于校验本机各个端口的网络连接情况。
输出结果
命令 netstat 的输出结果如下:
[jamza@A23488811 scp]$ netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 A23488811:ssh 10.40.150.192:58105 ESTABLISHED
tcp 0 0 A23488811:rfb 10.40.150.192:60593 ESTABLISHED
tcp 0 0 A23488811:microsoft-ds 10.40.150.192:63671 ESTABLISHED
tcp 0 0 A23488811:39334 192.168.222.101:ssh ESTABLISHED
tcp 0 36 A23488811:ssh 10.40.150.192:60939 ESTABLISHED
tcp 0 0 A23488811:40468 192.168.222.101:ssh ESTABLISHED
tcp 0 0 A23488811:60784 10.136.147.101:7788 ESTABLISHED
tcp 0 0 A23488811:nfs 192.168.222.102:1019 ESTABLISHED
tcp 0 0 A23488811:ssh 10.40.150.192:60030 ESTABLISHED
tcp 0 0 A23488811:40470 192.168.222.101:ssh ESTABLISHED
tcp 0 0 A23488811:ssh 10.40.150.192:58115 ESTABLISHED
tcp 0 0 A23488811:nfs 192.168.222.101:781 ESTABLISHED
tcp 0 0 A23488811:nfs 192.168.222.103:880 ESTABLISHED
tcp 0 1 A23488811:54622 10.46.75.9:webcache SYN_SENT
tcp 0 0 A23488811:nfs 192.168.222.104:947 ESTABLISHED
tcp 0 0 A23488811:ssh 10.40.150.192:58094 ESTABLISHED
tcp 0 1 A23488811:54624 10.46.75.9:webcache SYN_SENT
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 3737037 /var/lib/samba/private/msg.sock/32132
unix 2 [ ] DGRAM 3735758 /var/lib/samba/private/msg.sock/32133
unix 2 [ ] DGRAM 3728159 /var/lib/samba/private/msg.sock/32134
unix 2 [ ] DGRAM 3735789 /var/lib/samba/private/msg.sock/32163
unix 2 [ ] DGRAM 38712407 /var/lib/samba/private/msg.sock/761
unix 2 [ ] DGRAM 1405 /run/systemd/notify
unix 2 [ ] DGRAM 1407 /run/systemd/cgroups-agent
unix 8 [ ] DGRAM 1419 /run/systemd/journal/socket
unix 32 [ ] DGRAM 1421 /dev/log
unix 2 [ ] DGRAM 35313364 /var/titanagent/webshell_monitor.socket
unix 2 [ ] DGRAM 35308343 /var/titanagent/jar/java_monitor_1377
unix 2 [ ] DGRAM 35308371 /var/titanagent/jar/java_monitor_1386
unix 2 [ ] DGRAM 9135 /run/systemd/shutdownd
命令 netstat 的输出分为了两个部分,分别是 Active Internet connections (w/o servers),与 Active UNIX domain sockets (w/o servers)。
Active Internet connections (w/o servers) 被称为有源 TCP 连接,其中的 Recv-Q 与 Send-Q 指的是接收队列与发送队列,这些数字正常情况下应该为 0,如果非 0 则表示软件包正在队列中堆积。
Active UNIX domain sockets (w/o servers) 被称为有源 Unix 域套接口。
Proto 显示连接使用的协议,RefCnt 表示连接到本套接口上的进程数量,Type 显示套接字的类型,State 显示套接字的当前状态,Path 显示连接到套接字的其他进程使用的路径名。
状态说明:
-
LISTEN:监听来自远端的 TCP 端口连接请求 -
ESTABLISHED:表示一个打开的连接 -
SYN-SENT:在发送连接请求后,等待匹配的连接请求 -
SYN-RECEIVED:在收到和发送一个连接请求后,等待对方连接请求的确认 -
CLOSE-WAIT:等待从本地用户发送的连接中断请求 -
CLOSING:等待远程 TCP 对连接中断的确认 -
CLOSED:没有任何连接状态
选项参数
-
-a或者--all:显示所有连接状态中的套接口 -
-n或者--numeric:直接使用 IP 地址,而不通过域名服务器 -
-p或者--programs:显示正在使用套接口的程序 PID 与程序名称 -
-r或者--route:显示 routing table -
-s或者--statistics:显示网络工作信息统计表 -
-t或者--tcp:显示 TCP 传输协议的连接状况 -
-u或者--udp:显示 UDP 传输协议的连接状况 -
-v或者--verbose:显示指令执行过程
检测端口是否被占用
通过常用的命令 netstat -anp | grep 端口号,查询当前的端口被哪个进程所占用。
比如,查询当前环境中,端口号 6666 与 10000 是否被占用:
[root@vm_rp0_cpu0_docker ~]# netstat -anp | grep 6666
[root@vm_rp0_cpu0_docker ~]#
[root@vm_rp0_cpu0_docker ~]# netstat -anp | grep 10000
tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 27366/./ADM
tcp 0 0 127.0.0.1:46028 127.0.0.1:10000 ESTABLISHED 30693/telnet
tcp 0 0 127.0.0.1:10000 127.0.0.1:46028 ESTABLISHED 27366/./ADM
udp 0 0 0.0.0.0:10000 0.0.0.0:* 27366/./ADM
[root@vm_rp0_cpu0_docker ~]#
可以看出,端口 6666 未被占用,但是端口 10000 被 PID 为 27366 的 ADM 进程所占用。
