ss
比 netstat 好用的socket統計信息,iproute2 包附帶的另一個工具,允許你查詢 socket 的有關統計信息
補充說明
ss命令 用來顯示處於活動狀態的套接字信息。ss命令可以用來獲取socket統計信息,它可以顯示和netstat類似的內容。但ss的優勢在於它能夠顯示更多更詳細的有關TCP和連接狀態的信息,而且比netstat更快速更高效。
當服務器的socket連接數量變得非常大時,無論是使用netstat命令還是直接cat /proc/net/tcp
,執行速度都會很慢。可能你不會有切身的感受,但請相信我,當服務器維持的連接達到上萬個的時候,使用netstat等於浪費 生命,而用ss纔是節省時間。
天下武功唯快不破。ss快的祕訣在於,它利用到了TCP協議棧中tcp_diag。tcp_diag是一個用於分析統計的模塊,可以獲得Linux 內核中第一手的信息,這就確保了ss的快捷高效。當然,如果你的系統中沒有tcp_diag,ss也可以正常運行,只是效率會變得稍慢。
語法
1ss [參數]
2ss [參數] [過濾]
選項
1-h, --help 幫助信息
2-V, --version 程序版本信息
3-n, --numeric 不解析服務名稱
4-r, --resolve 解析主機名
5-a, --all 顯示所有套接字(sockets)
6-l, --listening 顯示監聽狀態的套接字(sockets)
7-o, --options 顯示計時器信息
8-e, --extended 顯示詳細的套接字(sockets)信息
9-m, --memory 顯示套接字(socket)的內存使用情況
10-p, --processes 顯示使用套接字(socket)的進程
11-i, --info 顯示 TCP內部信息
12-s, --summary 顯示套接字(socket)使用概況
13-4, --ipv4 僅顯示IPv4的套接字(sockets)
14-6, --ipv6 僅顯示IPv6的套接字(sockets)
15-0, --packet 顯示 PACKET 套接字(socket)
16-t, --tcp 僅顯示 TCP套接字(sockets)
17-u, --udp 僅顯示 UCP套接字(sockets)
18-d, --dccp 僅顯示 DCCP套接字(sockets)
19-w, --raw 僅顯示 RAW套接字(sockets)
20-x, --unix 僅顯示 Unix套接字(sockets)
21-f, --family=FAMILY 顯示 FAMILY類型的套接字(sockets),FAMILY可選,支持 unix, inet, inet6, link, netlink
22-A, --query=QUERY, --socket=QUERY
23 QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
24-D, --diag=FILE 將原始TCP套接字(sockets)信息轉儲到文件
25 -F, --filter=FILE 從文件中都去過濾器信息
26 FILTER := [ state TCP-STATE ] [ EXPRESSION ]
實例
1ss -t -a # 顯示TCP連接
2ss -s # 顯示 Sockets 摘要
3ss -l # 列出所有打開的網絡連接端口
4ss -pl # 查看進程使用的socket
5ss -lp | grep 3306 # 找出打開套接字/端口應用程序
6ss -u -a 顯示所有UDP Sockets
7ss -o state established '( dport = :smtp or sport = :smtp )' # 顯示所有狀態爲established的SMTP連接
8ss -o state established '( dport = :http or sport = :http )' # 顯示所有狀態爲Established的HTTP連接
9ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst 193.233.7/24 # 列舉出處於 FIN-WAIT-1狀態的源端口爲 80或者 443,目標網絡爲 193.233.7/24所有 tcp套接字
10
11# ss 和 netstat 效率對比
12time netstat -at
13time ss
14
15# 匹配遠程地址和端口號
16# ss dst ADDRESS_PATTERN
17ss dst 192.168.1.5
18ss dst 192.168.119.113:http
19ss dst 192.168.119.113:smtp
20ss dst 192.168.119.113:443
21
22# 匹配本地地址和端口號
23# ss src ADDRESS_PATTERN
24ss src 192.168.119.103
25ss src 192.168.119.103:http
26ss src 192.168.119.103:80
27ss src 192.168.119.103:smtp
28ss src 192.168.119.103:25
將本地或者遠程端口和一個數比較
1# ss dport OP PORT 遠程端口和一個數比較;
2# ss sport OP PORT 本地端口和一個數比較
3# OP 可以代表以下任意一個:
4# <= or le : 小於或等於端口號
5# >= or ge : 大於或等於端口號
6# == or eq : 等於端口號
7# != or ne : 不等於端口號
8# < or gt : 小於端口號
9# > or lt : 大於端口號
10ss sport = :http
11ss dport = :http
12ss dport \> :1024
13ss sport \> :1024
14ss sport \< :32000
15ss sport eq :22
16ss dport != :22
17ss state connected sport = :http
18ss \( sport = :http or sport = :https \)
19ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.1/24
用TCP 狀態過濾Sockets
1ss -4 state closing
2# ss -4 state FILTER-NAME-HERE
3# ss -6 state FILTER-NAME-HERE
4# FILTER-NAME-HERE 可以代表以下任何一個:
5# established、 syn-sent、 syn-recv、 fin-wait-1、 fin-wait-2、 time-wait、 closed、 close-wait、 last-ack、 listen、 closing、
6# all : 所有以上狀態
7# connected : 除了listen and closed的所有狀態
8# synchronized :所有已連接的狀態除了syn-sent
9# bucket : 顯示狀態爲maintained as minisockets,如:time-wait和syn-recv.
10# big : 和bucket相反.
顯示ICP連接
1[root@localhost ~]# ss -t -a
2State Recv-Q Send-Q Local Address:Port Peer Address:Port
3LISTEN 0 0 *:3306 *:*
4LISTEN 0 0 *:http *:*
5LISTEN 0 0 *:ssh *:*
6LISTEN 0 0 127.0.0.1:smtp *:*
7ESTAB 0 0 112.124.15.130:42071 42.156.166.25:http
8ESTAB 0 0 112.124.15.130:ssh 121.229.196.235:33398
顯示 Sockets 摘要
1[root@localhost ~]# ss -s
2Total: 172 (kernel 189)
3TCP: 10 (estab 2, closed 4, orphaned 0, synrecv 0, timewait 0/0), ports 5
4
5Transport Total ip IPv6
6* 189 - -
7RAW 0 0 0
8UDP 5 5 0
9TCP 6 6 0
10INET 11 11 0
11FRAG 0 0 0
列出當前的established, closed, orphaned and waiting TCP sockets
列出所有打開的網絡連接端口
1[root@localhost ~]# ss -l
2Recv-Q Send-Q Local Address:Port Peer Address:Port
30 0 *:3306 *:*
40 0 *:http *:*
50 0 *:ssh *:*
60 0 127.0.0.1:smtp *:*
查看進程使用的socket
1[root@localhost ~]# ss -pl
2Recv-Q Send-Q Local Address:Port Peer Address:Port
30 0 *:3306 *:* users:(("mysqld",1718,10))
40 0 *:http *:* users:(("nginx",13312,5),("nginx",13333,5))
50 0 *:ssh *:* users:(("sshd",1379,3))
60 0 127.0.0.1:smtp *:* us
找出打開套接字/端口應用程序
1[root@localhost ~]# ss -pl | grep 3306
20 0 *:3306 *:* users:(("mysqld",1718,10))
顯示所有UDP Sockets
1[root@localhost ~]# ss -u -a
2State Recv-Q Send-Q Local Address:Port Peer Address:Port
3UNCONN 0 0 *:syslog *:*
4UNCONN 0 0 112.124.15.130:ntp *:*
5UNCONN 0 0 10.160.7.81:ntp *:*
6UNCONN 0 0 127.0.0.1:ntp *:*
7UNCONN 0 0 *:ntp *:*
出所有端口爲 22(ssh)的連接
1[root@localhost ~]# ss state all sport = :ssh
2Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
3tcp LISTEN 0 128 *:ssh *:*
4tcp ESTAB 0 0 192.168.0.136:ssh 192.168.0.102:46540
5tcp LISTEN 0 128 :::ssh :::*
查看TCP的連接狀態
1[root@localhost ~]# ss -tan|awk 'NR>1{++S[$1]}END{for (a in S) print a,S[a]}'
2LISTEN 7
3ESTAB 31
4TIME-WAIT 28
來源:https://github.com/jaywcjlove/linux-command
最後修改於: Wednesday, January 31, 2024
版權申明:
- 未標註來源的內容皆為原創,未經授權請勿轉載(因轉載後排版往往錯亂、內容不可控、無法持續更新等);
- 非營利為目的,演繹本博客任何內容,請以'原文出處'或者'參考鏈接'等方式給出本站相關網頁地址(方便讀者)。