查看服务器80端口(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 -tunlpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program nametcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1047/mysqldtcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 92773/sshdtcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 262608/sshd: root@ptcp6 0 0 :::33060 :::* LISTEN 1047/mysqldtcp6 0 0 :::80 :::* LISTEN 96655/httpdtcp6 0 0 :::22 :::* LISTEN 92773/sshdtcp6 0 0 ::1:6010 :::* LISTEN 262608/sshd: root@ptcp6 0 0 :::443 :::* LISTEN 96655/httpdtcp6 0 0 :::24380 :::* LISTEN 730/v2rayudp 0 0 127.0.0.1:323 0.0.0.0:* 716/chronydudp 0 0 0.0.0.0:4500 0.0.0.0:* 2082/docker-proxyudp 0 0 0.0.0.0:500 0.0.0.0:* 2101/docker-proxyudp6 0 0 ::1:323 :::* 716/chronydudp6 0 0 :::4500 :::* 2088/docker-proxyudp6 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 -iCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEtodeskd 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:bootpschronyd 716 chrony 6u IPv4 17286 0t0 UDP localhost:323chronyd 716 chrony 7u IPv6 17287 0t0 UDP localhost:323mysqld 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-tdocker-pr 2088 root 4u IPv6 26489 0t0 UDP *:ipsec-nat-tdocker-pr 2101 root 4u IPv4 27336 0t0 UDP *:isakmpdocker-pr 2109 root 4u IPv6 27339 0t0 UDP *:isakmp
也可以查看指定端口的占用情况,语法格式:lsof -i:端口号
例如查看服务器 80 端口的占用情况:
# lsof -i:80COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEhttpd 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 96655COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEhttpd 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/httpdhttpd 96655 root mem REG 253,1 6940392 157792 /var/lib/sss/mc/grouphttpd 96655 root mem REG 253,1 9253600 133245 /var/lib/sss/mc/passwdhttpd 96655 root mem REG 253,1 46272 276387 /usr/lib64/libnss_sss.so.2httpd 96655 root mem REG 253,1 66760 524462 /usr/lib64/httpd/modules/mod_proxy_http2.sohttpd 96655 root mem REG 253,1 166880 266966 /usr/lib64/libnghttp2.so.14.17.0httpd 96655 root mem REG 253,1 260320 524461 /usr/lib64/httpd/modules/mod_http2.sohttpd 96655 root mem REG 253,1 49288 524508 /usr/lib64/httpd/modules/mod_cgid.sohttpd 96655 root mem REG 253,1 12040 545882 /usr/lib64/httpd/modules/mod_systemd.sohttpd 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文件
发布于:2022-12-19,除非注明,否则均为
原创文章,转载请注明出处。
发表评论