ss命令詳解

 

基礎命令學習目錄   html

 

原文連接:https://www.jb51.net/article/135414.htmlinux

ss 是 Socket Statistics 的縮寫。ss 命令能夠用來獲取 socket 統計信息,它顯示的內容和 netstat 相似。但 ss 的優點在於它可以顯示更多更詳細的有關 TCP 和鏈接狀態的信息,並且比 netstat 更快。當服務器的 socket 鏈接數量變得很是大時,不管是使用 netstat 命令仍是直接 cat /proc/net/tcp,執行速度都會很慢。ss 命令利用到了 TCP 協議棧中 tcp_diag。tcp_diag 是一個用於分析統計的模塊,能夠得到 Linux 內核中第一手的信息,所以 ss 命令的性能會好不少。swift

經常使用選項bash

-h, --help 幫助
-V, --version 顯示版本號
-t, --tcp 顯示 TCP 協議的 sockets
-u, --udp 顯示 UDP 協議的 sockets
-x, --unix 顯示 unix domain sockets,與 -f 選項相同
-n, --numeric 不解析服務的名稱,如 "22" 端口不會顯示成 "ssh"
-l, --listening 只顯示處於監聽狀態的端口
-p, --processes 顯示監聽端口的進程(Ubuntu 上須要 sudo)
-a, --all 對 TCP 協議來講,既包含監聽的端口,也包含創建的鏈接
-r, --resolve 把 IP 解釋爲域名,把端口號解釋爲協議名稱服務器

常見用例網絡

若是不添加選項 ss 命令默認輸出全部創建的鏈接(不包含監聽的端口),包括 tcp, udp, and unix socket 三種類型的鏈接:併發

查看主機監聽的端口dom

?
1
$ ss -tnl

經過 -r 選項解析 IP 和端口號ssh

?
1
$ ss -tlr

使用 -p 選項查看監聽端口的程序名稱socket

?
1
$ sudo ss -tlp

最後一列就是運行的程序名稱。還能夠經過 grep 繼續過濾:

?
1
$ sudo ss -tlp | grep ssh

查看創建的 TCP 鏈接

-a --all 對 TCP 協議來講,既包含監聽的端口,也包含創建的鏈接

?
1
$ ss -tna

顯示更多的信息

-o, --options 顯示時間信息
-m, --memory 顯示 socket 使用的內存
-i, --info 顯示更多 TCP 內部的信息

顯示概要信息

?
1
$ ss -s

dst/src dport/sport 語法

能夠經過 dst/src/dport/sprot 語法來過濾鏈接的來源和目標,來源端口和目標端口。

匹配遠程地址和端口號

?
1
2
3
$ ss dst 192.168.1.5
$ ss dst 192.168.119.113:http
$ ss dst 192.168.119.113:443

匹配本地地址和端口號

?
1
2
3
$ ss src 192.168.119.103
$ ss src 192.168.119.103:http
$ ss src 192.168.119.103:80

將本地或者遠程端口和一個數比較

可使用下面的語法作端口號的過濾:

?
1
2
$ ss dport OP PORT
$ ss sport OP PORT

OP 能夠表明如下任意一個:

<= le 小於或等於某個端口號
>= ge 大於或等於某個端口號
== eq 等於某個端口號
!= ne 不等於某個端口號
> gt 大於某個端口號
< lt 小於某個端口號

 

下面是一個簡單的 demo(注意,須要對尖括號使用轉義符):

?
1
2
$ ss -tunl sport lt 50
$ ss -tunl sport \< 50

經過 TCP 的狀態進行過濾

ss 命令還能夠經過 TCP 鏈接的狀態進程過濾,支持的 TCP 協議中的狀態有:
established
syn-sent
syn-recv
fin-wait-1
fin-wait-2
time-wait
closed
close-wait
last-ack
listening
closing

除了上面的 TCP 狀態,還可使用下面這些狀態:

all 列出全部的 TCP 狀態。
connected 列出除了 listening 和 closing 以外的全部 TCP 狀態。
synchronized 列出除了 syn-sent 以外的全部 TCP 狀態。
bucket 列出 maintained 的狀態,如:time-wait 和 syn-recv。
big 列出和 bucket 相反的狀態。

 

使用 ipv4 時的過濾語法以下:

?
1
$ ss -4 state filter

使用 ipv6 時的過濾語法以下:

?
1
$ ss -6 state filter

下面是一個簡單的例子:

?
1
$ ss -4 state listening

同時過濾 TCP 的狀態和端口號

(注意下面命令中的轉義符和空格,都是必須的。若是不用轉義符,可使用單引號)

下面的命令顯示全部狀態爲 established 的 ssh 鏈接:

?
1
$ ss -4n state listening

下面的兩種寫法是等價的,要有使用 \ 轉義小括號,要麼使用單引號括起來:

?
1
2
$ ss -4n state listening \( dport = : ssh \)
$ ss -4n state listening '( dport = :ssh )'

只是最後的結果稍微讓人有些意外,不只顯示了監聽的端口,也顯示了經過 22 端口創建的鏈接。

下面咱們顯示全部狀態爲 Established 的 HTTP 鏈接:

?
1
2
$ ss -4n state listening \( dport = : ssh \)
$ ss -4n state listening '( dport = :ssh )'

下面的命令列出全部鏈接到 22 端口的鏈接和對 22 端口的監聽:

?
1
$ ss state all dport = :22

下面是一個來自 ss man page 的例子,它列舉出處於 FIN-WAIT-1狀態的源端口爲 80 或者 443,目標網絡爲 193.233.7/24 全部 TCP 套接字:

?
1
$ ss state fin-wait-1 '( sport = :http or sport = :https )' dst 193.233.7 /24

總結

因爲性能出色且功能豐富,ss 命令能夠用來替代 netsate 命令成爲咱們平常查看 socket 相關信息的利器。其實拋棄 netstate 命令已是大勢所趨,有的 Linux 版本默認已經再也不內置 netstate 而是內置了 ss 命令。

以上就是本文的所有內容,但願對你們的學習有所幫助,也但願你們多多支持腳本之家。

 

ss命令用於顯示socket狀態. 他能夠顯示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix domain sockets等等統計. 它比其餘工具展現等多tcp和state信息. 它是一個很是實用、快速、有效的跟蹤IP鏈接和sockets的新工具.SS命令能夠提供以下信息:

  • 全部的TCP sockets
  • 全部的UDP sockets
  • 全部ssh/ftp/ttp/https持久鏈接
  • 全部鏈接到Xserver的本地進程
  • 使用state(例如:connected, synchronized, SYN-RECV, SYN-SENT,TIME-WAIT)、地址、端口過濾
  • 全部的state FIN-WAIT-1 tcpsocket鏈接以及更多

不少流行的Linux發行版都支持ss以及不少監控工具使用ss命令.熟悉這個工具備助於您更好的發現與解決系統性能問題.本人強烈建議使用ss命令替代netstat部分命令,例如netsat -ant/lnt等.

展現他以前來作個對比,統計服務器併發鏈接數

結果很明顯ss統計併發鏈接數效率完敗netstat,在ss能搞定的狀況下, 你還會在選擇netstat嗎, 還在猶豫嗎, 看如下例子,或者跳轉到幫助頁面.

經常使用ss命令:

顯示sockets簡要信息
列出當前已經鏈接,關閉,等待的tcp鏈接

列出當前監聽端口

ss列出每一個進程名及其監聽的端口

ss列全部的tcp sockets

ss列出全部udp sockets

ss列出全部http鏈接中的鏈接

·以上包含對外提供的80,以及訪問外部的80
·用以上命令完美的替代netstat獲取http併發鏈接數,監控中經常使用到

ss列出本地哪一個進程鏈接到x server

ss列出處在FIN-WAIT-1狀態的http、https鏈接

ss經常使用的state狀態

ss使用IP地址篩選

ss使用端口篩選

OP運算符以下:

OP實例

爲何ss比netstat快:
netstat是遍歷/proc下面每一個PID目錄,ss直接讀/proc/net下面的統計信息。因此ss執行的時候消耗資源以及消耗的時間都比netstat少不少

ss命令幫助

參考:http://www.cyberciti.biz/tips/linux-investigate-sockets-network-connections.html
轉摘請註明出處:Linux網絡狀態工具ss命令詳解  http://www.ttlsa.com/html/2070.html

相關文章
相關標籤/搜索