ss命令,Socket Statistics 查看套接字信息

文章轉載於http://xikder.blog.51cto.com/1423200/869467


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

示例: 列出所有打開的網絡連接端口

  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:

# 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命令獲取程序和概要佔用資源所使用的時間: 

  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幫助。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章