使用 netstat 检查端口

netstat 是一个命令行工具,可以提供有关网络连接的信息。要列出正在侦听的所有 TCP 或 UDP 端口,包括使用端口和套接字状态的服务,可以使用以下命令:

netstat –tunlp

此命令中使用的选项具有以下含义:

1)-t:显示 TCP 端口

2)-u : 显示 UDP 端口

3)-n: 显示数字地址而不是主机名

4)-l :仅显示侦听端口

5)-p:显示进程的 PID 和名称。仅当以 root 或 sudo 用户身份运行命令时,才会显示此信息

之后出现的结果比较重要的列是:

1)Proto : 套接字使用的协议

2)Local Address: 进程侦听的 IP 地址和端口号

3)PID/Program name :PID 和进程名称

如果要过滤结果,请使用 grep 命令。例如,要查找在 TCP 端口 80 上侦听的进程,请键入:

netstat -tnlp | grep :80

如果输出为空,则表示没有任何内容正在侦听端口。还可以根据条件筛选列表,例如 PID ,协议,状态等。虽然现在netstat 是过时的,并与替换 ss ,但它仍然是最常用的命令来检查网络连接。

uni@uni-virtual-machine:~$ netstat --help
usage: netstat [-vWeenNcCF] [<Af>] -r netstat {-V|--version|-h|--help}
netstat [-vWnNcaeol] [<Socket> ...]
netstat { [-vWeenNac] -i | [-cnNe] -M | -s [-6tuw] }

-r, --route 显示路由表
-i, --interfaces display interface table
-g, --groups display multicast group memberships
-s, --statistics display networking statistics (like SNMP)
-M, --masquerade display masqueraded connections

-v, --verbose 显示详细信息
-W, --wide don't truncate IP addresses
-n, --numeric 不解析名称
--numeric-hosts 不解析主机名
--numeric-ports 忽略端口名称
--numeric-users 忽略用户名
-N, --symbolic resolve hardware names
-e, --extend 显示更多信息
-p, --programs display PID/Program name for sockets
-o, --timers display timers
-c, --continuous continuous listing

-l, --listening display listening server sockets
-a, --all display all sockets (default: connected)
-F, --fib display Forwarding Information Base (default)
-C, --cache display routing cache instead of FIB
-Z, --context display SELinux security context for sockets

<Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw}
{-x|--unix} --ax25 --ipx --netrom
<AF>=Use '-6|-4' or '-A <af>' or '--<af>';默认: inet
列出所有支持的协议:
inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
x25 (CCITT X.25)

使用 ss 检查端口

ss 是新的 netstat,虽然缺少一些 netstat 功能,但暴露了更多的 TCP 状态,而且速度稍快,命令选项大致相同,因此从 netstat 转换为 ss 并不困难。要使用 ss 获取所有侦听端口的列表,请键入:

ss –tunlp

输出几乎与 netstat 报告的输出相同。

uni@uni-virtual-machine:~$ ss --help
Usage: ss [ OPTIONS ]
ss [ OPTIONS ] [ FILTER ]
-h, --help this message
-V, --version output version information
-n, --numeric don't resolve service names
-r, --resolve resolve host names
-a, --all display all sockets
-l, --listening display listening sockets
-o, --options show timer information
-e, --extended show detailed socket information
-m, --memory show socket memory usage
-p, --processes show process using socket
-i, --info show internal TCP information
-s, --summary show socket usage summary
-b, --bpf show bpf filter socket information
-E, --events continually display sockets as they are destroyed
-Z, --context display process SELinux security contexts
-z, --contexts display process and socket SELinux security contexts
-N, --net switch to the specified network namespace name

-4, --ipv4 display only IP version 4 sockets
-6, --ipv6 display only IP version 6 sockets
-0, --packet display PACKET sockets
-t, --tcp display only TCP sockets
-S, --sctp display only SCTP sockets
-u, --udp display only UDP sockets
-d, --dccp display only DCCP sockets
-w, --raw display only RAW sockets
-x, --unix display only Unix domain sockets
--vsock display only vsock sockets
-f, --family=FAMILY display sockets of type FAMILY
FAMILY := {inet|inet6|link|unix|netlink|vsock|help}

-K, --kill forcibly close sockets, display what was closed
-H, --no-header Suppress header line

-A, --query=QUERY, --socket=QUERY
QUERY := {all|inet|tcp|udp|raw|unix|unix_dgram|unix_stream|unix_seqpacket|packet|netlink|vsock_stream|vsock_dgram}[,QUERY]

-D, --diag=FILE Dump raw information about TCP sockets to FILE
-F, --filter=FILE read filter information from FILE
FILTER := [ state STATE-FILTER ] [ EXPRESSION ]
STATE-FILTER := {all|connected|synchronized|bucket|big|TCP-STATES}
TCP-STATES := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|closed|close-wait|last-ack|listening|closing}
connected := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
synchronized := {established|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
bucket := {syn-recv|time-wait}
big := {established|syn-sent|fin-wait-{1,2}|closed|close-wait|last-ack|listening|closing}

使用 lsof 检查端口

lsof 是一个功能强大的命令行实用程序,它提供有关进程打开的文件的信息。在 Linux 系统中,一切都是文件,可以将套接字视为写入网络的文件。要使用 lsof 获取所有侦听 TCP 端口的列表,请输入:

lsof -nP -iTCP -sTCP:LISTEN

使用的选项如下:

1)-n : 不要将端口号转换为端口名称

2)-p : 不要解析主机名,显示数字地址

3)-iTCP -sTCP:LISTEN: 仅显示 TCP 协议状态为 LISTEN 的网络文件

要查找指定正在侦听特定端口的进程,以3306端口,请使用以下命令:

lsof -nP -iTCP:3306 -sTCP:LISTEN