ss命令是经典netstat的现代替代品。您可以在Linux上使用它来获取有关网络连接的统计信息。下面是如何使用这个方便的工具。
ss命令对netstat
ss代替了不推荐使用的netstat命令,它提供了有关计算机如何与其他计算机、网络和服务通信的详细信息。
ss显示传输控制协议(TCP)、用户数据报协议(UDP)、Unix(进程间)和原始套接字的统计信息。原始套接字在网络OSI级别运行,这意味着TCP和UDP头必须由应用程序软件处理,而不是由传输层处理。Internet控制消息协议(ICMP)消息和ping实用程序都使用原始套接字。
使用ss
您不必安装ss,因为它已经是最新Linux发行版的一部分。但是,它的输出可能非常长,我们已经得到了包含630多行的结果。结果也非常广泛。
正因为如此,我们已经包含了我们获得的结果的文本表示,因为它们不适合屏幕截图。我们对它们进行了修剪,使它们更易于管理。
列出网络连接
在没有命令行选项的情况下使用ss会列出不侦听的套接字。也就是说,它列出了不处于侦听状态的套接字。
要查看此内容,请键入以下内容:
ss
![如何在linux上使用ss命令](https://img.tl80.cn/2023/11/13/c9f369252ecef5df3fbc160b79d60e9a-0.webp)
![如何在linux上使用ss命令](https://img.tl80.cn/2023/11/13/b12367ca5b1ce78a836dd6ae69563d14-0.webp)
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\u str”,一个Unix流,“udp”和“icmp6”,一个ipversion6icmp套接字。您可以在Linux手册页中找到更多关于Linux套接字类型的描述。
- 状态:套接字所处的状态。
- Recv-Q:接收的数据包数。
- Send-Q:发送的数据包数。
- 本地地址:港口:本地地址和端口(或Unix套接字的等效值)。
- 同龄人地址:港口:远程地址和端口(或Unix套接字的等效值)。
对于UDP套接字,“状态”列通常为空。对于TCP套接字,它可以是以下之一:
- 听:只有服务器端。套接字正在等待连接请求。
- SYN-SENT:仅客户端。此套接字已发出连接请求,正在等待是否接受。
- SYN-RECEIVED:仅服务器端。此套接字正在接受连接请求后等待连接确认。
- 建立:服务器和客户端。服务器和客户机之间建立了工作连接,允许在两者之间传输数据。
- FIN-WAIT-1:服务器和客户端。此套接字正在等待来自远程套接字的连接终止请求,或者等待先前从此套接字发送的连接终止请求的确认。
- FIN-WAIT-2:服务器和客户端。此套接字正在等待来自远程套接字的连接终止请求。
- 关闭等待:服务器和客户端。此套接字正在等待本地用户的连接终止请求。
- 关闭:服务器和客户端。此套接字正在等待来自远程套接字的连接终止请求确认。
- LAST-ACK:服务器和客户端。此套接字正在等待它发送到远程套接字的连接终止请求的确认。
- 等待时间:服务器和客户端。这个套接字向远程套接字发送了一个确认,让它知道它收到了远程套接字的终止请求。它现在正在等待确认是否收到了确认。
- 关闭:没有连接,因此套接字已终止。
正在列出侦听套接字
要查看侦听套接字,我们将添加-l(侦听)选项,如下所示:
ss -l
![如何在linux上使用ss命令](https://img.tl80.cn/2023/11/13/a187a72e554b0ff06f1b22b86fafdcfb-0.webp)
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”是指路由netlink,用于在内核和用户空间进程之间传输信息。
列出所有套接字
要列出所有套接字,可以使用-a(all)选项:
ss -a
![如何在linux上使用ss命令](https://img.tl80.cn/2023/11/13/e4081fd9b350ab0e79fc4ef1191e1d75-0.webp)
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]:**tp [::]:*
无论状态如何,输出都包含所有套接字。
列出tcp套接字
也可以应用筛选器,以便仅显示匹配的套接字。我们将使用-t(TCP)选项,因此只列出TCP套接字:
不锈钢-a-t
![如何在linux上使用ss命令](https://img.tl80.cn/2023/11/13/d3267cd1bffaaf72cc4e433c85417832-0.webp)
列出udp套接字
-u(UDP)选项执行相同类型的过滤操作。这次,我们将只看到UDP套接字:
ss -a -u
![如何在linux上使用ss命令](https://img.tl80.cn/2023/11/13/9af3a637cfa0a8b8abf1f25790215a22-0.webp)
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
![如何在linux上使用ss命令](https://img.tl80.cn/2023/11/13/194dc6fb390853b59db8edc8d96b275b-0.webp)
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(原始)选项:
ss -a -w
![如何在linux上使用ss命令](https://img.tl80.cn/2023/11/13/c05df73e0ff7e8d6e3d0bee570933399-0.webp)
列出ip版本4套接字
可以使用-4(IPV4)选项列出使用TCP/IP版本4协议的套接字:
ss -a -4
![如何在linux上使用ss命令](https://img.tl80.cn/2023/11/13/242493112a05c61c30138fa1246b112c-0.webp)
列出ip版本6套接字
可以使用-6(IPV6)选项启用匹配的IP版本6筛选器,如下所示:
ss -a -6
![如何在linux上使用ss命令](https://img.tl80.cn/2023/11/13/cdd4a1a10602df4f3c7ecfc411afc249-0.webp)
按状态列出套接字
可以使用state选项按套接字所处的状态列出套接字。这适用于已建立、侦听或关闭状态。我们还将使用resolve选项(-r),它尝试将网络地址解析为名称,将端口解析为协议。
以下命令将查找已建立的TCP连接,ss将尝试解析这些名称:
ss -t -r state established
![如何在linux上使用ss命令](https://img.tl80.cn/2023/11/13/51da9d73507497ff6b461234e00d1837-0.webp)
列出了处于已建立状态的四个连接。主机名ubuntu20-04已经解析,第二行的ssh连接显示“ssh”而不是22。
我们可以重复此步骤以查找处于侦听状态的套接字:
ss -t -r state listening
![如何在linux上使用ss命令](https://img.tl80.cn/2023/11/13/0d9f312135f201aed569f48bf30f993b-0.webp)
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:**tp 0.0.0.0:* 0 128 [::]:ssh [::]:* 0 5 ip6-localhost:ipp [::]:* 0 100 ip6-localhost:**tp [::]:*
按协议列出套接字
您可以通过dport和sport选项列出使用特定协议的套接字,这两个选项分别表示目标端口和源端口。
我们键入以下内容以列出在已建立的连接上使用HTTPS协议的套接字(请注意左括号后和右括号前的空格):
ss -a state established ‘( dport = :https or sport = :https )’
![如何在linux上使用ss命令](https://img.tl80.cn/2023/11/13/e4179587af9933dd12949561f8f5ce8d-0.webp)
我们可以使用协议名或通常与该协议关联的端口。Secure Shell(SSH)的默认端口是端口22。
我们将在一个命令中使用协议名称,然后使用端口号重复它:
ss -a ‘( dport = :ssh or sport = :ssh )’ ss -a ‘( dport = :22 or sport = :22 )’
![如何在linux上使用ss命令](https://img.tl80.cn/2023/11/13/4c91d28608907d7fb594d4d6a8db46c9-0.webp)
正如所料,我们得到了相同的结果。
列出到特定ip地址的连接
使用dst(destination)选项,我们可以列出到特定目标IP地址的连接。
我们键入以下内容:
ss -a dst 192.168.4.25
![如何在linux上使用ss命令](https://img.tl80.cn/2023/11/13/689405b0540235b8ca9713f0cb094cfa-0.webp)
识别过程
要查看哪些进程正在使用套接字,可以使用processs选项(-p),如下所示(注意必须使用sudo):
sudo ss -t -p
![如何在linux上使用ss命令](https://img.tl80.cn/2023/11/13/c22c8350e29942460e1074013a8eb6d4-0.webp)
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以前提供的信息相同的信息,但方式更简单、更易访问。您可以查看手册页了解更多选项和提示。