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 进程所占用。