linux如何查看端口监听(linux系统查看端口占用情况命令)

网络世界服务器的IP地址和端口号就像家庭地址一样重要,如果发现服务器出现异常建议排查一下是否开放了一些不是你想开放的端口。本文介绍 Linux 系统中查看端口占用情况最常见的两个命令: lsof 和 netstat 。

netstat

Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

netstat 查看端口占用语法格式:

  • -t (tcp) 仅显示tcp相关选项
  • -u (udp)仅显示udp相关选项
  • -n 拒绝显示别名,能显示数字的全部转化为数字
  • -l 仅列出在Listen(监听)的服务状态
  • -p 显示建立相关链接的程序名
-a或--all:显示所有连线中的Socket; 
-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址; 
-c或--continuous:持续列出网络状态; 
-C或--cache:显示路由器配置的快取信息; 
-e或--extend:显示网络其他相关信息; 
-F或--fib:显示FIB; 
-g或--groups:显示多重广播功能群组组员名单; 
-h或--help:在线帮助; 
-i或--interfaces:显示网络界面信息表单; 
-l或--listening:显示监控中的服务器的Socket; 
-M或--masquerade:显示伪装的网络连线; 
-n或--numeric:直接使用ip地址,而不通过域名服务器; 
-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称; 
-o或--timers:显示计时器; 
-p或--programs:显示正在使用Socket的程序识别码和程序名称; 
-r或--route:显示Routing Table; 
-s或--statistice:显示网络工作信息统计表; 
-t或--tcp:显示TCP传输协议的连线状况; 
-u或--udp:显示UDP传输协议的连线状况; 
-v或--verbose:显示指令执行过程; 
-V或--version:显示版本信息; 
-w或--raw:显示RAW传输协议的连线状况; 
-x或--unix:此参数的效果和指定"-A unix"参数相同; 
--ip或--inet:此参数的效果和指定"-A inet"参数相同。

实践中,最经常使用 netstat -tunlp 来显示 tcp,udp 的端口和进程等相关情况。

# netstat -tunlp
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:3306            0.0.0.0:*               LISTEN      1047/mysqld
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      92773/sshd
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      262608/sshd: root@p
tcp6       0      0 :::33060                :::*                    LISTEN      1047/mysqld
tcp6       0      0 :::80                   :::*                    LISTEN      96655/httpd
tcp6       0      0 :::22                   :::*                    LISTEN      92773/sshd
tcp6       0      0 ::1:6010                :::*                    LISTEN      262608/sshd: root@p
tcp6       0      0 :::443                  :::*                    LISTEN      96655/httpd
tcp6       0      0 :::24380                :::*                    LISTEN      730/v2ray
udp        0      0 127.0.0.1:323           0.0.0.0:*                           716/chronyd
udp        0      0 0.0.0.0:4500            0.0.0.0:*                           2082/docker-proxy
udp        0      0 0.0.0.0:500             0.0.0.0:*                           2101/docker-proxy
udp6       0      0 ::1:323                 :::*                                716/chronyd
udp6       0      0 :::4500                 :::*                                2088/docker-proxy
udp6       0      0 :::500                  :::*                                2109/docker-proxy

这里简单的科普一下网络连接状态的含义,其中重点关注LISTEN,表示这个程序正在监听某个端口。

LISTEN:(Listening for a connection.)侦听来自远方的TCP端口的连接请求

SYN-SENT:(Active; sent SYN. Waiting for a matching connection request after having sent a connection request.)再发送连接请求后等待匹配的连接请求

SYN-RECEIVED:(Sent and received SYN. Waiting for a confirming connection request acknowledgment after having both received and sent connection requests.)再收到和发送一个连接请求后等待对方对连接请求的确认

ESTABLISHED:(Connection established.)代表一个打开的连接

FIN-WAIT-1:(Closed; sent FIN.)等待远程TCP连接中断请求,或先前的连接中断请求的确认

FIN-WAIT-2:(Closed; FIN is acknowledged; awaiting FIN.)从远程TCP等待连接中断请求

CLOSE-WAIT:(Received FIN; waiting to receive CLOSE.)等待从本地用户发来的连接中断请求

CLOSING:(Closed; exchanged FIN; waiting for FIN.)等待远程TCP对连接中断的确认

LAST-ACK:(Received FIN and CLOSE; waiting for FIN ACK.)等待原来的发向远程TCP的连接中断请求的确认

TIME-WAIT:(In 2 MSL (twice the maximum segment length) quiet wait after close. )等待足够的时间以确保远程TCP接收到连接中断请求的确认

CLOSED:(Connection is closed.)没有任何连接状态

lsof

lsof(list open files)是一个列出当前系统打开文件的工具。在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。

实践中,最经常使用 lsof -i 来显示 tcp,udp 的端口和进程等相关情况。

# lsof -i
COMMAND      PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
todeskd      707   root    7u  IPv4 1649634      0t0  TCP racknerd-855048:37616->43.135.63.118:https (ESTABLISHED)
NetworkMa    710   root   23u  IPv4   19305      0t0  UDP racknerd-855048:bootpc->194-22-82-173-dedicated.multacom.com:bootps
chronyd      716 chrony    6u  IPv4   17286      0t0  UDP localhost:323
chronyd      716 chrony    7u  IPv6   17287      0t0  UDP localhost:323
mysqld      1047  mysql   22u  IPv6   23414      0t0  TCP *:mysqlx (LISTEN)
mysqld      1047  mysql   24u  IPv4   25727      0t0  TCP *:mysql (LISTEN)
gnome-she   1954    gdm   17u  IPv4 1534971      0t0  TCP racknerd-855048:48778->master1.openshift4.gnome.org:https (CLOSE_WAIT)
docker-pr   2082   root    4u  IPv4   26483      0t0  UDP *:ipsec-nat-t
docker-pr   2088   root    4u  IPv6   26489      0t0  UDP *:ipsec-nat-t
docker-pr   2101   root    4u  IPv4   27336      0t0  UDP *:isakmp
docker-pr   2109   root    4u  IPv6   27339      0t0  UDP *:isakmp

也可以查看指定端口的占用情况,语法格式:lsof -i:端口号

例如查看服务器 80 端口的占用情况:

# lsof -i:80
COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd    96655   root    4u  IPv6 645439      0t0  TCP *:http (LISTEN)
httpd   139523 apache    4u  IPv6 645439      0t0  TCP *:http (LISTEN)
httpd   139524 apache    4u  IPv6 645439      0t0  TCP *:http (LISTEN)
httpd   139525 apache    4u  IPv6 645439      0t0  TCP *:http (LISTEN)
httpd   140404 apache    4u  IPv6 645439      0t0  TCP *:http (LISTEN)
lsof输出各列信息的意义如下:
COMMAND:进程的名称
PID进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件,如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称

使用 -p 查看指定进程打开的文件

# lsof -p 96655
COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF   NODE NAME
httpd   96655 root  cwd    DIR              253,1     4096      2 /
httpd   96655 root  rtd    DIR              253,1     4096      2 /
httpd   96655 root  txt    REG              253,1   579992 264741 /usr/sbin/httpd
httpd   96655 root  mem    REG              253,1  6940392 157792 /var/lib/sss/mc/group
httpd   96655 root  mem    REG              253,1  9253600 133245 /var/lib/sss/mc/passwd
httpd   96655 root  mem    REG              253,1    46272 276387 /usr/lib64/libnss_sss.so.2
httpd   96655 root  mem    REG              253,1    66760 524462 /usr/lib64/httpd/modules/mod_proxy_http2.so
httpd   96655 root  mem    REG              253,1   166880 266966 /usr/lib64/libnghttp2.so.14.17.0
httpd   96655 root  mem    REG              253,1   260320 524461 /usr/lib64/httpd/modules/mod_http2.so
httpd   96655 root  mem    REG              253,1    49288 524508 /usr/lib64/httpd/modules/mod_cgid.so
httpd   96655 root  mem    REG              253,1    12040 545882 /usr/lib64/httpd/modules/mod_systemd.so
httpd   96655 root  mem    REG              253,1  3079744 271928 /usr/lib64/libcrypto.so.1.1.1k

更多 lsof 的命令如下:

lsof -i: 查看IPv[46]文件
lsof -i:8080:查看8080端口占用
lsof -i4: 查看IPv4文件
lsof -i6: 查看IPv6文件
lsof -i TCP:80 查看TCP协议80端口占用情况
lsof -c lsof 查看lsof命令使用的所有文件
lsof -p 1234:列出进程号为1234的进程所打开的文件
lsof -g gid:显示归属gid的进程情况
lsof +d /usr/local/:显示目录下被进程开启的文件
lsof +D /usr/local/:同上,但是会搜索目录下的目录,时间较长
lsof -d 4:显示使用fd为4的进程
lsof -i -U:显示所有打开的端口和UNIX domain文件

linux如何查看端口监听(linux系统查看端口占用情况命令)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论