强大的ss命令



ss: 查看 Linux TCP / UDP 网络和套接字信息

by: VIVEK GITE on JUNE 2, 2009

source:http://www.cyberciti.biz/tips/linux-investigate-sockets-network-connections.html

ss命令和netstat类似,用来显示socket统计信息。能够列出PACKET sockets、TCP sockets、 UDP sockets、DCCP sockets、RAW sockets、Unix域名sockets等统计信息。支持像netstat命令一样显示。和其他工具相比,ss能够显示更多的TCP和描述信息。作为一个非常有用快捷的跟踪TCP连接和套接字的工具。ss提供如下信息:

所有的TCP套接字。

所有的UDP套接字。

所有建立连接的如:ssh / ftp / http / https 的连接信息。

所有连接到X sever的本地进程。

过滤类似状态(connected, synchronized, SYN-RECV, SYN-SENT,TIME-WAIT)。地址和端口。

所有TCP套接字如FIN-WAIT-1等。

大多数linux发行版本包含了ss及其它一些监控工具,帮助你理解系统sockets在做什么,及找到可能导致性能问题的原因。

示例: 显示 Sockets 摘要 

列出当前的established, closed, orphaned and waiting TCP sockets:

  
  1. # ss -s 
  2. Total: 734 (kernel 904) 
  3. TCP:   1415 (estab 112, closed 1259, orphaned 11, synrecv 0, timewait 1258/0), ports 566 
  4. Transport Total     IP        IPv6 
  5. *     904       -         - 
  6. RAW   0         0         0 
  7. UDP   15        12        3 
  8. TCP   156       134       22 
  9. INET      171       146       25 
  10. FRAG      0         0         0   

示例: 列出所有打开的网络连接端口

  
  1. # ss -l 
  2. Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 *:ndmp *:* 0 0 192.168.122.1:domain *:* 0 0 *:ssh *:* 0 0 :::ssh :::*      

通过以下命令查看进程使用的socket:

  
  1. # ss -pl 

找出谁负责打开套接字/端口#4949:

  
  1. # ss -lp | grep 4949 
  2. 0      0                            *:4949                          *:*        users:(("munin-node",3772,5)) 
  3. munin-node (PID # 3772) is responsible for opening port # 4949. You can get more information about this process (like memory used, users, current working directory and so on) visiting /proc/3772 directory: 
  4. # cd /proc/3772 
  5. # ls -l 

示例:显示所有TCP Sockets 

  
  1. # ss -t -a 

示例:显示所有UDP Sockets

  
  1. # ss -u -a  

示例: 显示所有状态为established的SMTP连接

  
  1. # ss -o state established '( dport = :smtp or sport = :smtp )'  

示例: 显示所有状态为Established的HTTP连接

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

示例: 查找本地所有连接到的进程 X Server 

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

示例:列出所有状态为FIN-WAIT-1的Tcp Sockets  

  
  1. # ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst 202.54.1/24  

怎样用TCP 状态过滤Sockets?

使用以下参数:

## tcp ipv4 ##

  
  1. ss -4 state FILTER-NAME-HERE 

## tcp ipv6 ##

  
  1. ss -6 state FILTER-NAME-HERE  

FILTER-NAME-HERE 可以代表以下任何一个, 

established

syn-sent

syn-recv

fin-wait-1

fin-wait-2

time-wait

closed

close-wait

last-ack

listen

closing

all : 所有以上状态

connected : 除了listen and closed的所有状态

synchronized :所有已连接的状态除了syn-sent

bucket : 显示状态为maintained as minisockets,如:time-wait和syn-recv.

big : 和bucket相反.

例子:

输入以下命令查看closing sockets:

  
  1. #ss -4 state closing 
  2. Recv-Q Send-Q                                                  Local Address:Port                                                      Peer Address:Port 
  3. 1      11094                                                  75.126.153.214:http                                                      175.44.24.85:4669 

怎样匹配远程地址和端口号?

使用以下参数: 

  
  1. #ss dst ADDRESS_PATTERN 

## 显示所有连接到远程服务器192.168.1.5的端口##

  
  1. #ss dst 192.168.1.5  

## show all ports connected from remote 192.168.1.5:http port##

  
  1. #ss dst 192.168.1.5:http 
  2. #ss dst 192.168.1.5:smtp 
  3. #ss dst 192.168.1.5:443  

Find out connection made by remote 123.1.2.100:http to our local virtual servers:

  
  1. # ss dst 123.1.2.100:http 
  2. State      Recv-Q Send-Q                                             Local Address:Port                                                 Peer Address:Port 
  3. ESTAB      0      0                                                 75.126.153.206:http                                               123.1.2.100:35710 
  4. ESTAB      0      0                                                 75.126.153.206:http                                               123.1.2.100:35758 

怎样匹配本地地址和端口号?

  
  1. #ss src ADDRESS_PATTERN 

### find out all ips connected to nixcraft.com ip address 75.126.153.214 ###

## Show all ports connected to local 75.126.153.214##

  
  1. #ss src 75.126.153.214 

## http (80) port only ##

  
  1. #ss src 75.126.153.214:http 
  2. #ss src 75.126.153.214:80 

## smtp (25) port only ##

  
  1. #ss src 75.126.153.214:smtp 
  2. #ss src 75.126.153.214:25  

怎样将本地或者远程端口和一个数比较? 

使用以下参数: 

## 远程端口和一个数比较##

  
  1. ss dport OP PORT 

##本地端口和一个数比较 ##

  
  1. sport OP PORT 

OP 可以代表以下任意一个: 

<= or le : 小于或等于端口号

>= or ge : 大于或等于端口号

== or eq : 等于端口号

!= or ne : 不等于端口号

< or gt : 小于端口号

> or lt : 大于端口号

注意: le, gt, eq, ne etc. are use in unix shell and are accepted as well.

例子:

###################################################################################

### 注意字符问题 ###

################################################################################### 

  
  1. #ss  sport = :http 
  2. #ss  dport = :http 
  3. #ss  dport \> :1024 
  4. #ss  sport \> :1024 
  5. #ss sport \< :32000 
  6. #ss  sport eq :22 
  7. #ss  dport != :22 
  8. #ss  state connected sport = :http 
  9. #ss \( sport = :http or sport = :https \) 
  10. #ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.1/24 

ss 和 netstat 效率对比 

用time 命令分别获取通过netstat和ss命令获取程序和概要占用资源所使用的时间: 

  
  1. # time netstat -at 
  2.   
  3. Sample outputs: 
  4.   
  5. real    2m52.254s 
  6. user    0m0.178s 
  7. sys 0m0.170s 
  8. Now, try the ss command: 
  9.  
  10. # time ss
  11.   
  12. Sample outputs: 
  13.   
  14. real    2m11.102s 
  15. user    0m0.124s 
  16. sys 0m0.068s 

推荐阅读:查看ss帮助。

本文链接:https://my.lmcjl.com/post/1096.html

展开阅读全文

4 评论

留下您的评论.