zoukankan      html  css  js  c++  java
  • Linux系统使用ss命令查看端口状态


    Linux系统使用ss命令查看端口状态

    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 发送同步信号
    syn-recv 接收同步信号
    established 建立连接
    fin-wait-{1,2} 等待 完成 2
    time-wait 等待时间 2
    closed 关闭 111
    Close-wait 等待关闭 2
    Last-ack 最后确认
    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




  • 相关阅读:
    一起学Windows phone 7开发(四. DeepZoom)
    设计模式Observer(观察者模式)
    今天挺开心
    设计模式Singleton(单例模式)
    PointFromScreen和PointFromScreen的用法和区别
    设计模式Adapter(适配器模式)
    设计模式Abstract Factory(抽象工厂)
    C++多线程信号量,互斥
    linux bash 几个命令
    大小端存储
  • 原文地址:https://www.cnblogs.com/sztom/p/10810508.html
Copyright © 2011-2022 走看看