1. netstat命令

netstat命令用来打印Linux网络系统的状态信息。

语法:

  1. # netstat -h
  2. usage: netstat [-veenNcCF] [<Af>] -r netstat {-V|--version|-h|--help}
  3. netstat [-vnNcaeol] [<Socket> ...]
  4. netstat { [-veenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s } [delay]
  5. -r, --route display routing table
  6. -I, --interfaces=[<Iface>] display interface table for <Iface>
  7. -i, --interfaces display interface table
  8. -g, --groups display multicast group memberships
  9. -s, --statistics display networking statistics (like SNMP)
  10. -M, --masquerade display masqueraded connections
  11. -v, --verbose be verbose
  12. -n, --numeric don't resolve names
  13. --numeric-hosts don't resolve host names
  14. --numeric-ports don't resolve port names
  15. --numeric-users don't resolve user names
  16. -N, --symbolic resolve hardware names
  17. -e, --extend display other/more information
  18. -p, --programs display PID/Program name for sockets
  19. -c, --continuous continuous listing
  20. -l, --listening display listening server sockets
  21. -a, --all, --listening display all sockets (default: connected)
  22. -o, --timers display timers
  23. -F, --fib display Forwarding Information Base (default)
  24. -C, --cache display routing cache instead of FIB
  25. -T, --notrim stop trimming long addresses
  26. -Z, --context display SELinux security context for sockets
  27. <Iface>: Name of interface to monitor/list.
  28. <Socket>={-t|--tcp} {-u|--udp} {-S|--sctp} {-w|--raw} {-x|--unix} --ax25 --ipx --netrom
  29. <AF>=Use '-A <af>' or '--<af>'; default: inet
  30. List of possible address families (which support routing):
  31. inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
  32. netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
  33. x25 (CCITT X.25)

具体参数:

  1. -n或--numeric:直接使用ip地址,而不通过域名服务器;
  2. -p或--programs:显示正在使用Socket的程序识别码和程序名称
  3. -t或--tcp:显示TCP传输协议的连线状态
  4. -u或--udp:显示UDP传输协议的连线状况
  5. -a或--all:显示所有连线中的Socket;
  6. -s或--statistics:显示网络工作信息统计表

1.1 常用命令

  • 列出所有端口(包括监听和未监听的)
  1. # 列出所有端口
  2. # netstat -a
  3. #列出所有TCP端口
  4. # netstat -at
  5. #列出所有UDP端口
  6. # netstat -au
  • 列出所有处于监听状态的Sockets
  1. #只显示监听端口
  2. # netstat -l
  3. #只列出所有监听TCP端口
  4. # netstat -lt
  5. #只列出所有监听UDP端口
  6. # netstat -lu
  7. #只列出所有监听UNIX端口
  8. # netstat -lx
  • 在netstat输出中显示PID和进程名称
  1. # netstat -pt
  • 在netstat输出中不显示主机,端口和用户名(host,port or user)
  1. # netstat -an
  • 显示核心路由信息
  1. # netstat -r

使用netstat -rn 显示数字格式,不显示主机名称

1.2 经常使用的命令

  • 检测当前匹配的端口的所有套接字并显示进程号
  1. # netstat -nap |grep 具体端口号
  • 检测服务器各种连接状态数量
  1. # netstat -na | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

2. ss命令

ss命令用于查看本机的端口连接状态

语法:

  1. $ ss -h
  2. Usage: ss [ OPTIONS ]
  3. ss [ OPTIONS ] [ FILTER ]
  4. -h, --help this message
  5. -V, --version output version information
  6. -n, --numeric don't resolve service names
  7. -r, --resolve resolve host names
  8. -a, --all display all sockets
  9. -l, --listening display listening sockets
  10. -o, --options show timer information
  11. -e, --extended show detailed socket information
  12. -m, --memory show socket memory usage
  13. -p, --processes show process using socket
  14. -i, --info show internal TCP information
  15. -s, --summary show socket usage summary
  16. -4, --ipv4 display only IP version 4 sockets
  17. -6, --ipv6 display only IP version 6 sockets
  18. -0, --packet display PACKET sockets
  19. -t, --tcp display only TCP sockets
  20. -u, --udp display only UDP sockets
  21. -d, --dccp display only DCCP sockets
  22. -w, --raw display only RAW sockets
  23. -x, --unix display only Unix domain sockets
  24. -f, --family=FAMILY display sockets of type FAMILY
  25. -A, --query=QUERY
  26. QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
  27. -F, --filter=FILE read filter information from FILE
  28. FILTER := [ state TCP-STATE ] [ EXPRESSION ]

具体的参数:

  1. 参数 作用
  2. -a 显示所有的套接字
  3. -l 显示所有连接状态的套接字
  4. -e 显示详细的套接字信息
  5. -m 显示套接字的内存使用情况
  6. -p 显示套接字的进程信息
  7. -4 显示ipv4的套接字信息
  8. -6 显示ipv6的套接字信息
  9. -t 仅显示tcp的套接字信息
  10. -u 仅显示udp的套接字信息
  11. -n 不解析主机名(提升速度)
  12. -r, --resolve IP 解释为域名,把端口号解释为协议名称
  13. -x, --unix 显示 unix domain sockets,与 -f 选项相同
  14. -s 查看概述

2.1 常用命令

  • 查看主机的监听端口
  1. $ ss -tnl
  • 通过 -r 选项解析 IP 和端口号
  1. $ ss -tlr
  • 使用 -p 选项查看监听端口的程序名称
  1. $ ss -tlp
  2. Recv-Q Send-Q Local Address:Port Peer Address:Port
  3. 0 0 127.0.0.1:2208 *:* users:(("hpiod",2841,0))
  4. 0 0 *:9090 *:* users:(("redis-server",17961,5))
  5. 0 0 *:hello-port *:* users:(("rpc.statd",2590,7))
  6. 0 0 *:sunrpc *:* users:(("portmap",2536,4))
  7. 0 0 *:ssh *:* users:(("sshd",4372,4))
  8. 0 0 *:telnet *:* users:(("xinetd",19846,5))
  9. 0 0 127.0.0.1:ipp *:* users:(("cupsd",2869,4))
  10. 0 0 *:postgres *:* users:(("python",26279,3),("python",26282,3),("python",26282,5))
  • 查看建立的 TCP 连接
    -a —all 对 TCP 协议来说,既包含监听的端口,也包含建立的连接
  1. $ ss -tna
  • 匹配远程地址和端口号
  1. # ss dst 192.168.111.3
  2. # ss dst 192.168.111.3:48926
  • 匹配本地地址和端口号
  1. # ss src 192.168.119.103:80
  • 多条件匹配

(注意下面命令中的转义符和空格,都是必须的。如果不用转义符,可以使用单引号)

显示established状态的源端口是8356或者目标端口是10021,且目的地址是192.168.59.37所有 TCP 套接字:

  1. # ss state established \( sport = :8356 or dport = :10021 \) dst 192.168.59.37
  2. # ss state established '( sport = :8356 or dport = :10021 )' dst 192.168.59.37

2.2 经常使用的命令

  • 检测当前匹配的端口的所有套接字并显示进程号
  1. # ss -nap|grep 端口号