netstat的替代者-ss命令实例详解
來源:公眾號(hào)【編程珠璣】
作者:守望先生
原文地址:https://www.yanbinghu.com/2019/06/30/19183.html前言
之前在介紹netstat的時(shí)候說過,netstat是一個(gè)非常實(shí)用的socket查看命令。但是有人留言它已經(jīng)被ss(Socket Statistics)替代了,那么這個(gè)所謂替代netstat的命令,到底怎么用呢?為什么它能替代netstat?
為什么使用ss
值得注意的是,幾乎所有的linux系統(tǒng)都默認(rèn)支持netstat命令,而并不一定支持ss,從這一點(diǎn)來說,netstat通常還是不二選擇。但是不得不承認(rèn)的是,ss命令更加快捷高效。
netstat從proc文件系統(tǒng)(可參考linux中不可錯(cuò)過的信息寶庫)獲取所需要的信息,而ss利用netlink機(jī)制,與內(nèi)核通信,通過TCP 協(xié)議棧中 tcp_diag 模塊獲取第一手的內(nèi)核信息。當(dāng)然這些都不是我們關(guān)注的重點(diǎn),我們來看看ss命令到底如何使用。
查看TCP/UDP連接
使用-t(TCP)參數(shù)查看TCP連接,而使用-u(UDP)參數(shù)查看UDP socket:
$?ss?-t State???????Recv-Q?Send-Q?????????????????????????????????????Local?Address:Port??????????????????????????????????????????????????????Peer?Address:Port????????????????ESTAB???????0??????0??????????????????????????????????????????192.168.0.103:56296???????????????????????????????????????????????????113.107.216.82:https???????????????? ESTAB???????0??????0??????????????????????????????????????????192.168.0.103:56540??????????????????????????????????????????????????185.199.108.153:https???????????????? ESTAB???????0??????0??????????????????????????????????????????????127.0.0.1:socks????????????????????????????????????????????????????????127.0.0.1:44452???????????????? ESTAB???????0??????0??????????????????????????????????????????????127.0.0.1:42150????????????????????????????????????????????????????????127.0.0.1:9614?其中state顯示了當(dāng)前連接的狀態(tài),例如結(jié)果的第一行是ESTABLISHED狀態(tài),Local Address:port代表本地連接的ip和端口號(hào)。另外使用-n參數(shù)顯示數(shù)字形式的ip和端口。
查看socket進(jìn)程信息
查看到某個(gè)連接后,怎么知道是哪個(gè)進(jìn)程的連接呢?使用-p(processes)即可,例如:
$?ss?-tp State???????Recv-Q?Send-Q?????????????????????????????????????Local?Address:Port??????????????????????????????????????????????????????Peer?Address:Port???????????????ESTAB???????0??????0??????????????????????????????????????????????127.0.0.1:42150????????????????????????????????????????????????????????127.0.0.1:9614??????????????????users:(("chrome",pid=2578,fd=347)) ESTAB???????0??????0??????????????????????????????????????????????127.0.0.1:41910????????????????????????????????????????????????????????127.0.0.1:9614??????????????????users:(("chrome",pid=2578,fd=383))拖動(dòng)滾動(dòng)條到最后可以看到,-p參數(shù)顯示了這條連接的進(jìn)程信息,例如,對(duì)于第一條結(jié)果,可以看到,該進(jìn)程是chrome,進(jìn)程id為2578,并且這條連接的文件描述符為383。
users:(("chrome",pid=2578,fd=383))"chrome",pid=2578,fd=383))查看處于特定狀態(tài)的socket
我們知道,對(duì)于TCP連接來講,在不同的階段它的狀態(tài)不同,常見狀態(tài)有
這里還有很多其他狀態(tài),我們會(huì)留到介紹TCP的時(shí)候展開。
如何查看處于特定狀態(tài)的連接呢?例如,要查看處于LISTENING狀態(tài)的連接:
$?ss?-t?state?LISTENING Recv-Q?Send-Q??????????????????????????????????????????Local?Address:Port???????????????????????????????????????????????????????????Peer?Address:Port????????????????0??????5???????????????????????????????????????????????????127.0.1.1:domain????????????????????????????????????????????????????????????????????*:*???????????????????? 0??????128?????????????????????????????????????????????????127.0.0.1:5941??????????????????????????????????????????????????????????????????????*:*???????????????????? 0??????5???????????????????????????????????????????????????127.0.0.1:ipp???????????????????????????????????????????????????????????????????????*:*使用state選項(xiàng)即可查看。當(dāng)然對(duì)于LISTENING狀態(tài),也可以使用-l參數(shù)。
除此之外,還有以下參數(shù),用于查看某類狀態(tài),例如:
查看TCP相關(guān)定時(shí)器信息
我們知道在TCP中,有很多定時(shí)器,和netstat一樣,可以使用-o參數(shù)顯示定時(shí)器相關(guān)信息:
$?ss?-to State???????Recv-Q?Send-Q?????????????????????????????????????Local?Address:Port??????????????????????????????????????????????????????Peer?Address:Port????????????????ESTAB???????0??????0??????????????????????????????????????????????127.0.0.1:44660????????????????????????????????????????????????????????127.0.0.1:socks?????????????????timer:(keepalive,4min42sec,0) ESTAB???????0??????0??????????????????????????????????????????192.168.0.103:60306????????????????????????????????????????????????????203.208.41.37:https?????????????????timer:(keepalive,9.956ms,0) ESTAB???????0??????0??例如上面顯示的keepalive定時(shí)器剩余時(shí)間:
timer:(keepalive,9.956ms,0):(keepalive,9.956ms,0)查看socket詳細(xì)信息
如果想要查看連接更加詳細(xì)信息呢?比如收到多少數(shù)據(jù)?上一個(gè)ACK是什么時(shí)候?mss是多大?擁塞窗口大小是多少?這些信息在分析理解TCP的時(shí)候非常有幫助,而查看這些信息只需要使用-i(information)參數(shù)即可:
$?ss?-ti??#(內(nèi)容很長,省略了很多信息,可執(zhí)行嘗試)cubic?wscale:7,7?rto:204?rtt:2.302/4.528?ato:40?mss:23488?cwnd:10?bytes_acked:1560?bytes_received:3907?segs_out:18?segs_in:20?send?816.3Mbps?lastsnd:1384?lastrcv:1384?lastack:1384?pacing_rate?1632.1Mbps?rcv_rtt:546?rcv_space:43690由于顯示的內(nèi)容比較多,這里就不貼出來了,可自行嘗試,里面展示了TCP很多關(guān)鍵信息。
查看socket內(nèi)存使用情況
使用-m(memory)參數(shù)可以查看連接使用內(nèi)存信息:
$?ss?-tm??#只顯示內(nèi)存部分信息skmem:(r0,rb374400,t0,tb46080,f0,w0,o0,bl0)由于信息較多,這里只顯示內(nèi)存部分,括號(hào)內(nèi)從左到右分別代表:
根據(jù)IP或端口過濾socket信息
你可以使用grep命令(可參考《Linux下的文本查找技巧》)來過濾出你需要的信息,但是ss本身提供一些參數(shù)用來過濾信息。例如,查看本地ip為192.168.0.103的連接:
$?ss?-t?src?192.168.0.103State???????Recv-Q?Send-Q?????????????????????????????????????Local?Address:Port??????????????????????????????????????????????????????Peer?Address:Port???????????????? ESTAB???????0??????0??????????????????????????????????????????192.168.0.103:44528??????????????????????????????????????????????????185.199.109.153:https?? $?ss?-t?src?192.168.0.103:35418 State???????Recv-Q?Send-Q?????????????????????????????????????Local?Address:Port??????????????????????????????????????????????????????Peer?Address:Port???????????????? ESTAB???????0??????0??????????????????????????????????????????192.168.0.103:35418??????????????????????????????????????????????????111.230.120.127:https?src后面跟本地ip:port,而也可以使用dst根據(jù)遠(yuǎn)端ip來過濾信息。
同樣還可以根據(jù)協(xié)議類型(端口)來過濾,例如查看https socket信息:
$?ss?-t?'(?dport?=?:https?or?sport?=?:https?)' State???????Recv-Q?Send-Q?????????????????????????????????????Local?Address:Port??????????????????????????????????????????????????????Peer?Address:Port???????????????? ESTAB???????0??????0??????????????????????????????????????????192.168.0.103:44528??????????????????????????????????????????????????185.199.109.153:https???????????????? ESTAB???????0??????0??????????????????????????????????????????192.168.0.103:35418??????????????????????????????????????????????????111.230.120.127:https????? $?ss?-t?dport?=?:https State???????Recv-Q?Send-Q?????????????????????????????????????Local?Address:Port??????????????????????????????????????????????????????Peer?Address:Port???????????????? CLOSE-WAIT??32?????0??????????????????????????????????????????192.168.0.103:46626???????????????????????????????????????????????????123.58.182.252:https $?ss?-t?sport?\>?:44550???#顯示本地端口大于44550的連接 State???????Recv-Q?Send-Q?????????????????????????????????????Local?Address:Port??????????????????????????????????????????????????????Peer?Address:Port???????????????? ESTAB???????390????0??????????????????????????????????????????????127.0.0.1:46468????????????????????????????????????????????????????????127.0.0.1:socks???????????????? ESTAB???????0??????0??????????????????????????????????????????????127.0.0.1:46382????????????????????????????????????????????????????????127.0.0.1:socks???????????????? ESTAB???????0??????0??????????????????????????????????????????????127.0.0.1:46490????????????????????????????????????????????????????????127.0.0.1:socks其中dport,指定本地協(xié)議(應(yīng)用 端口),sport指定遠(yuǎn)端協(xié)議(應(yīng)用 端口)。
顯示socket統(tǒng)計(jì)信息
使用-s(summary)查看整體統(tǒng)計(jì)信息。
$?ss?-sTCP:???68?(estab?58,?closed?1,?orphaned?0,?synrecv?0,?timewait?1/0),?ports?0Transport?Total?????IP????????IPv6 *??????2907??????-?????????-???????? RAW??????1?????????0?????????1???????? UDP??????13????????8?????????5???????? TCP??????67????????47????????20??????? INET??????81????????55????????26??????? FRAG??????0?????????0?????????0????????從統(tǒng)計(jì)結(jié)果中可以看到,共有67個(gè)TCP連接。
總結(jié)
本文介紹了ss命令一些實(shí)用的用法,為后面介紹網(wǎng)絡(luò)編程相關(guān)內(nèi)容打下基礎(chǔ),其他諸如指定ipv4或協(xié)議族等更多ss用法可查看幫助手冊(cè)。
本文相關(guān)閱讀:
不可不知的網(wǎng)絡(luò)命令-netstat
網(wǎng)絡(luò)工具中的“瑞士軍刀”了解一下?
linux下的文本查找技巧,你掌握了嗎?
Linux中不可錯(cuò)過的信息寶庫
?
關(guān)注公眾號(hào)【編程珠璣】,獲取更多Linux/C/C++/Python/Go/算法/工具等原創(chuàng)技術(shù)文章。后臺(tái)免費(fèi)獲取經(jīng)典電子書和視頻資源
更多內(nèi)容可閱讀原文查看。
總結(jié)
以上是生活随笔為你收集整理的netstat的替代者-ss命令实例详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转载 Fluent中的压力分类
- 下一篇: 三极管电阻作用