linux ss命令詳解
ss 是 Socket Statistics 的縮寫。ss 命令可以用來(lái)獲取 socket 統(tǒng)計(jì)信息,它顯示的內(nèi)容和 netstat 類似。但 ss 的優(yōu)勢(shì)在于它能夠顯示更多更詳細(xì)的有關(guān) TCP 和連接狀態(tài)的信息,而且比 netstat 更快。當(dāng)服務(wù)器的 socket 連接數(shù)量變得非常大時(shí),無(wú)論是使用 netstat 命令還是直接 cat /proc/net/tcp,執(zhí)行速度都會(huì)很慢。ss 命令利用到了 TCP 協(xié)議棧中 tcp_diag。tcp_diag 是一個(gè)用于分析統(tǒng)計(jì)的模塊,可以獲得 Linux 內(nèi)核中第一手的信息,因此 ss 命令的性能會(huì)好很多。
常用選項(xiàng)
-h, --help 幫助
-V, --version 顯示版本號(hào)
-t, --tcp 顯示 TCP 協(xié)議的 sockets
-u, --udp 顯示 UDP 協(xié)議的 sockets
-x, --unix 顯示 unix domain sockets,與 -f 選項(xiàng)相同
-n, --numeric 不解析服務(wù)的名稱,如 "22" 端口不會(huì)顯示成 "ssh"
-l, --listening 只顯示處于監(jiān)聽(tīng)狀態(tài)的端口
-p, --processes 顯示監(jiān)聽(tīng)端口的進(jìn)程(Ubuntu 上需要 sudo)
-a, --all 對(duì) TCP 協(xié)議來(lái)說(shuō),既包含監(jiān)聽(tīng)的端口,也包含建立的連接
-r, --resolve 把 IP 解釋為域名,把端口號(hào)解釋為協(xié)議名稱
常見(jiàn)用例
如果不添加選項(xiàng) ss 命令默認(rèn)輸出所有建立的連接(不包含監(jiān)聽(tīng)的端口),包括 tcp, udp, and unix socket 三種類型的連接:
查看主機(jī)監(jiān)聽(tīng)的端口
$ ss -tnl
通過(guò) -r 選項(xiàng)解析 IP 和端口號(hào)
$ ss -tlr
使用 -p 選項(xiàng)查看監(jiān)聽(tīng)端口的程序名稱
$ sudo ss -tlp
最后一列就是運(yùn)行的程序名稱。還可以通過(guò) grep 繼續(xù)過(guò)濾:
$ sudo ss -tlp | grep ssh
查看建立的 TCP 連接
-a --all 對(duì) TCP 協(xié)議來(lái)說(shuō),既包含監(jiān)聽(tīng)的端口,也包含建立的連接
$ ss -tna
顯示更多的信息
-o, --options 顯示時(shí)間信息
-m, --memory 顯示 socket 使用的內(nèi)存
-i, --info 顯示更多 TCP 內(nèi)部的信息
顯示概要信息
$ ss -s
dst/src dport/sport 語(yǔ)法
可以通過(guò) dst/src/dport/sprot 語(yǔ)法來(lái)過(guò)濾連接的來(lái)源和目標(biāo),來(lái)源端口和目標(biāo)端口。
匹配遠(yuǎn)程地址和端口號(hào)
$ ss dst 192.168.1.5 $ ss dst 192.168.119.113:http $ ss dst 192.168.119.113:443
匹配本地地址和端口號(hào)
$ ss src 192.168.119.103 $ ss src 192.168.119.103:http $ ss src 192.168.119.103:80
將本地或者遠(yuǎn)程端口和一個(gè)數(shù)比較
可以使用下面的語(yǔ)法做端口號(hào)的過(guò)濾:
$ ss dport OP PORT $ ss sport OP PORT
OP 可以代表以下任意一個(gè):
<= | le | 小于或等于某個(gè)端口號(hào) |
>= | ge | 大于或等于某個(gè)端口號(hào) |
== | eq | 等于某個(gè)端口號(hào) |
!= | ne | 不等于某個(gè)端口號(hào) |
> | gt | 大于某個(gè)端口號(hào) |
< | lt | 小于某個(gè)端口號(hào) |
下面是一個(gè)簡(jiǎn)單的 demo(注意,需要對(duì)尖括號(hào)使用轉(zhuǎn)義符):
$ ss -tunl sport lt 50 $ ss -tunl sport \< 50
通過(guò) TCP 的狀態(tài)進(jìn)行過(guò)濾
ss 命令還可以通過(guò) TCP 連接的狀態(tài)進(jìn)程過(guò)濾,支持的 TCP 協(xié)議中的狀態(tài)有:
established
syn-sent
syn-recv
fin-wait-1
fin-wait-2
time-wait
closed
close-wait
last-ack
listening
closing
除了上面的 TCP 狀態(tài),還可以使用下面這些狀態(tài):
all | 列出所有的 TCP 狀態(tài)。 |
connected | 列出除了 listening 和 closing 之外的所有 TCP 狀態(tài)。 |
synchronized | 列出除了 syn-sent 之外的所有 TCP 狀態(tài)。 |
bucket | 列出 maintained 的狀態(tài),如:time-wait 和 syn-recv。 |
big | 列出和 bucket 相反的狀態(tài)。 |
使用 ipv4 時(shí)的過(guò)濾語(yǔ)法如下:
$ ss -4 state filter
使用 ipv6 時(shí)的過(guò)濾語(yǔ)法如下:
$ ss -6 state filter
下面是一個(gè)簡(jiǎn)單的例子:
$ ss -4 state listening
同時(shí)過(guò)濾 TCP 的狀態(tài)和端口號(hào)
(注意下面命令中的轉(zhuǎn)義符和空格,都是必須的。如果不用轉(zhuǎn)義符,可以使用單引號(hào))
下面的命令顯示所有狀態(tài)為 established 的 ssh 連接:
$ ss -4n state listening
下面的兩種寫法是等價(jià)的,要有使用 \ 轉(zhuǎn)義小括號(hào),要么使用單引號(hào)括起來(lái):
$ ss -4n state listening \( dport = :ssh \) $ ss -4n state listening '( dport = :ssh )'
只是最后的結(jié)果稍微讓人有些意外,不僅顯示了監(jiān)聽(tīng)的端口,也顯示了通過(guò) 22 端口建立的連接。
下面我們顯示所有狀態(tài)為 Established 的 HTTP 連接:
$ ss -4n state listening \( dport = :ssh \) $ ss -4n state listening '( dport = :ssh )'
下面的命令列出所有連接到 22 端口的連接和對(duì) 22 端口的監(jiān)聽(tīng):
$ ss state all dport = :22
下面是一個(gè)來(lái)自 ss man page 的例子,它列舉出處于 FIN-WAIT-1狀態(tài)的源端口為 80 或者 443,目標(biāo)網(wǎng)絡(luò)為 193.233.7/24 所有 TCP 套接字:
$ ss state fin-wait-1 '( sport = :http or sport = :https )' dst 193.233.7/24
總結(jié)
由于性能出色且功能豐富,ss 命令可以用來(lái)替代 netsate 命令成為我們?nèi)粘2榭?socket 相關(guān)信息的利器。其實(shí)拋棄 netstate 命令已經(jīng)是大勢(shì)所趨,有的 Linux 版本默認(rèn)已經(jīng)不再內(nèi)置 netstate 而是內(nèi)置了 ss 命令。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Linux運(yùn)維之如何使用ss命令代替netstat
- Linux進(jìn)程間通信方式之socket使用實(shí)例
- Linux UDP socket 設(shè)置為的非阻塞模式與阻塞模式區(qū)別
- Linux網(wǎng)絡(luò)編程之UDP Socket程序示例
- Linux網(wǎng)絡(luò)編程之socket文件傳輸示例
- Zabbix基于snmp實(shí)現(xiàn)監(jiān)控linux主機(jī)
- zabbix監(jiān)控Linux系統(tǒng)服務(wù)的流程
- Zabbix監(jiān)控Linux主機(jī)設(shè)置方法
- 詳解Linux監(jiān)控重要進(jìn)程的實(shí)現(xiàn)方法
- 詳解Linux使用ss命令結(jié)合zabbix對(duì)socket做監(jiān)控
相關(guān)文章
CentOS安裝Python2.7與Python2.6并存的方法
這篇文章主要介紹了CentOS安裝Python2.7與Python2.6并存的方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-08-08詳解Linux系統(tǒng)中網(wǎng)卡MAC地址克隆方法
本篇文章主要介紹了詳解Linux系統(tǒng)中網(wǎng)卡MAC地址克隆方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06一文詳解Linux三種網(wǎng)絡(luò)設(shè)置方式
我們?cè)谑褂锰摂M機(jī)搭建linux系統(tǒng)后,常常需要設(shè)置系統(tǒng)網(wǎng)絡(luò)連接,以方便系統(tǒng)進(jìn)行上網(wǎng)或其他系統(tǒng)連接系統(tǒng)進(jìn)行操作,在linux中網(wǎng)絡(luò)連接分了三類:橋接模式,僅主機(jī)模式,NAT模式,本文我們將對(duì)這三種模式進(jìn)行講解,感興趣的同學(xué)可以參考閱讀2023-06-06linux驅(qū)動(dòng)開(kāi)發(fā)中常用函數(shù)copy_from_user open read write詳解
本文解說(shuō)了inux驅(qū)動(dòng)開(kāi)發(fā)函數(shù)copy_from_user ,open ,read write幾個(gè)常用函數(shù),現(xiàn)在一起來(lái)學(xué)習(xí)他們的使用過(guò)程吧2021-08-08linux設(shè)置tomcat自啟動(dòng)的方法
這篇文章主要介紹了linux設(shè)置tomcat自啟動(dòng)的方法,需要的朋友可以參考下2014-03-03