查看电脑端口号占用情况

发布时间: 2023-04-15 23:27 阅读: 文章来源:转载

网络世界服务器的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 AddressForeign Address StatePID/Program nametcp00 0.0.0.0:33060.0.0.0:*LISTEN1047/mysqldtcp00 0.0.0.0:220.0.0.0:*LISTEN92773/sshdtcp00 127.0.0.1:60100.0.0.0:*LISTEN262608/sshd: root@ptcp600 :::33060:::*LISTEN1047/mysqldtcp600 :::80:::*LISTEN96655/httpdtcp600 :::22:::*LISTEN92773/sshdtcp600 ::1:6010:::*LISTEN262608/sshd: root@ptcp600 :::443:::*LISTEN96655/httpdtcp600 :::24380:::*LISTEN730/v2rayudp00 127.0.0.1:3230.0.0.0:*716/chronydudp00 0.0.0.0:45000.0.0.0:*2082/docker-proxyudp00 0.0.0.0:500 0.0.0.0:*2101/docker-proxyudp600 ::1:323 :::*716/chronydudp600 :::4500 :::*2088/docker-proxyudp600 :::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 -iCOMMANDPIDUSERFDTYPEDEVICE SIZE/OFF NODE NAMEtodeskd707root7uIPv4 16496340t0TCP racknerd-855048:37616->43.135.63.118:https (ESTABLISHED)NetworkMa710root23uIPv4193050t0UDP racknerd-855048:bootpc->194-22-82-173-dedicated.multacom.com:bootpschronyd716 chrony6uIPv4172860t0UDP localhost:323chronyd716 chrony7uIPv6172870t0UDP localhost:323mysqld1047mysql22uIPv6234140t0TCP *:mysqlx (LISTEN)mysqld1047mysql24uIPv4257270t0TCP *:mysql (LISTEN)gnome-she1954gdm17uIPv4 15349710t0TCP racknerd-855048:48778->master1.openshift4.gnome.org:https (CLOSE_WAIT)docker-pr2082root4uIPv4264830t0UDP *:ipsec-nat-tdocker-pr2088root4uIPv6264890t0UDP *:ipsec-nat-tdocker-pr2101root4uIPv4273360t0UDP *:isakmpdocker-pr2109root4uIPv6273390t0UDP *:isakmp

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

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

# lsof -i:80COMMANDPIDUSERFDTYPE DEVICE SIZE/OFF NODE NAMEhttpd96655root4uIPv6 6454390t0TCP *:http (LISTEN)httpd139523 apache4uIPv6 6454390t0TCP *:http (LISTEN)httpd139524 apache4uIPv6 6454390t0TCP *:http (LISTEN)httpd139525 apache4uIPv6 6454390t0TCP *:http (LISTEN)httpd140404 apache4uIPv6 6454390t0TCP *:http (LISTEN)lsof输出各列信息的意义如下:COMMAND:进程的名称PID进程标识符USER:进程所有者FD:文件描述符,应用程序通过文件描述符识别该文件,如cwd、txt等TYPE:文件类型,如DIR、REG等DEVICE:指定磁盘的名称SIZE:文件的大小NODE:索引节点(文件在磁盘上的标识)NAME:打开文件的确切名称

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

# lsof -p 96655COMMANDPID USERFDTYPE DEVICE SIZE/OFFNODE NAMEhttpd96655 rootcwdDIR253,1 40962 /httpd96655 rootrtdDIR253,1 40962 /httpd96655 roottxtREG253,1579992 264741 /usr/sbin/httpdhttpd96655 rootmemREG253,16940392 157792 /var/lib/sss/mc/grouphttpd96655 rootmemREG253,19253600 133245 /var/lib/sss/mc/passwdhttpd96655 rootmemREG253,146272 276387 /usr/lib64/libnss_sss.so.2httpd96655 rootmemREG253,166760 524462 /usr/lib64/httpd/modules/mod_proxy_http2.sohttpd96655 rootmemREG253,1166880 266966 /usr/lib64/libnghttp2.so.14.17.0httpd96655 rootmemREG253,1260320 524461 /usr/lib64/httpd/modules/mod_http2.sohttpd96655 rootmemREG253,149288 524508 /usr/lib64/httpd/modules/mod_cgid.sohttpd96655 rootmemREG253,112040 545882 /usr/lib64/httpd/modules/mod_systemd.sohttpd96655 rootmemREG253,13079744 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文件
•••展开全文
相关文章