linux的netstat命令和ss命令

1. 网络状态

State 状态
LISTENING 监听中,服务端需要打开一个socket进行监听,侦听来自远方TCP端口的连接请求
ESTABLISHED 已连接,代表一个打开的连接,双方可以进行或已经在数据交互了
SYN_SENT 客户端通过应用程序调用connect发送一个SYN以请求建立一个连接。在收到ACK后,状态转为ESTABLIHSED
CLOSE_WAIT 被动关闭端接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序)
TIME_WAIT  主动关闭端接收到FIN后,TCP就发送ACK包,并进入TIME-WAIT状态
LAST_ACK 等待对方回应一个ACK(这是准备关闭连接的一个步骤,意味着这个连接正在关闭)

2. netstat 命令的用法格式和选项如下:

usage: netstat [-vWeenNcCF] [] -r         netstat {-V|--version|-h|--help}
       netstat [-vWnNcaeol] [ ...]
       netstat { [-vWeenNac] -I[] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]

        -r, --route              显示路由表
        -I, --interfaces= 显示的接口表
        -i, --interfaces         显示网络界面信息表单
        -g, --groups             显示多重广播功能群组组员名单
        -s, --statistics         显示网络工作信息统计表
        -M, --masquerade         显示伪装的网络连线

        -v, --verbose            显示指令执行过程
        -V, --version            显示版本信息
        -W, --wide               不截断IP地址
        -w, --raw                显示RAW传输协议的连线状况
        -n, --numeric            不解析名称,以数字形式显示地址和端口号
        --numeric-hosts          don't resolve host names
        --numeric-ports          don't resolve port names
        --numeric-users          don't resolve user names
        -N, --symbolic           显示网络硬件外围设备的符号连接名称
        -e, --extend             显示网络其他相关信息
        -p, --programs           显示正在使用Socket的程序识别码和程序名称
        -o, --timers             显示计时器(显示定时器)
        -c, --continuous         持续列出网络状态

        -l, --listening          显示监控中的服务器的Socket
        -a, --all                示所有连线中的Socket
        -F, --fib                display Forwarding Information Base (default)
        -C, --cache              显示路由缓存而不是FIB
        -Z, --context            显示套接字的SELinux安全上下文

3. 功能使用例子

netstat -anop | grep 端口号

显示所有连接和监听端口并显示每个连接相关的进程ID
netstat -ano
netstat -ano: 显示所有连接和监听端口,以数字形式显示地址和端口号,并显示与每个连接相关的进程 ID

显示所有已建立的连接
netstat -ano | grep ESTABLISHED

显示每个进程的连接数
netstat -ano | grep ESTABLISHED | awk '{print $5}' | sort | uniq -c | sort -nr | head -10

grep ESTABLISHED :过滤出已建立的连接。
awk '{print $5}' :提取出第5列进程ID。
sort | uniq -c | sort -nr :排序统计每个进程ID的连接数量,并按照连接数量从高到低排序;

sort:排序。
uniq -c:用于在文本中查找并计数唯一行,有点像count - group by
sort -nr:用于对文本进行排序。
-n 选项表示按照数值大小排序,而不是按照字典序排序;
-r 选项表示按照逆序排序,即从大到小排序。
head : 显示前面的若干行。

显示每个IP地址的连接数
netstat -ano | awk '{print $3}' | cut -d: -f1 | sort | uniq -c | sort -rn


显示每种类型TCP/UDP的连接数
netstat -ano | awk '{print $1}' | sort | uniq -c

显示指定进程ID网络状态的数量// TCP 网络状态的数量
netstat -ano |grep tcp | awk '{print $6}' | sort | uniq -c


显示端口占用数量
netstat -ano | grep -c :   注意冒号和前面的命令是一个整体
或者
netstat -a -n | grep -c "TCP"
netstat -a -n | grep -c "UDP"
netstat -a -n | grep -w "TCP" | wc -l
netstat -ano | awk 'NR>2{print $1}' | sort | uniq -c | awk '{print $2 "占用了"$1"个端口"}'
上面的都有重复
netstat -ano | awk '{print $3}' | cut -d: -f1 | sort | uniq -c | sort -rn

"grep -c :" : grep 命令用于在文件或输出中查找与指定模式匹配的行,并将匹配的行打印出来。

    其中 -c 选项用于统计匹配到的行数
    ":" : 表示匹配冒号字符。 因此,grep -c : 命令会统计输出或文件中包含冒号字符的行数。


显示指定进程ID指定协议的数量
netstat -ano | grep 进程ID | grep UDP | grep -v -E ':5353|::' 
"-v":排除相关的行。grep -v UDP排除UDP相关的行。
"-E 'keyword1|keyword2|keyword3'" : 匹配多个关键词,keyword1、keyword2和keyword3是关键词,用|分隔。
"wc -l" : 用于统计文件的行数
    netstat -ano | grep 6712 | grep UDP | grep -v -E ':5353|::' | wc -l

4. ss命令用于显示socket状态. 他可以显示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix domain sockets等等统计

SS命令可以提供如下信息:

  • 所有的TCP sockets、UDP sockets、ssh/ftp/ttp/https持久连接、Xserver的本地进程

  • 使用state(例如:connected, synchronized, SYN-RECV, SYN-SENT,TIME-WAIT)、地址、端口过滤

  • 所有的state FIN-WAIT-1 tcpsocket连接以及更多

ss 命令格式

Usage: ss [ OPTIONS ]
       ss [ OPTIONS ] [ FILTER ]
        -h, --help 显示帮助信息
        -V, --version 输出版本信息
        -n, --numeric 不解析服务名称
        -r, --resolve 解析主机名
        -a, --all 显示所有套接字
        -l, --listening 显示监听套接字
        -o, --options 显示定时器信息
        -e, --extended 显示详细的套接字信息
        -m, --memory 显示套接字内存使用情况
        -p, --processes 显示使用套接字的进程
        -i, --info 显示内部TCP信息
        -s, --summary 显示套接字使用概况
        -b, --bpf 显示bpf过滤套接字信息
        -E, --events 持续显示被销毁的套接字
        -Z, --context 显示进程的SELinux安全上下文
        -z, --contexts 显示进程和套接字的SELinux安全上下文
        -N, --net 切换到指定的网络命名空间名称
        -4, --ipv4 仅显示IP版本4套接字
        -6, --ipv6 仅显示IP版本6套接字
        -0, --packet 显示PACKET套接字
        -t, --tcp 仅显示TCP套接字
        -S, --sctp 仅显示SCTP套接字
        -u, --udp 仅显示UDP套接字
        -d, --dccp 仅显示DCCP套接字
        -w, --raw 仅显示RAW套接字
        -x, --unix 仅显示Unix域套接字
            --vsock 仅显示vsock套接字
        -f, --family=FAMILY 显示指定类型的套接字,FAMILY类型包括:
                inet、inet6、link、unix、netlink、vsock、help。
        -K, --kill 强制关闭套接字,并显示被关闭的套接字。
        -H, --no-header 禁止显示标题行。
        -A, --query=QUERY, --socket=QUERY 查询指定类型的套接字,QUERY类型包括:
            all、inet、tcp、udp、raw、unix、unix_dgram、unix_stream、unix_seqpacket、                        
            packet、netlink、vsock_stream、vsock_dgram等。
        -D, --diag=FILE 将TCP套接字的原始信息导出到文件。
        -F, --filter=FILE 从文件中读取过滤信息。

5. 使用例子

        


ss -l 显示本地打开的所有端口
ss -pl 显示每个进程具体打开的socket
ss -t -a 显示所有tcp socket
ss -u -a 显示所有的UDP Socekt
ss -o state established '( dport = :smtp or sport = :smtp )' 显示所有已建立的SMTP连接
ss -o state established '( dport = :http or sport = :http )' 显示所有已建立的HTTP连接
ss -x src /tmp/.X11-unix/* 找出所有连接X服务器的进程
ss -s 列出当前socket详细信息:
分别使用netstat 和ss 统计服务器并发连接数
    1. time netstat -ant | grep ESTABLISHED | wc -l
    2. time ss -o state ESTABLISHED | wc -l

结果如下图linux的netstat命令和ss命令_第1张图片

你可能感兴趣的:(linux,服务器)