日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

netstat的替代者-ss命令实例详解

發布時間:2024/3/7 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 netstat的替代者-ss命令实例详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來源:公眾號【編程珠璣】

作者:守望先生

原文地址:https://www.yanbinghu.com/2019/06/30/19183.html

前言

之前在介紹netstat的時候說過,netstat是一個非常實用的socket查看命令。但是有人留言它已經被ss(Socket Statistics)替代了,那么這個所謂替代netstat的命令,到底怎么用呢?為什么它能替代netstat?

為什么使用ss

值得注意的是,幾乎所有的linux系統都默認支持netstat命令,而并不一定支持ss,從這一點來說,netstat通常還是不二選擇。但是不得不承認的是,ss命令更加快捷高效。

netstat從proc文件系統(可參考linux中不可錯過的信息寶庫)獲取所需要的信息,而ss利用netlink機制,與內核通信,通過TCP 協議棧中 tcp_diag 模塊獲取第一手的內核信息。當然這些都不是我們關注的重點,我們來看看ss命令到底如何使用。

查看TCP/UDP連接

使用-t(TCP)參數查看TCP連接,而使用-u(UDP)參數查看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顯示了當前連接的狀態,例如結果的第一行是ESTABLISHED狀態,Local Address:port代表本地連接的ip和端口號。另外使用-n參數顯示數字形式的ip和端口

查看socket進程信息

查看到某個連接后,怎么知道是哪個進程的連接呢?使用-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))

拖動滾動條到最后可以看到,-p參數顯示了這條連接的進程信息,例如,對于第一條結果,可以看到,該進程是chrome,進程id為2578,并且這條連接的文件描述符為383。

users:(("chrome",pid=2578,fd=383))"chrome",pid=2578,fd=383))

查看處于特定狀態的socket

我們知道,對于TCP連接來講,在不同的階段它的狀態不同,常見狀態有

這里還有很多其他狀態,我們會留到介紹TCP的時候展開。

如何查看處于特定狀態的連接呢?例如,要查看處于LISTENING狀態的連接:

$?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選項即可查看。當然對于LISTENING狀態,也可以使用-l參數。

除此之外,還有以下參數,用于查看某類狀態,例如:

查看TCP相關定時器信息

我們知道在TCP中,有很多定時器,和netstat一樣,可以使用-o參數顯示定時器相關信息:

$?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定時器剩余時間:

timer:(keepalive,9.956ms,0):(keepalive,9.956ms,0)

查看socket詳細信息

如果想要查看連接更加詳細信息呢?比如收到多少數據?上一個ACK是什么時候?mss是多大?擁塞窗口大小是多少?這些信息在分析理解TCP的時候非常有幫助,而查看這些信息只需要使用-i(information)參數即可:

$?ss?-ti??#(內容很長,省略了很多信息,可執行嘗試)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

由于顯示的內容比較多,這里就不貼出來了,可自行嘗試,里面展示了TCP很多關鍵信息。

查看socket內存使用情況

使用-m(memory)參數可以查看連接使用內存信息:

$?ss?-tm??#只顯示內存部分信息skmem:(r0,rb374400,t0,tb46080,f0,w0,o0,bl0)

由于信息較多,這里只顯示內存部分,括號內從左到右分別代表:

根據IP或端口過濾socket信息

你可以使用grep命令(可參考《Linux下的文本查找技巧》)來過濾出你需要的信息,但是ss本身提供一些參數用來過濾信息。例如,查看本地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根據遠端ip來過濾信息。

同樣還可以根據協議類型(端口)來過濾,例如查看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,指定本地協議(應用 端口),sport指定遠端協議(應用 端口)。

顯示socket統計信息

使用-s(summary)查看整體統計信息。

$?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????????

從統計結果中可以看到,共有67個TCP連接。

總結

本文介紹了ss命令一些實用的用法,為后面介紹網絡編程相關內容打下基礎,其他諸如指定ipv4或協議族等更多ss用法可查看幫助手冊。

本文相關閱讀:

不可不知的網絡命令-netstat

網絡工具中的“瑞士軍刀”了解一下?

linux下的文本查找技巧,你掌握了嗎?

Linux中不可錯過的信息寶庫

?

關注公眾號【編程珠璣】,獲取更多Linux/C/C++/Python/Go/算法/工具等原創技術文章。后臺免費獲取經典電子書和視頻資源

更多內容可閱讀原文查看。

總結

以上是生活随笔為你收集整理的netstat的替代者-ss命令实例详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。