ss命令的参数及使用详解

参数

 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   #显示监听状态的socket
   -o, --options       show timer information   #显示计时器信息
   -e, --extended      show detailed socket information #展示详细的socket信息
   -m, --memory        show socket memory usage #展示socket的内存使用
   -p, --processes      show process using socket   #展示使用socket的进程
   -i, --info           show internal TCP information   #展示tcp内部信息
   -s, --summary        show socket usage summary   #展示socket使用汇总

   -4, --ipv4          display only IP version 4 sockets    #只显示ipv4的sockets
   -6, --ipv6          display only IP version 6 sockets    #只显示ipv6的sockets
   -0, --packet display PACKET sockets  #显示包经过的网络接口
   -t, --tcp            display only TCP sockets    #显示tcp套接字
   -u, --udp            display only UDP sockets    #显示udp套接字
   -d, --dccp           display only DCCP sockets   #显示dccp套接字
   -w, --raw            display only RAW sockets    #显示raw套接字
   -x, --unix           display only Unix domain sockets    #显示unix套接字
   -f, --family=FAMILY display sockets of type FAMILY   #显示指定类型的套接字

   -A, --query=QUERY, --socket=QUERY    #查看某种类型
       QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]

   -D, --diag=FILE      Dump raw information about TCP sockets to FILE  #将关于TCP套接字的原始信息转储到文件中
   -F, --filter=FILE   read filter information from FILE #使用此参数指定的过滤规则文件,过滤某种状态的连接
       FILTER := [ state TCP-STATE ] [ EXPRESSION ]

   

用法

1 . 常用ss命令

ss -l 显示本地打开的所有端口
ss -pl 显示每个进程具体打开的socket
ss -t -a 显示所有tcp socket
ss -u -a 显示所有的UDP Socekt
ss -o state established '( dport = :smtp or sport = :smtp )' 显示所有已建立的SMTP连接
ss -o state established '( dport = :http or sport = :http )' 显示所有已建立的HTTP连接
ss -x src /tmp/.X11-unix/* 找出所有连接X服务器的进程
ss -s 列出当前socket详细信息

  

2 . 显示sockets简要信息

列出当前已经连接,关闭,等待的tcp连接
[root@jia1-LinuxPerformance ~]# ss -s
Total: 122 (kernel 139)
TCP:   4 (estab 2, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 3

Transport Total     IP        IPv6
*         139       -         -        
RAW       0         0         0        
UDP       6         6         0        
TCP       4         4         0        
INET      10        10        0        
FRAG      0         0         0  

   

3 . 列出当前监听端口

[root@jia1-LinuxPerformance ~]# ss -l
State      Recv-Q Send-Q                                           Local Address:Port                                               Peer Address:Port   
LISTEN     0      128                                                          *:ssh                                                           *:*       
LISTEN     0      100                                                  127.0.0.1:smtp                                                          *:*  

 

4 . ss列出其监听的端口以及对应进程

[root@jia1-LinuxPerformance ~]# ss -pl
State      Recv-Q Send-Q                                     Local Address:Port                                         Peer Address:Port   
LISTEN     0      128                                                    *:ssh                                                     *:*        users:(("sshd",1821,3))
LISTEN     0      100                                            127.0.0.1:smtp                                                    *:*        users:(("master",1923,12))

  

5 . ss列所有的tcp sockets

[root@jia1-LinuxPerformance ~]# ss -at
State      Recv-Q Send-Q                                     Local Address:Port                                         Peer Address:Port   
LISTEN     0      128                                                    *:ssh                                                     *:*       
LISTEN     0      100                                            127.0.0.1:smtp                                                    *:*       
ESTAB      0      196                                         172.16.2.106:ssh                                        124.65.173.246:50809   
ESTAB      0      0                                           172.16.2.106:60382                                     140.205.140.205:http

  

 

6 . ss列出所有udp sockets

[root@jia1-LinuxPerformance ~]# ss -au
State      Recv-Q Send-Q                                     Local Address:Port                                         Peer Address:Port   
UNCONN     0      0                                                      *:bootpc                                                  *:*       
UNCONN     0      0                                                      *:bootpc                                                  *:*       
UNCONN     0      0                                           172.16.2.107:ntp                                                     *:*       
UNCONN     0      0                                           172.16.2.106:ntp                                                     *:*       
UNCONN     0      0                                              127.0.0.1:ntp                                                     *:*       
UNCONN     0      0                                                      *:ntp                                                     *:*    

   

7 . ss列出所有http连接中的连接

# ss -o state established '( dport = :http or sport = :http )'

  

8 . ss列出本地哪个进程连接到x server

# ss -x src /tmp/.X11-unix/*

  

9 . ss列出处在FIN-WAIT-1状态的http、https连接

# ss -o state fin-wait-1 '( sport = :http or sport = :https )'

  

ss常用的state状态:

1. established
2. syn-sent
3. syn-recv
4. fin-wait-1
5. fin-wait-2
6. time-wait
7. closed
8. close-wait
9. last-ack
10. listen
11. closing
12. all : All of the above states
13. connected : All the states except for listen and closed
14. synchronized : All the connected states except for syn-sent
15. bucket : Show states, which are maintained as minisockets, i.e. time-wait and syn-recv.
16. big : Opposite to bucket state.

   


主动连接端可能的状态有: CLOSED SYN_SEND ESTABLISHED
主动关闭端可能的状态有: FIN_WAIT_1 FIN_WAIT_2 TIME_WAIT
被动连接端可能的状态有: LISTEN SYN_RECV ESTABLISHED
被动关闭端可能的状态有: CLOSE_WAIT LAST_ACK CLOSED

10 . ss使用IP地址筛选

ss src ADDRESS_PATTERN
src:表示来源
ADDRESS_PATTERN:表示地址规则
如下:
ss src 120.33.31.1 # 列出来自20.33.31.1的连接

#列出来自120.33.31.1,80端口的连接
ss src 120.33.31.1:http
ss src 120.33.31.1:80

   

11 . ss使用端口筛选

ss dport OP PORT
OP:是运算符
PORT:表示端口
dport:表示过滤目标端口、相反的有sport

   

OP运算符如下:

1. <= or le : Less than or equal to port
2. >= or ge : Greater than or equal to port
3. == or eq : Equal to port
4. != or ne : Not equal to port
5. < or gt : Less than to port
6. > or lt : Greater than to port
7. Note: le, gt, eq, ne etc. are use in unix shell and are accepted as well.

  

OP实例

ss sport = :http 也可以是 ss sport = :80
ss dport = :http
ss dport \> :1024
ss sport \> :1024
ss sport \< :32000
ss sport eq :22
ss dport != :22
ss state connected sport = :http
ss \( sport = :http or sport = :https \)
ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.1/24

  

ss与netstat对比

ss执行的时候消耗资源以及消耗的时间都比netstat少很多。
ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。原因如下:

    1)当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费生命,而用ss才是节省时间。
    2)而ss快的秘诀在于它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢(但仍然比netstat要快)。

    参考:
    https://www.cnblogs.com/kevingrace/p/6211509.html
    https://www.cyberciti.biz/tips/linux-investigate-sockets-network-connections.html
 

<think>我们讨论的是如何释放处于ESTABLISHED状态的TCP连接。注意:用户希望使用`ss`命令来操作,但实际上`ss`命令本身并不能直接释放连接,它是一个查看工具。我们需要结合其他手段来释放连接。不过,我们可以通过`ss`来识别需要释放的连接,然后使用其他命令来终止它们。 根据用户上一次的问题,我们已经提供了一些方法(如使用`tcpkill`或`kill`进程)。但用户现在特别提到使用`ss`命令,所以我们需要明确:`ss`用于诊断,而释放连接需要其他工具。 因此,回答应该包括: 1. 使用`ss`命令识别处于ESTABLISHED状态的连接(特别是那些需要释放的连接)。 2. 使用其他命令(如`kill`、`tcpkill`)来终止连接或进程。 注意:用户引用了一个关于SYN Cookie的段落,但该内容与当前问题(释放ESTABLISHED连接)无关,因此忽略。 以下是回答的结构: ### 使用`ss`命令辅助释放ESTABLISHED连接的方法 在Linux系统中,`ss`命令用于查看网络连接统计信息,但释放(关闭)处于`ESTABLISHED`状态的连接需要结合其他命令。以下是操作步骤: #### 步骤1:使用`ss`识别目标连接 通过`ss`命令精确查找需要释放的连接: ```bash # 查看所有ESTABLISHED连接及其进程信息 ss -t -o state established -p # 按特定条件筛选(例如目标IP和端口) ss -t -o state established dst 192.168.1.100:8080 ``` 关键输出字段: - `Local Address:Port`:本地地址和端口 - `Peer Address:Port`:远端地址和端口 - `users:(("进程名",pid=进程ID,fd=文件描述符))`:关联的进程信息 - `timer:(keepalive,剩余时间)`:连接空闲计时器[^1] #### 步骤2:释放连接的两种主要方式 ##### 方法1:终止关联进程(推荐) 如果连接由本地进程创建,终止进程将自动释放连接: ```bash # 从ss输出中获取进程ID(例如pid=1234) kill -9 1234 # 强制终止进程及所有相关连接 ``` ##### 方法2:强制关闭单条连接 当不能终止整个进程时,可使用网络工具强制终止单条TCP连接: ```bash # 安装tcpkill工具(属于dsniff包) sudo apt install dsniff # Debian/Ubuntu sudo yum install dsniff # CentOS/RHEL # 根据ss输出的连接信息执行关闭 tcpkill -i eth0 host 远端IP and port 远端端口 ``` 原理:`tcpkill`通过注入伪造的TCP RST包中断连接[^2]。 #### 注意事项 1. **权限要求**:执行`tcpkill`或`kill`需要root权限 2. **连接状态更新延迟**:连接状态不会立即从`ss`输出中消失(通常等待几秒) 3. **谨慎操作**:强制中断可能造成数据丢失,优先选择通知应用层优雅关闭 #### 监控释放结果 再次运行`ss`命令确认连接已释放: ```bash ss -t -o state established | grep '目标IP:端口' ``` 如果连接仍然存在,可能是: - 进程自动重连(需检查应用逻辑) - 连接未被正确终止(尝试加大`tcpkill`的`-n`参数重试次数) ### 相关问题 §§相关问题§§ 1. 如何在没有`tcpkill`的情况下强制关闭TCP连接? 2. Linux系统中哪些工具可以监控TCP连接的实时变化? 3. 为什么有时`kill`进程后TCP连接仍然存在? </think>### 使用`ss`命令释放ESTABLISHED状态TCP连接的方法 在Linux中,`ss`命令本身**不能直接释放**处于ESTABLISHED状态的连接,但它可以精准识别目标连接,为释放操作提供依据。以下是完整操作流程: #### 步骤1:使用`ss`定位目标连接 ```bash # 查看所有ESTABLISHED连接及关联进程 ss -t -o state established -p # 按条件筛选(示例:关闭目标IP为203.0.113.5的连接) ss -t -o state established dst 203.0.113.5 ``` 关键输出解析: ```bash ESTAB 0 0 192.168.1.10:443 203.0.113.5:55678 users:(("nginx",pid=1234)) ``` - `pid=1234`:进程ID - `dst 203.0.113.5`:目标IP - `:55678`:目标端口[^1] #### 步骤2:释放连接的两种核心方法 **方法1:终止关联进程** ```bash # 强制终止进程(释放所有相关连接) sudo kill -9 1234 # 替换为实际PID # 优雅重启服务(适合守护进程) sudo systemctl restart nginx ``` **方法2:使用网络层工具强制断开** ```bash # 安装tcpkill(若未安装) sudo apt-get install dsniff # Debian/Ubuntu sudo yum install dsniff # CentOS/RHEL # 根据ss信息执行关闭(按五元组定位) sudo tcpkill -i eth0 host 203.0.113.5 and port 55678 ``` ❗ 原理:`tcpkill`注入伪造的TCP RST包强制断开连接[^2] #### 步骤3:验证释放结果 ```bash # 实时监控连接状态(3秒刷新) watch -n 3 "ss -t -o state established | grep '203.0.113.5'" ``` 成功释放时输出应为空 #### 数学关系与内核参数 连接最大空闲时间计算公式: $$ T_{max} = T_{keepalive} + N_{probes} \times T_{interval} $$ 其中: - $T_{keepalive}$ = `net.ipv4.tcp_keepalive_time`(默认7200秒) - $N_{probes}$ = `net.ipv4.tcp_keepalive_probes`(默认9次) - $T_{interval}$ = `net.ipv4.tcp_keepalive_intvl`(默认75秒) 调整示例(使空闲连接30分钟后自动关闭): ```bash sudo sysctl -w net.ipv4.tcp_keepalive_time=1800 sudo sysctl -w net.ipv4.tcp_keepalive_probes=5 sudo sysctl -w net.ipv4.tcp_keepalive_intvl=60 # 永久生效 echo "net.ipv4.tcp_keepalive_time=1800" | sudo tee -a /etc/sysctl.conf sudo sysctl -p ``` 此时 $T_{max} = 1800 + 5 \times 60 = 2100$ 秒(35分钟)[^1] #### 注意事项 1. 生产环境中优先使用`systemctl restart`而非`kill -9` 2. `tcpkill`可能影响同IP的其他连接,需精确指定五元组 3. ESTABLISHED连接需通过应用层或网络层主动干预释放 4. 大量顽固连接需检查应用程序的资源泄漏
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值