ss命令

ss 是 socket statistics 的缩写。顾名思义,ss 命令可以用来获取socket 统计信息 ss 的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效 当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是 cat /proc/net/tcp,执行速度都会很慢 当服务器维持的连接达到上万个的时候,使用 netstat 等于浪费生命,而用 ss才是 节省时间

利用了TCP协议栈中 tcp_diag. tcp_diag 是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有 tcp_diag,ss也可以正常运行,只是效率会变得稍慢

实例:

1. 显示TCP连接:
      ss -t -a
2. 显示 sockets  摘要
      ss -s
3. 列出当前的established、 closed、 orphaned  and  waiting  TCP sockets
    ss -l
4. 查看进程使用的socket
    ss -pl
5. 找出打开套接字/端口应用程序
    ss -lp | grep 3306
6. 显示所有UDP  sockets
    ss   -u  -a
7. 显示所有状态为 established  的 SMTP 连接
    ss -o state established `(  dport  =: smtp  or  sport  = : smtp )`
8. 显示所有状态为 Established 的 HTTP 连接
    ss -o state established `(dport = :http or sport = :http)`
9. 列举出处于 FIN-WAIT-1状态的源端口为80或者443,目标网络为192.168.1/24的所有tcp套接字
    ss -o state fin-wait-1 `(sport= :http or sport = :https)` dst 192.168.1/24
10. 用TCP 状态过滤 sockets
    ss  -4 state <FILTER-NAME-HERE>
   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 相反
11. 匹配远程地址和端口号
    ss  dst  ADDERSS_PATTERN
    ss  dst  192.168.1.1
    ss dst 192.168.1.1:8080
12. 匹配本地地址和端口号
    ss  src  ADDRESS_PATTERN
    ss  src 192.168.1.1
    ss  src   192.168.1.1:80
13. 将本地或者远程端口和一个数比较
    ss dport <OP> PORT    // 远程端口和一个数比较: destination port
    ss sport <OP> PORT    // 本地端口和一个数比较: source port
    <OP>:
      <=  or  le
      >=  or  ge
      ==  or  eq
      !=  or  ne
      <   or  gt
      >   or  lt
14. ss  和  netstat 效率对比:
     time  netstat  -at
     time  ss