3.Linux netstat和ss 命令
一、Linux的netstat命令详解
1、TCP连接状态详解
LISTEN: 侦听来自远方的TCP端口的连接请求 SYN-SENT: 再发送连接请求后等待匹配的连接请求 SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认 ESTABLISHED: 代表一个打开的连接 FIN-WAIT-1: 等待远程TCP连接中断请求,或先前的连接中断请求的确认 FIN-WAIT-2: 从远程TCP等待连接中断请求 CLOSE-WAIT: 等待从本地用户发来的连接中断请求 CLOSING: 等待远程TCP对连接中断的确认 LAST-ACK: 等待原来的发向远程TCP的连接中断请求的确认 TIME-WAIT: 等待足够的时间以确保远程TCP接收到连接中断请求的确认 CLOSED: 没有任何连接状态
2、命令格式
netstat(选项)3、命令选项
-a或–all:显示所有连线中的Socket; -A<网络类型>或–<网络类型>:列出该网络类型连线中的相关地址; -c或–continuous:持续列出网络状态; -C或–cache:显示路由器配置的快取信息; -e或–extend:显示网络其他相关信息; -F或–fib:显示FIB; -g或–groups:显示多重广播功能群组组员名单; -h或–help:在线帮助; -i或–interfaces:显示网络界面信息表单; -l或–listening:显示监控中的服务器的Socket; -M或–masquerade:显示伪装的网络连线; -n或–numeric:直接使用ip地址,而不通过域名服务器; -N或–netlink或–symbolic:显示网络硬件外围设备的符号连接名称; -o或–timers:显示计时器; -p或–programs:显示正在使用Socket的程序识别码和程序名称; -r或–route:显示Routing Table; -s或–statistice:显示网络工作信息统计表; -t或–tcp:显示TCP传输协议的连线状况; -u或–udp:显示UDP传输协议的连线状况; -v或–verbose:显示指令执行过程; -V或–version:显示版本信息; -w或–raw:显示RAW传输协议的连线状况; -x或–unix:此参数的效果和指定"-A unix"参数相同; –ip或–inet:此参数的效果和指定"-A inet"参数相同。4、netstat用例
4.1 列出所有端口(包含TCP和UDP)
[root@localhost ~]# netstat -a/-all Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:x11 0.0.0.0:* LISTEN tcp 0 0 localhost.locald:domain 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:nxlmd 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:pqsp 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:28002 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:28003 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:28004 0.0.0.0:* LISTEN tcp 0 52 localhost.localdoma:ssh 192.168.235.1:57732 ESTABLISHED tcp 0 0 localhost.localdoma:ssh 192.168.235.1:57734 ESTABLISHED tcp6 0 0 [::]:sunrpc [::]:* LISTEN tcp6 0 0 [::]:x11 [::]:* LISTEN4.2 列出所有TCP端口
[root@localhost ~]# netstat -at Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:x11 0.0.0.0:* LISTEN tcp 0 0 localhost.locald:domain 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:nxlmd 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:pqsp 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:28002 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:28003 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:28004 0.0.0.0:* LISTEN tcp 0 52 localhost.localdoma:ssh 192.168.235.1:57732 ESTABLISHED tcp 0 0 localhost.localdoma:ssh 192.168.235.1:57734 ESTABLISHED tcp6 0 0 [::]:sunrpc [::]:* LISTEN tcp6 0 0 [::]:x11 [::]:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN tcp6 0 0 localhost:ipp [::]:* LISTEN tcp6 0 0 localhost:smtp [::]:* LISTEN4.3列出所有UDP端口
[root@localhost ~]# netstat -au Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State udp 0 0 0.0.0.0:40896 0.0.0.0:* udp 0 0 localhost.locald:domain 0.0.0.0:* udp 0 0 0.0.0.0:bootps 0.0.0.0:* udp 0 0 0.0.0.0:bootpc 0.0.0.0:* udp 0 0 0.0.0.0:sunrpc 0.0.0.0:* udp 0 0 localhost:323 0.0.0.0:* udp 0 0 0.0.0.0:946 0.0.0.0:* udp 0 0 0.0.0.0:mdns 0.0.0.0:* udp6 0 0 [::]:sunrpc [::]:* udp6 0 0 localhost:323 [::]:* udp6 0 0 [::]:946 [::]:*4.4 找出程序运行的端口
[root@localhost ~]# netstat -tunlp | grep ssh/端口/IP tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 9249/sshd tcp6 0 0 :::22 :::* LISTEN 9249/sshd4.5 通过端口找进程ID
[root@localhost ~]# netstat -tunlp | grep 22 | awk '{print $7}' | cut -d/ -f1 11215 9249 9249二、linux ss 命令用法说明
ss 是 Socket Statistics 的缩写。ss 命令可以用来获取 socket 统计信息,它显示的内容和 netstat 类似。但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比 netstat 更快。当服务器的 socket 连接数量变得非常大时,无论是使用 netstat 命令还是直接 cat /proc/net/tcp,执行速度都会很慢。ss 命令利用到了 TCP 协议栈中 tcp_diag。tcp_diag 是一个用于分析统计的模块,可以获得 Linux 内核中第一手的信息,因此 ss 命令的性能会好很多。
1.常用选项
-h, --help 帮助 -V, --version 显示版本号 -t, --tcp 显示 TCP 协议的 sockets -u, --udp 显示 UDP 协议的 sockets -x, --unix 显示 unix domain sockets,与 -f 选项相同 -n, --numeric 不解析服务的名称,如 "22" 端口不会显示成 "ssh" -l, --listening 只显示处于监听状态的端口 -p, --processes 显示监听端口的进程(Ubuntu 上需要 sudo) -a, --all 对 TCP 协议来说,既包含监听的端口,也包含建立的连接 -r, --resolve 把 IP 解释为域名,把端口号解释为协议名称2.ss 用例
2.1 如果不添加选项 ss 命令默认输出所有建立的连接(不包含监听的端口),包括 tcp, udp, and unix socket 三种类型的连接:
[root@localhost ~]# ss Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port u_str ESTAB 0 0 * 80333 * 76717 u_str ESTAB 0 0 * 51167 * 47558 u_str ESTAB 0 0 /run/containerd/s/54ffd166ed943e8222cfcef09e80c0c56877779e2beacfeec1b101d42ab007a9 66853 * 60189 u_str ESTAB 0 0 * 66830 * 66833 u_str ESTAB 0 0 * 82727 * 76724 u_str ESTAB 0 0 /run/systemd/journal/stdout 36635 * 51882 u_str ESTAB 0 0 * 73541 * 78637 u_str ESTAB 0 0 * 63218 * 63217 u_str ESTAB 0 0 /run/dbus/system_bus_socket 56052 * 49966 u_str ESTAB 0 0 /run/dbus/system_bus_socket 78827 * 78826 u_str ESTAB 0 0 * 51179 * 47572 u_str ESTAB 0 0 * 76294 * 79995 u_str ESTAB 0 0 /run/systemd/journal/stdout 45488 * 473692.2 查看主机监听的端口
[root@localhost ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:111 *:* LISTEN 0 128 *:6000 *:* LISTEN 0 5 192.168.122.1:53 *:* LISTEN 0 128 *:22 *:* LISTEN 0 128 127.0.0.1:631 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:28000 *:* LISTEN 0 128 *:28001 *:* LISTEN 0 128 *:28002 *:* LISTEN 0 128 *:28003 *:* LISTEN 0 128 *:28004 *:* LISTEN 0 128 :::111 :::* LISTEN 0 128 :::6000 :::* LISTEN 0 128 :::22 :::* LISTEN 0 128 ::1:631 :::* LISTEN 0 100 ::1:25 :::*2.3 通过 -r 选项解析 IP 和端口号
[root@localhost ~]# ss -tlr State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:rpc.portmapper *:* LISTEN 0 128 *:x11 *:* LISTEN 0 5 localhost.localdomain:domain *:* LISTEN 0 128 *:ssh *:* LISTEN 0 128 localhost:ipp *:* LISTEN 0 100 localhost:smtp *:* LISTEN 0 128 *:nxlmd *:* LISTEN 0 128 *:pqsp *:* LISTEN 0 128 *:28002 *:* LISTEN 0 128 *:28003 *:* LISTEN 0 128 *:28004 *:* LISTEN 0 128 :::rpc.portmapper :::* LISTEN 0 128 :::x11 :::* LISTEN 0 128 :::ssh :::* LISTEN 0 128 localhost:ipp :::* LISTEN 0 100 localhost:smtp :::*2.4 使用 -p 选项查看监听端口的程序名称
[root@localhost ~]# ss -tlp State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:sunrpc *:* users:(("rpcbind",pid=8828,fd=4),("systemd",pid=1,fd=50)) LISTEN 0 128 *:x11 *:* users:(("X",pid=10901,fd=6)) LISTEN 0 5 192.168.122.1:domain *:* users:(("dnsmasq",pid=11215,fd=6)) LISTEN 0 128 *:ssh *:* users:(("sshd",pid=9249,fd=3)) LISTEN 0 128 127.0.0.1:ipp *:* users:(("cupsd",pid=9254,fd=12)) LISTEN 0 100 127.0.0.1:smtp *:* users:(("master",pid=9483,fd=13)) LISTEN 0 128 *:nxlmd *:* users:(("docker-proxy",pid=12715,fd=4)) LISTEN 0 128 *:pqsp *:* users:(("docker-proxy",pid=12783,fd=4)) LISTEN 0 128 *:28002 *:* users:(("docker-proxy",pid=12766,fd=4)) LISTEN 0 128 *:28003 *:* users:(("docker-proxy",pid=12876,fd=4)) LISTEN 0 128 *:28004 *:* users:(("docker-proxy",pid=12831,fd=4)) LISTEN 0 128 :::sunrpc :::* users:(("rpcbind",pid=8828,fd=6),("systemd",pid=1,fd=52)) LISTEN 0 128 :::x11 :::*
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通