Linux ss命令教程及示例

Linux进程之间通过socket进行通信。有一些工具可以列出、解析和提供有关套接字的信息。Ss就是其中之一。Netstat命令也可以列出和解析套接字,但是它很慢,因为有很多套接字。Ss直接从Linux内核获取关于socket的信息。

null

列出所有连接

首先,可以列出所有现有连接、侦听Unix和网络套接字 -l .

$ ss -l
List All Connections
列出所有连接
  • Netid 列指定套接字的类型,如nl、uúdgr、tcp、udp
  • State 列指定套接字的当前状态,如侦听、已建立等。
  • Recv-Q 列显示接收到的数据包
  • Send-Q 列显示发送 小包
  • Local Address:Port 列显示本地地址和端口或等效值
  • Remote Address:Port 列显示远程 地址和端口或等效值

筛选TCP连接

列出所有连接将在终端上创建大量输出,特别是在繁忙的服务器中。或者我们可能只需要TCP连接就可以列出 检查。有两种方法可以只列出TCP连接。一种方法是使用TCP选项 -t 直接。这将筛选并列出所有已建立的TCP连接。

$ ss -t
Filter TCP Connections
筛选TCP连接

或者

$ ss -A tcp
Filter TCP Connections
筛选TCP连接

正如我们所看到的,两个命令都输出了相同的输出,因为它们执行相同的操作,只是语法不同。 -A 选项用于简单和复杂的查询,我们将在下面查看它。我们将TCP协议指定为查询过滤器,以便只列出TCP连接。

筛选UDP 插座

像过滤TCP连接一样,UDP连接可以像下面这样过滤。在第一个示例中,我们将提供一个直接选项 -u 筛选UDP套接字。

$ ss -ua
Filter UDP Connections
筛选UDP连接

或者

$ ss -a -A udp
Filter UDP Connections
筛选UDP连接

正如我们可以看到前面的例子,我们提供了额外的选择 -a 因为UDP是一个无连接协议,我们想列出可以用这个选项列出的套接字。

列出套接字、连接的所有状态

ss 默认情况下,命令仅列出已建立和连接的套接字/连接。监听插座将被消除。这个 -a 选项将列出所有它们而不删除。

$ ss -a
List All Sockets, Connections
列出所有插座、连接

筛选Unix 插座

Unix套接字用于在驻留在同一Linux系统中的进程之间进行通信和交换数据。这个套接字机制是从旧的Unix系统继承的。Unix-Linux系统中的所有套接字都可以与 -x --unix 选项。

$ ss -x
Filter Unix Sockets
筛选Unix套接字

筛选IPv4连接

Linux网络栈支持不同的协议,但IPv4是最流行的协议,主要用于internet。打印网络协议时,所有这些协议都列出,如IPv4、IPv6、Apple Talk等。IPv4协议连接和套接字可以使用 -4 --ipv4 选项如下。

$ ss -4
Filter IPv4 Connections
筛选IPv4连接

筛选IPv6连接

如前所述,对当前连接和套接字进行IPv4筛选。对于IPv6连接和具有 -6 --ipv6 选项。

$ ss -6 -a
Filter IPv6 Connections
筛选IPv6连接

根据端口号筛选连接

可以根据端口号筛选连接和套接字。过滤这类信息需要特殊的语法和极大的灵活性。我们将通过指定 ssh 港口。

$ ss '( dport = :ssh or sport = :ssh )'
Filter Connections According Port Number
根据端口号筛选连接

使用端口号

在本例中,我们根据源端口和目标端口进行了过滤。在表示端口时,我们使用了协议名称,但是对于下面的端口规范,数字是可以的。

$ ss '( dport = :22 or sport = :22 )'
Using Port Numbers
使用端口号

根据IP地址筛选连接

我们将根据IP地址过滤连接。目标主机和源主机都有一个IP地址。这些被称为

  • dst 对于目标或远程IP地址
  • src 源或本地IP地址
$ ss dst 192.168.122.1
Filter Connections According IP Address
根据IP地址筛选连接

根据状态筛选TCP连接

众所周知,TCP协议是一种有状态协议。什么是有状态的?Stateful只是指源主机为网络连接创建会话。TCP有以下几种流行的状态

  • listen 用于侦听端口或套接字的服务
  • established 用于已创建的连接
  • syn-sent 用于为TCP连接启动会话创建,但不竞争

相关文章: “无路由到主机”错误及解决方法

在本例中,我们将查找已建立的状态TCP端口。

$ ss -t state established
Filter TCP Connections According States
根据状态筛选TCP连接

解析主机名

解析主机名将转换并显示IP地址及其相关主机名。这将减慢列表过程,但可能更有用和信息量更大。

$ ss -t -r state established
Resolve Host name
解析主机名

解析主机名

解析主机名可能是一个慢下来的问题,并且很容易被禁用 -n 参数如下。

$ ss -t -n
Do Resolve Host Name
解析主机名

仅显示侦听套接字

默认情况下,只列出已建立的套接字和端口。列出侦听端口和套接字 -l 应提供选项。

$ ss -t -l
Show Only Listening Sockets
仅显示侦听套接字

显示进程 名称和进程ID

在打印现有的套接字和端口时,我们可能需要相关的进程名称和ID。这可以用 -p 参数。在本例中,我们将列出ssh端口的进程名和id。

$ sudo ss -t -p
Show Process Name and Process ID
显示进程名称和进程ID

正如我们所看到的,进程名是 sshd 进程id为 2337 带文件描述符 3 一个连接。

打印摘要统计信息

有关端口和套接字的统计信息可以用 -s 参数。

$ sudo ss -s
Print Summary Statistics
打印摘要统计信息

在本例中,有关RAW、UDO、TCP、INET和FRAG类型以及相关IP协议版本(如IPv4和IPv6)的统计信息

显示计时器信息

计时器选项将提供有关套接字或连接的信息。定时器信息可以通过 -o 参数。

$ sudo ss -t -o
Display Timer Information
显示计时器信息

在本例中,我们可以看到ssh连接的总时间和当前TCP keep-alive状态。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享