如何在 Linux 上使用 ss 命令如何在 Linux 上使用 ss 命令如何在 Linux 上使用 ss 命令如何在 Linux 上使用 ss 命令
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Linux 上使用 ss 命令

ss 命令是经典 netstat 命令的现代替代品。您可以在 Linux 上使用它来获取有关您的网络连接的统计信息。以下是如何使用这个方便的工具。

ss 命令与 netstat

作为已弃用的 netstat 命令的替代品,ss 可为您提供有关您的计算机如何与其他计算机、网络和服务通信的详细信息。

ss 显示传输控制协议 (TCP)、用户数据报协议 (UDP)、Unix(进程间)和原始套接字的统计信息。 原始套接字在网络 OSI 级别运行,这意味着 TCP 和 UDP 标头必须由应用程序软件处理,而不是由传输层处理。互联网控制消息协议 (ICMP) 消息和 ping 实用程序都使用原始套接字。

使用 ss

您不必安装 ss,因为它已经是最新 Linux 发行版的一部分。然而,它的输出可能非常长——我们的结果包含超过 630 行。结果也很广泛。

因此,我们包含了我们获得的结果的文本表示,因为它们不适合屏幕截图。我们对它们进行了修剪,使它们更易于管理。

列出网络连接

在没有命令行选项的情况下使用 ss 会列出非侦听的套接字。也就是说,它列出了不处于监听状态的套接字。

要查看此内容,请键入以下内容:

ss
Netid State Recv-Q Send-Q          Local Address:Port Peer Address:Port   Process
u_str ESTAB 0      0                           * 41826           * 41827
u_str ESTAB 0      0 /run/systemd/journal/stdout 35689           * 35688
u_str ESTAB 0      0                           * 35550           * 35551
...
u_str ESTAB 0      0                           * 38127           * 38128
u_str ESTAB 0      0 /run/dbus/system_bus_socket 21243           * 21242
u_str ESTAB 0      0                           * 19039           * 19040
u_str ESTAB 0      0 /run/systemd/journal/stdout 18887           * 18885 
u_str ESTAB 0      0 /run/dbus/system_bus_socket 19273           * 17306
icmp6 UNCONN 0     0                           *:ipv6-icmp       *:*
udp   ESTAB 0      0         192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps

列如下:

  • Netid:套接字类型。在我们的示例中,我们有“u_str”、一个 Unix 流、一个“udp”和“icmp6”,一个 IP 版本 6 ICMP 套接字。您可以在 Linux 手册页中找到有关 Linux 套接字类型的更多描述。
  • State:套接字所处的状态。
  • Recv-Q:接收到的包数。
  • Send-Q:发送包数。
  • Local Address:Port:本地地址和端口(或 Unix 套接字的等效值)。
  • Peer Address:Port:远程地址和端口(或 Unix 套接字的等效值)。

对于 UDP 套接字,“状态”列通常为空白。对于 TCP 套接字,它可以是以下之一:

  • 收听:仅限服务器端。套接字正在等待连接请求。
  • SYN-SENT:仅客户端。此套接字已发出连接请求,正在等待是否被接受。
  • SYN-RECEIVED:仅限服务器端。此套接字在接受连接请求后正在等待连接确认。
  • ESTABLISHED: 服务器和客户端。服务器和客户端之间已建立工作连接,允许在两者之间传输数据。
  • FIN-WAIT-1:服务器和客户端。此套接字正在等待来自远程套接字的连接终止请求,或对先前从该套接字发送的连接终止请求的确认。
  • FIN-WAIT-2:服务器和客户端。此套接字正在等待来自远程套接字的连接终止请求。
  • CLOSE-WAIT:服务器和客户端。此套接字正在等待来自本地用户的连接终止请求。
  • 结束:服务器和客户端。此套接字正在等待来自远程套接字的连接终止请求确认。
  • LAST-ACK:服务器和客户端。此套接字正在等待对它发送到远程套接字的连接终止请求的确认。
  • TIME-WAIT: 服务器和客户端。这个套接字向远程套接字发送一个确认,让它知道它收到了远程套接字的终止请求。它现在正在等待以确保收到确认。
  • CLOSED: 没有连接,因此套接字已终止。

列出监听套接字

要查看侦听套接字,我们将添加 -l(侦听)选项,如下所示:

ss -l
Netid State  Recv-Q Send-Q               Local Address:Port                  Peer Address:Port Process 
nl    UNCONN 0      0                             rtnl:NetworkManager/535                * 
nl    UNCONN 0      0                             rtnl:evolution-addre/2987              * 
...
u_str LISTEN 0      4096          /run/systemd/private 13349                            * 0 
u_seq LISTEN 0      4096             /run/udev/control 13376                            * 0 
u_str LISTEN 0      4096             /tmp/.X11-unix/X0 33071                            * 0 
u_dgr UNCONN 0      0      /run/systemd/journal/syslog 13360                            * 0 
u_str LISTEN 0      4096    /run/systemd/fsck.progress 13362                            * 0 
u_dgr UNCONN 0      0    /run/user/1000/systemd/notify 32303                            * 0

这些套接字都是未连接的并且正在侦听。 “rtnl”表示路由网络链接,用于在内核和用户空间进程之间传输信息。

列出所有套接字

要列出所有套接字,您可以使用 -a (all) 选项:

ss -a
Netid State  Recv-Q Send-Q    Local Address:Port                 Peer Address:Port    Process 
nl    UNCONN 0      0                  rtnl:NetworkManager/535               * 
nl    UNCONN 0      0                  rtnl:evolution-addre/2987 * 
...
u_str LISTEN 0      100       public/showq 23222                            * 0 
u_str LISTEN 0      100      private/error 23225                            * 0 
u_str LISTEN 0      100      private/retry 23228                            * 0 
...
udp   UNCONN 0      0             0.0.0.0:631                         0.0.0.0:* 
udp   UNCONN 0      0             0.0.0.0:mdns                        0.0.0.0:* 
...
tcp   LISTEN 0      128              [::]:ssh                            [::]:* 
tcp   LISTEN 0      5               [::1]:ipp                            [::]:* 
tcp   LISTEN 0      100             [::1]:smtp                           [::]:*

输出包含所有套接字,无论状态如何。

列出 TCP 套接字

您还可以应用过滤器,以便仅显示匹配的套接字。我们将使用 -t (TCP) 选项,因此只会列出 TCP 套接字:

<代码>ss -a -t

列出 UDP 套接字

-u (UDP) 选项执行相同类型的过滤操作。这次,我们只会看到 UDP 套接字:

ss -a -u
State  Recv-Q Send-Q    Local Address:Port Peer   Address:Port Process 
UNCONN 0      0               0.0.0.0:631         0.0.0.0:* 
UNCONN 0      0               0.0.0.0:mdns        0.0.0.0:* 
UNCONN 0      0               0.0.0.0:60734       0.0.0.0:* 
UNCONN 0      0         127.0.0.53%lo:domain      0.0.0.0:* 
ESTAB 0       0    192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps 
UNCONN 0      0                   [::]:mdns          [::]:* 
UNCONN 0      0                   [::]:51193         [::]:*

列出 Unix 套接字

要仅查看 Unix 套接字,您可以包含 -x (Unix) 选项,如下所示:

ss -a -x
Netid State Recv-Q Send-Q               Local Address:Port  Peer Address:Port    Process 
u_str ESTAB 0      0                                * 41826            * 41827 
u_str ESTAB 0      0                                * 23183            * 23184 
u_str ESTAB 28     0               @/tmp/.X11-unix/X0 52640            * 52639 
...
u_str ESTAB 0      0      /run/systemd/journal/stdout 18887            * 18885 
u_str ESTAB 0      0      /run/dbus/system_bus_socket 19273            * 17306

列出原始套接字

原始套接字的过滤器是 -w (raw) 选项:

ss -a -w

列出 IP 版本 4 套接字

可以使用 -4 (IPV4) 选项列出使用 TCP/IP 版本 4 协议的套接字:

ss -a -4

列出 IP 版本 6 套接字

您可以使用 -6 (IPV6) 选项打开匹配的 IP 版本 6 过滤器,如下所示:

ss -a -6

按状态列出套接字

您可以使用 state 选项按它们所处的状态列出套接字。这适用于 established、listening 或 closed 状态。我们还将使用解析选项 (-r),它会尝试将网络地址解析为名称,并将端口解析为协议。

以下命令将查找已建立的 TCP 连接,ss 将尝试解析名称:

ss -t -r state established

列出了四个处于已建立状态的连接。主机名 ubuntu20-04 已被解析,第二行的 SSH 连接显示为“ssh”而不是 22。

我们可以重复此操作以查找处于侦听状态的套接字:

ss -t -r state listening
Recv-Q Send-Q Local Address:Port   Peer Address:Port Process 
0      128        localhost:5939        0.0.0.0:* 
0      4096    localhost%lo:domain      0.0.0.0:* 
0      128          0.0.0.0:ssh         0.0.0.0:* 
0      5          localhost:ipp         0.0.0.0:* 
0      100        localhost:smtp        0.0.0.0:* 
0      128             [::]:ssh         [::]:* 
0      5      ip6-localhost:ipp         [::]:* 
0      100    ip6-localhost:smtp        [::]:*

按协议列出套接字

您可以使用带有 dport 和 sport 选项的特定协议列出套接字,它们分别代表目标端口和源端口。

我们键入以下内容以列出在 已建立 连接上使用 HTTPS 协议的套接字(注意左括号之后和右括号之前的空格):

ss -a state established '( dport = :https or sport = :https )'

我们可以使用协议名称或通常与该协议关联的端口。 Secure Shell (SSH) 的默认端口是端口 22。

我们将在一个命令中使用协议名称,然后使用端口号重复它:

ss -a '( dport = :ssh or sport = :ssh )'
ss -a '( dport = :22 or sport = :22 )'

正如预期的那样,我们得到了相同的结果。

列出与特定 IP 地址的连接

使用 dst(目标)选项,我们可以列出到特定目标 IP 地址的连接。

我们键入以下内容:

ss -a dst 192.168.4.25

识别流程

要查看哪些进程正在使用套接字,您可以使用进程选项 (-p),如下所示(注意您必须使用 sudo):

sudo ss -t -p
State Recv-Q Send-Q  Local Address:Port   Peer Address:Port  Process 
ESTAB 0      0       192.168.4.28:57650  54.218.19.119:https users:(("firefox",pid=3378,fd=151)) 
ESTAB 0      0       192.168.4.28:ssh     192.168.4.25:43946 users:(("sshd",pid=4086,fd=4),("sshd",pid=3985,fd=4))

这向我们展示了在 TCP 套接字上建立的两个连接正被 SSH 守护进程和 Firefox 使用。

一个值得继承的人

ss 命令提供了以前由 netstat 提供的相同信息,但以更简单、更易于访问的方式提供。您可以查看手册页以获取更多选项和提示。

Linux Commands
Files tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc
Processes alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap
Networking netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld

RELATED: Best Linux Laptops for Developers and Enthusiasts

©2015-2025 艾丽卡 support@alaica.com