1. netstat命令
netstat命令用来打印Linux网络系统的状态信息。
语法:
# netstat -husage: netstat [-veenNcCF] [<Af>] -r netstat {-V|--version|-h|--help}netstat [-vnNcaeol] [<Socket> ...]netstat { [-veenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s } [delay]-r, --route display routing table-I, --interfaces=[<Iface>] display interface table for <Iface>-i, --interfaces display interface table-g, --groups display multicast group memberships-s, --statistics display networking statistics (like SNMP)-M, --masquerade display masqueraded connections-v, --verbose be verbose-n, --numeric don't resolve names--numeric-hosts don't resolve host names--numeric-ports don't resolve port names--numeric-users don't resolve user names-N, --symbolic resolve hardware names-e, --extend display other/more information-p, --programs display PID/Program name for sockets-c, --continuous continuous listing-l, --listening display listening server sockets-a, --all, --listening display all sockets (default: connected)-o, --timers display timers-F, --fib display Forwarding Information Base (default)-C, --cache display routing cache instead of FIB-T, --notrim stop trimming long addresses-Z, --context display SELinux security context for sockets<Iface>: Name of interface to monitor/list.<Socket>={-t|--tcp} {-u|--udp} {-S|--sctp} {-w|--raw} {-x|--unix} --ax25 --ipx --netrom<AF>=Use '-A <af>' or '--<af>'; default: inetList of possible address families (which support routing):inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)x25 (CCITT X.25)
具体参数:
-n或--numeric:直接使用ip地址,而不通过域名服务器;-p或--programs:显示正在使用Socket的程序识别码和程序名称-t或--tcp:显示TCP传输协议的连线状态-u或--udp:显示UDP传输协议的连线状况-a或--all:显示所有连线中的Socket;-s或--statistics:显示网络工作信息统计表
1.1 常用命令
- 列出所有端口(包括监听和未监听的)
# 列出所有端口# netstat -a#列出所有TCP端口# netstat -at#列出所有UDP端口# netstat -au
- 列出所有处于监听状态的Sockets
#只显示监听端口# netstat -l#只列出所有监听TCP端口# netstat -lt#只列出所有监听UDP端口# netstat -lu#只列出所有监听UNIX端口# netstat -lx
- 在netstat输出中显示PID和进程名称
# netstat -pt
- 在netstat输出中不显示主机,端口和用户名(host,port or user)
# netstat -an
- 显示核心路由信息
# netstat -r
使用netstat -rn 显示数字格式,不显示主机名称
1.2 经常使用的命令
- 检测当前匹配的端口的所有套接字并显示进程号
# netstat -nap |grep 具体端口号
- 检测服务器各种连接状态数量
# netstat -na | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
2. ss命令
ss命令用于查看本机的端口连接状态
语法:
$ ss -hUsage: ss [ OPTIONS ]ss [ OPTIONS ] [ FILTER ]-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-i, --info show internal TCP information-s, --summary show socket usage summary-4, --ipv4 display only IP version 4 sockets-6, --ipv6 display only IP version 6 sockets-0, --packet display PACKET sockets-t, --tcp display only TCP sockets-u, --udp display only UDP sockets-d, --dccp display only DCCP sockets-w, --raw display only RAW sockets-x, --unix display only Unix domain sockets-f, --family=FAMILY display sockets of type FAMILY-A, --query=QUERYQUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]-F, --filter=FILE read filter information from FILEFILTER := [ state TCP-STATE ] [ EXPRESSION ]
具体的参数:
参数 作用-a 显示所有的套接字-l 显示所有连接状态的套接字-e 显示详细的套接字信息-m 显示套接字的内存使用情况-p 显示套接字的进程信息-4 显示ipv4的套接字信息-6 显示ipv6的套接字信息-t 仅显示tcp的套接字信息-u 仅显示udp的套接字信息-n 不解析主机名(提升速度)-r, --resolve 把 IP 解释为域名,把端口号解释为协议名称-x, --unix 显示 unix domain sockets,与 -f 选项相同-s 查看概述
2.1 常用命令
- 查看主机的监听端口
$ ss -tnl
- 通过 -r 选项解析 IP 和端口号
$ ss -tlr
- 使用 -p 选项查看监听端口的程序名称
$ ss -tlpRecv-Q Send-Q Local Address:Port Peer Address:Port0 0 127.0.0.1:2208 *:* users:(("hpiod",2841,0))0 0 *:9090 *:* users:(("redis-server",17961,5))0 0 *:hello-port *:* users:(("rpc.statd",2590,7))0 0 *:sunrpc *:* users:(("portmap",2536,4))0 0 *:ssh *:* users:(("sshd",4372,4))0 0 *:telnet *:* users:(("xinetd",19846,5))0 0 127.0.0.1:ipp *:* users:(("cupsd",2869,4))0 0 *:postgres *:* users:(("python",26279,3),("python",26282,3),("python",26282,5))
- 查看建立的 TCP 连接
-a —all 对 TCP 协议来说,既包含监听的端口,也包含建立的连接
$ ss -tna
- 匹配远程地址和端口号
# ss dst 192.168.111.3# ss dst 192.168.111.3:48926
- 匹配本地地址和端口号
# ss src 192.168.119.103:80
- 多条件匹配
(注意下面命令中的转义符和空格,都是必须的。如果不用转义符,可以使用单引号)
显示established状态的源端口是8356或者目标端口是10021,且目的地址是192.168.59.37所有 TCP 套接字:
# ss state established \( sport = :8356 or dport = :10021 \) dst 192.168.59.37# ss state established '( sport = :8356 or dport = :10021 )' dst 192.168.59.37
2.2 经常使用的命令
- 检测当前匹配的端口的所有套接字并显示进程号
# ss -nap|grep 端口号
