1. 程式人生 > >Linux系統使用ss命令查看端口狀態

Linux系統使用ss命令查看端口狀態

cnblogs 端口 不包含 ssi 系統 查看 buck index.php con


Linux系統使用ss命令查看端口狀態

目錄
1.可用工具
2.ss幫助
2.1 選項分類說明
2.2 過濾選項family
2.3 過濾選項state
2.4 狀態之間的關系
3.ss的使用
3.1 使用示例
3.2 過濾
3.2.1 狀態過濾
3.2.2 通過family過濾
3.2.3 使用地址和端口過濾
3.3 常用組合

1.可用工具

  • 逐漸淘汰的 netstat 命令在 net-tools 軟件包裏(多年沒有維護;效率很低)
  • 逐漸成為主流的 ss 命令在 iproute2 軟件包裏(對常用網絡命令做了改進和優化)

ArchLinux已棄用"net-tools",轉而使用"iproute2"
棄用命令 > 替換命令
arp > ip n
ifconfig > ip a, ip link, ip -s
netstat > ss, ip route, ip -s link
route > ip route
詳見:https://www.cnblogs.com/sztom/articles/10764994.html
不推薦使用的Linux網絡命令及其替代品

2.ss幫助

$ ss -h
-h, --help this message 幫助信息
-V, --version output version information 輸出版本信息

-n, --numeric don‘t resolve service names 不解析服務名稱
-r, --resolve resolve host names 解析主機名
-a, --all display all sockets 顯示所有套接字
-l, --listening display listening sockets 顯示偵聽套接字
-o, --options show timer information 顯示計時器信息
-e, --extended show detailed socket information 顯示詳細的套接字信息
-m, --memory show socket memory usage 顯示套接字內存使用量
-p, --processes show process using socket 顯示使用socket的進程信息
-i, --info show internal TCP information 顯示內部TCP信息
--tipcinfo show internal tipc socket information 顯示內部tipc套接字信息
-s, --summary show socket usage summary show socket使用摘要
--tos show tos and priority information 顯示tos和優先級信息
-b, --bpf show bpf filter socket information 顯示bpf過濾器套接字信息
-E, --events continually display sockets as they are destroyed 在它們被摧毀時不斷顯示套接字
-Z, --context display process SELinux security contexts 顯示進程SELinux安全上下文
-z, --contexts display process and socket SELinux security contexts 顯示進程和套接字SELinux安全上下文
-N, --net switch to the specified network namespace name 切換到指定的網絡命名空間名稱

-4, --ipv4 display only IP version 4 sockets 只顯示ipv4的套接字;
-6, --ipv6 display only IP version 6 sockets 只顯示ipv6的套接字;
-0, --packet display PACKET sockets 顯示PACKET套接字
-t, --tcp display only TCP sockets 僅顯示TCP套接字
-S, --sctp display only SCTP sockets 僅顯示SCTP套接字
-u, --udp display only UDP sockets 僅顯示UDP套接字
-d, --dccp display only DCCP sockets 僅顯示DCCP套接字
-w, --raw display only RAW sockets 僅顯示RAW套接字
-x, --unix display only Unix domain sockets 僅顯示Unix域套接字
--tipc display only TIPC sockets 僅顯示TIPC套接字
--vsock display only vsock sockets 僅顯示vsock套接字
-f, --family=FAMILY display sockets of type FAMILY 顯示FAMILY類型的套接字
FAMILY := {inet|inet6|link|unix|netlink|vsock|tipc|help}

-K, --kill forcibly close sockets, display what was closed 強行關閉套接字,顯示已關閉的內容
-H, --no-header Suppress header line 抑制標題行

-A, --query=QUERY, --socket=QUERY QUERY := {all|inet|tcp|udp|raw|unix|unix_dgram|unix_stream|unix_seqpacket|packet|netlink|vsock_tipc}[,QUERY]

-D, --diag=FILE Dump raw information about TCP sockets to FILE 將有關TCP套接字的原始信息轉儲到FILE
-F, --filter=FILE read filter information from FILE 從FILE中讀取過濾器信息
FILTER := [ state STATE-FILTER ] [ EXPRESSION ]
STATE-FILTER := {all|connected|synchronized|bucket|big|TCP-STATES}
TCP-STATES := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|closed|close-wait|last-ack|listening|closing}
connected := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
synchronized := {established|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
bucket := {syn-recv|time-wait}
big := {established|syn-sent|fin-wait-{1,2}|closed|close-wait|last-ack|listening|closing}

2.1 選項分類說明

這2個選項(-n, -r)不能同時使用
-n, --numeric don‘t resolve service names 不解析服務名稱
-r, --resolve resolve host names 解析主機名

統計摘要
-s, --summary show socket usage summary show socket使用摘要

顯示全部
-a, --all display all sockets 顯示所有套接字

僅顯示部分
-l, --listening display listening sockets 顯示偵聽套接字
-4, --ipv4 display only IP version 4 sockets 只顯示ipv4的套接字;
-6, --ipv6 display only IP version 6 sockets 只顯示ipv6的套接字;
-0, --packet display PACKET sockets 顯示PACKET套接字
-t, --tcp display only TCP sockets 僅顯示TCP套接字
-S, --sctp display only SCTP sockets 僅顯示SCTP套接字
-u, --udp display only UDP sockets 僅顯示UDP套接字
-d, --dccp display only DCCP sockets 僅顯示DCCP套接字
-w, --raw display only RAW sockets 僅顯示RAW套接字
-x, --unix display only Unix domain sockets 僅顯示Unix域套接字

其他更多信息
-p, --processes show process using socket 顯示使用socket的進程信息
-o, --options show timer information 顯示計時器信息
-e, --extended show detailed socket information 顯示詳細的套接字信息
-m, --memory show socket memory usage 顯示套接字內存使用量
-i, --info show internal TCP information 顯示內部TCP信息

2.2 過濾選項 family

-f, --family=FAMILY display sockets of type FAMILY 顯示FAMILY類型的套接字
FAMILY := {inet|inet6|link|unix|netlink|vsock|tipc|help}

2.3 過濾選項 state

state : {all|connected|synchronized|bucket|big|TCP-STATES}
TCP-STATES := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|closed|close-wait|last-ack|listening|closing}
connected := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
synchronized := {established|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
bucket := {syn-recv|time-wait}
big := {established|syn-sent|fin-wait-{1,2}|closed|close-wait|last-ack|listening|closing}

2.4 狀態之間的關系

詳細內容請看原文:https://blog.51cto.com/net881004/2164020
1:客戶端和服務器建立連接的揮手過程原理圖
技術分享圖片

圖2:TCP狀態轉移圖
技術分享圖片

圖3:關閉部分的狀態轉移圖
技術分享圖片

3. ss的使用

如果不添加選項 ss 命令默認輸出所有建立的連接(不包含監聽的端口),包括 tcp, udp, and unix socket 三種類型的連接:
$ ss
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.31.177:38885 60.227.167.98:24932
tcp ESTAB 0 0 192.168.31.177:35846 89.42.31.211:polestar
tcp CLOSE-WAIT 32 0 127.0.0.1:59638 127.0.0.1:socks
tcp CLOSE-WAIT 1 0 127.0.0.1:59612 127.0.0.1:socks
tcp FIN-WAIT-2 0 0 127.0.0.1:socks 127.0.0.1:59606
tcp ESTAB 0 0 192.168.31.177:34970 89.42.31.211:polestar

3.1 使用示例

顯示每個協議的摘要統計信息。
$ ss -s
Total: 916
TCP: 75 (estab 15, closed 26, orphaned 4, timewait 18)
Transport Total IP IPv6
RAW 1 1 0
UDP 14 13 1
TCP 49 48 1
INET 64 62 2
FRAG 0 0 0

查看所有套接字: ss -a
$ ss |wc -l
901
$ ss -a |wc -l //898
State 1
CLOSE-WAIT 2
ESTAB 749
FIN-WAIT-2 2
LAST-ACK 1
LISTEN 32
TIME-WAIT 2
UNCONN 110
合計 結果 898

顯示偵聽套接字,列出所有打開的網絡連接端口, ss -l或 --listening
$ ss -l |wc -l //147

顯示數字地址,而不是嘗試確定符號主機,端口或用戶名(跳過DNS轉換)ss -n或--numeric
$ ss -n

顯示符號主機,端口或用戶名,而不是數字表示。Netstat默認執行此操作。ss -r或--resolve
$ ss -r

顯示進程ID(PID)和每個套接字所屬程序的名稱。
$ ss -p

包括與網絡計時器相關的信息。ss -o或--options
$ ss -o

顯示更高級別的細節。ss -e或--extended
$ ss -e
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.31.177:34970 89.42.31.211:polestar uid:1001 ino:3316553 sk:750 <->
tcp ESTAB 0 0 127.0.0.1:59570 127.0.0.1:socks timer:(keepalive,38sec,0) uid:1001 ino:3335889 sk:76a <->

3.2 過濾

3.2.1 狀態過濾

$ ss state syn-recv
有如下選項可用,後面的數字是本機當前按狀態查詢的行數 |wc -l

syn-sent 同步發 1
syn-recv 同步收 1
established 建立 750
fin-wait-{1,2} 等待 完成 2
time-wait 等待時間 2
closed 關閉 111
Close-wait 等待關閉 2
Last-ack 最後-ACK 1
listening 聽 32
closing 關閉 1

all : 所有以上10種狀態
connected : 除了 listening and closed 的剩所有狀態(8種狀態)
synchronized :所有 connected 除了 syn-sent (7種狀態)
bucket : 顯示狀態為maintained as minisockets,如:time-wait和syn-recv.(2種狀態)
big : 和bucket相反.(8種狀態)


技術分享圖片


$ ss state all |wc -l
1036
$ ss state connected |wc -l
889
$ ss state synchronized |wc -l
904
$ ss state bucket |wc -l
18
$ ss state big |wc -l
1023
$ ss state listening |wc -l
34

3.2.2 通過family過濾

{inet|inet6|link|unix|netlink|vsock|tipc|help}
$ ss -f inet
$ ss -f inet |wc -l
33
$ ss -f link |wc -l
6
$ ss -f unix |wc -l
851
$ ss -f netlink |wc -l
62
$ ss -f vsock |wc -l

3.2.3 使用地址和端口過濾

可以通過 dst/src/dport/sprot 語法來過濾連接的來源和目標,來源端口和目標端口。

匹配本地地址和端口號
$ ss src 192.168.31.177
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.31.177:60412 89.42.31.211:polestar
tcp ESTAB 0 0 192.168.31.177:51972 58.250.136.56:http-alt
tcp LAST-ACK 0 1 192.168.31.177:57926 220.194.95.148:https

匹配遠程地址和端口號
$ ss dst 89.42.31.211
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.31.177:60476 89.42.31.211:polestar
tcp ESTAB 0 0 192.168.31.177:60452 89.42.31.211:polestar

$ ss dst 192.168.31.113:http
$ ss dst 192.168.31.113:80

端口過濾
$ ss dport OP PORT
$ ss sport OP PORT
操作符OP 可以代表以下任意一個:
<= le 小於或等於某個端口號
>= ge 大於或等於某個端口號
== eq 等於某個端口號
!= ne 不等於某個端口號
> gt 大於某個端口號
< lt 小於某個端口號
$ ss -tunl sport lt 50
$ ss -tunl sport \< 50

3.3 常用組合

查看主機監聽的端口,本地IP地址及tcp數字端口號(t:tcp; n:數字顯示;l監聽)
$ ss -tnl

顯示名稱,比如上面的127.0.0.1:53顯示為tigger:domain; 端口22顯示為ssh等。
$ ss -tlr

$ ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 127.0.0.1:1080 0.0.0.0:*
LISTEN 0 5 0.0.0.0:8999 0.0.0.0:*
LISTEN 0 5 [::]:8999 [::]:*
$ ss -trl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 localhost:socks 0.0.0.0:*
LISTEN 0 5 0.0.0.0:bctp 0.0.0.0:*
LISTEN 0 5 [::]:bctp [::]:*

加上p,顯示pid
$ ss -tlrp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 localhost:socks 0.0.0.0:* users:(("sslocal",pid=1123,fd=3))
LISTEN 0 5 0.0.0.0:bctp 0.0.0.0:* users:(("qbittorrent",pid=618,fd=29))
LISTEN 0 5 [::]:bctp [::]:* users:(("qbittorrent",pid=618,fd=28))

所有的tcp連接
ss -tan
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 127.0.0.1:1080 0.0.0.0:*
LISTEN 0 5 0.0.0.0:8999 0.0.0.0:*
TIME-WAIT 0 0 127.0.0.1:1080 127.0.0.1:32874
TIME-WAIT 0 0 127.0.0.1:1080 127.0.0.1:32890
ESTAB 0 0 127.0.0.1:1080 127.0.0.1:32910
ESTAB 0 0 192.168.31.177:37342 89.42.31.211:1060
ESTAB 0 0 127.0.0.1:32898 127.0.0.1:1080
CLOSE-WAIT 0 0 192.168.31.177:57108 58.250.136.56:8080
ESTAB 0 0 127.0.0.1:1080 127.0.0.1:32894
ESTAB 0 0 192.168.31.177:37330 89.42.31.211:1060
ESTAB 0 0 127.0.0.1:1080 127.0.0.1:32902
ESTAB 0 0 127.0.0.1:32894 127.0.0.1:1080
ESTAB 0 0 192.168.31.177:37334 89.42.31.211:1060
ESTAB 0 0 127.0.0.1:32906 127.0.0.1:1080
ESTAB 0 0 127.0.0.1:32910 127.0.0.1:1080
ESTAB 0 0 127.0.0.1:1080 127.0.0.1:32898
ESTAB 0 0 192.168.31.177:49443 60.227.167.98:24932
ESTAB 0 0 192.168.31.177:37346 89.42.31.211:1060
ESTAB 0 0 127.0.0.1:1080 127.0.0.1:32906
ESTAB 0 0 192.168.31.177:37338 89.42.31.211:1060
ESTAB 0 0 127.0.0.1:32902 127.0.0.1:1080
LISTEN 0 5 [::]:8999 [::]:*

查看所有tcp,udp,數字顯示,顯示pid
$ ss -tuanp

查看所有tcp,udp,名稱顯示,顯示pid
$ ss -tuarp






其他命令:
‘nc‘ means ‘netcat‘, not ‘netconsole‘.
Install gnu-netcat and try again.
https://wiki.archlinux.org/index.php/Netconsole
https://wiki.archlinux.org/index.php/Network_tools#Netcat
https://en.wikipedia.org/wiki/Netcat
https://www.archlinux.org/packages/?name=socat




Linux系統使用ss命令查看端口狀態