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:
- # ss -s
- Total: 734 (kernel 904)
- TCP: 1415 (estab 112, closed 1259, orphaned 11, synrecv 0, timewait 1258/0), ports 566
- Transport Total IP IPv6
- * 904 - -
- RAW 0 0 0
- UDP 15 12 3
- TCP 156 134 22
- INET 171 146 25
- FRAG 0 0 0
示例: 列出所有打開的網絡連接端口
- # ss -l
- 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:
- # ss -pl
找出誰負責打開套接字/端口#4949:
- # ss -lp | grep 4949
- 0 0 *:4949 *:* users:(("munin-node",3772,5))
- 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:
- # cd /proc/3772
- # ls -l
示例:顯示所有TCP Sockets
- # ss -t -a
示例:顯示所有UDP Sockets
- # ss -u -a
示例: 顯示所有狀態爲established的SMTP連接
- # ss -o state established '( dport = :smtp or sport = :smtp )'
示例: 顯示所有狀態爲Established的HTTP連接
- # ss -o state established '( dport = :http or sport = :http )'
示例: 查找本地所有連接到的進程 X Server
- # ss -x src /tmp/.X11-unix/*
示例:列出所有狀態爲FIN-WAIT-1的Tcp Sockets
- # ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst 202.54.1/24
怎樣用TCP 狀態過濾Sockets?
使用以下參數:
## tcp ipv4 ##
- ss -4 state FILTER-NAME-HERE
## tcp ipv6 ##
- 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:
- #ss -4 state closing
- Recv-Q Send-Q Local Address:Port Peer Address:Port
- 1 11094 75.126.153.214:http 175.44.24.85:4669
怎樣匹配遠程地址和端口號?
使用以下參數:
- #ss dst ADDRESS_PATTERN
## 顯示所有連接到遠程服務器192.168.1.5的端口##
- #ss dst 192.168.1.5
## show all ports connected from remote 192.168.1.5:http port##
- #ss dst 192.168.1.5:http
- #ss dst 192.168.1.5:smtp
- #ss dst 192.168.1.5:443
Find out connection made by remote 123.1.2.100:http to our local virtual servers:
- # ss dst 123.1.2.100:http
- State Recv-Q Send-Q Local Address:Port Peer Address:Port
- ESTAB 0 0 75.126.153.206:http 123.1.2.100:35710
- ESTAB 0 0 75.126.153.206:http 123.1.2.100:35758
怎樣匹配本地地址和端口號?
- #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##
- #ss src 75.126.153.214
## http (80) port only ##
- #ss src 75.126.153.214:http
- #ss src 75.126.153.214:80
## smtp (25) port only ##
- #ss src 75.126.153.214:smtp
- #ss src 75.126.153.214:25
怎樣將本地或者遠程端口和一個數比較?
使用以下參數:
## 遠程端口和一個數比較##
- ss dport OP PORT
##本地端口和一個數比較 ##
- 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.
例子:
###################################################################################
### 注意字符問題 ###
###################################################################################
- #ss sport = :http
- #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 效率對比
用time 命令分別獲取通過netstat和ss命令獲取程序和概要佔用資源所使用的時間:
- # time netstat -at
- Sample outputs:
- real 2m52.254s
- user 0m0.178s
- sys 0m0.170s
- Now, try the ss command:
- # time ss
- Sample outputs:
- real 2m11.102s
- user 0m0.124s
- sys 0m0.068s
推薦閱讀:查看ss幫助。