Netstat 命令速查:Linux 网络连接、端口监听与安全排查实战指南
【免费下载链接】reference面向开发者的技术速查清单(Cheat Sheets)集合,整理常见技术、工具与开发流程,帮助快速查阅关键信息,提高开发效率。项目地址: https://gitcode.com/GitHub_Trending/referen/reference
本指南以本项目 docs/netstat.md 备忘清单为骨架,系统讲解netstat命令在端口监听、连接查看、网络接口、路由表、协议统计以及安全审计(如 DoS 排查)等场景下的完整用法。读完本文,你将掌握从「查看端口 80 的所有连接」到「用一行命令找出连接数最多的可疑 IP」的全套实战技能,可直接复制命令用于日常运维与安全巡检。
netstat 是什么
netstat(network statistics)是 Linux 上最经典、最常用的网络状态查看工具之一。它通过读取内核的网络子系统信息,向用户展示:
- 当前机器的网络连接(TCP / UDP / Unix 套接字);
- 端口监听状态(哪些服务正在监听哪些端口);
- 网络接口的收发统计;
- 内核路由表;
- 各协议的累计统计信息。
在本项目的速查清单体系中,它归属于 README 中的「命令」分类(见 README.md 中 Netstat 条目),并配有独立的图标资源 assets/netstat.svg。现代 Linux 发行版上netstat多由ip、ss等新工具取代,但因其命令简洁、输出直观、在各类服务器与脚本中仍有大量存量使用,掌握它依然是网络排障的基本功。
入门实例
先看两个最常见的用法,快速上手。
查看端口 80 上的所有连接
$ netstat -anp | grep :80参数拆解:
-a:显示所有连接(包括监听状态与已建立状态);-n:以数字形式显示地址与端口,不做反向 DNS 解析(速度更快);-p:显示进程 PID 与进程名;grep :80:过滤出地址中包含:80的行,即所有与 80 端口相关的连接。
查看 netstat 帮助
$ netstat -h-h输出所有可用选项的简要说明,是记不住参数时的第一求助入口。Windows 平台同样支持netstat -h(更常见的是netstat -?),且基本参数语义一致。
监听状态查看
「监听」指某个服务进程已经绑定端口并等待连接进入(内核状态为LISTEN)。排查「端口是否被占用」「服务是否起来」都依赖这一组命令。
| 选项 | 说明 | | :- | :- | |netstat -ltunp| 所有监听端口(TCP + UDP,含进程信息) | |netstat -ltn| 监听 TCP 端口 | |netstat -lun| 监听 UDP 端口 | |netstat -lx| 监听 Unix 域套接字 | |netstat -lt| 仅列出监听 TCP 端口 | |netstat -lu| 仅列出监听 UDP 端口 | |netstat -l| 列出所有监听条件 |
要点:
-l只显示LISTEN状态的连接,是判断「服务是否在监听」的最快方式;- 组合
-p可以看到监听端口的进程 PID,配合ps、kill即可完成定位与清理; - 本仓库的 Windows 命令清单 docs/cmd.md 中也记录了对应的排查链路:先用
netstat -ano查端口对应的 PID,再用taskkill /pid 进程号结束进程。
连接状态查看
与「监听」不同,-a系列展示的是全部连接,包括已建立(ESTABLISHED)、半开(SYN_SENT、SYN_REC)、关闭等待(TIME_WAIT、CLOSE_WAIT)等状态。
| 选项 | 说明 | | :- | :- | |netstat| 活动连接(默认只显示已建立的 TCP 连接) | |netstat -a| 所有连接 | |netstat -at| 所有 TCP 连接 | |netstat -au| 所有 UDP 连接 | |netstat -ant| 显示 IP 地址,不做反向 DNS 查找 | |netstat -tnl| 监听 TCP 端口 | |netstat -unl| 监听 UDP 端口 |
其中-ant是日常排障使用频率最高的组合:-a(所有)+-n(数字地址)+-t(仅 TCP),输出快速且无 DNS 等待。
网络接口信息
| 选项 | 说明 | | :- | :- | |netstat -i| 显示网络接口 | |netstat -ie| 显示网络接口扩展信息 | |netstat -n| 仅显示 IP 地址 | |netstat -F| 尽可能显示 IP 地址对应的域名 |
netstat -ie的输出与ifconfig类似,包含每块网卡的 IP、掩码、收发字节数、错误包数等,可用于快速判断网卡是否异常(如RX-ERR、TX-DRP持续增长)。
路由表查看
| 选项 | 说明 | | :- | :- | |netstat -r| 显示路由表 | |netstat -rn| 显示路由表,不解析主机名 |
-rn以纯数字形式输出内核路由表,与route -n等价,用来确认默认网关(default或0.0.0.0)与目标网段的下一跳。
协议统计信息
| 选项 | 说明 | | :- | :- | |netstat -s| 显示各协议统计信息 | |netstat -st| 显示 TCP 统计信息 | |netstat -su| 显示 UDP 统计信息 | |netstat -ltpe| 使用进程信息和扩展信息显示 TCP 的监听连接 | |netstat -tp| 显示带 PID 编号的服务名称 | |sudo netstat -nlpt| 列出进程名称 / PID 和用户 ID | |netstat -nlptue| 所有带 PID 和扩展信息的监听端口 | |netstat -M| 显示伪装(masquerade)的连接 |
说明:
-s输出的是内核网络栈的累计计数器,例如 TCP 的重传次数、丢弃的报文数、TIME_WAIT等,是判断网络质量与协议异常的重要依据;-M需要内核开启 IP 伪装(常见于旧的 NAT 环境);-p显示进程信息时通常需要root/sudo权限,否则 PID 与进程名可能为空,这也解释了为什么命令中常见sudo netstat ...的写法。
常见实战场景
显示没有域名的 TCP 连接
$ netstat --tcp --numeric等价于netstat -tn,--numeric强制以 IP 数字形式输出,避免反向解析造成的延迟。
显示活动 / 已建立的连接
$ netstat -atnp | grep ESTAgrep ESTA匹配ESTABLISHED状态(取前 4 个字符即可命中,也规避了行尾空白差异),得到当前所有活跃的 TCP 会话。
获取活动连接的连续列表
$ watch -d -n0 "netstat -atnp | grep ESTA"用watch每 0 秒(尽可能快)刷新一次并高亮变化行(-d),适合实时观察连接数的波动,例如压测时观察并发建立情况。
显示到特定端口的所有打开连接
$ netstat -anp | grep":"将上面命令中的冒号:替换为你关心的端口号即可,例如grep ":443"查看所有 443 端口的连接。注意加引号包裹端口模式,避免 shell 对特殊字符的误解析。
检查服务是否正在运行
$ sudo netstat -aple | grep ntp将ntp替换为http、smtp等关键字,即可在包含进程名、PID、用户信息的输出中定位目标服务;-e额外显示用户信息。这是「服务挂了没有」最直接的检查手段之一。
安全场景:连接审计与 DoS 排查
netstat的输出经过awk、sort、uniq、cut等文本工具的加工,可以变成强大的安全分析命令。以下命令均来自原文档的安全章节,可直接照抄运行。
显示具有大量连接的 IP
$ netstat -tn 2>/dev/null | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head流水线解析:
netstat -tn列出 TCP 数字连接,2>/dev/null丢弃权限不足时的错误输出;grep :80筛选 80 端口相关行;awk '{print $5}'取出第五列(对端地址IP:端口);cut -d: -f1按冒号切分,取 IP 部分;sort排序后uniq -c统计每个 IP 的出现次数;sort -nr按次数降序,head取前 10 名。
输出结果第一列是连接数,第二列是 IP。连接数异常集中的 IP 往往就是攻击源或热点客户端。
连接到端口 80 的 IP 地址
$ netstat -tn 2>/dev/null | grep ':80 ' | awk '{print $5}' |sed -e 's/::ffff://' | cut -f1 -d: | sort | uniq -c | sort -rn | head与上一条的差异在于:grep ':80 '(端口后带空格)更精确地只匹配对端端口为 80 的行;sed -e 's/::ffff://'将 IPv4 映射地址(::ffff:1.2.3.4)还原成普通 IPv4 形式,避免同一条连接被 IPv4 / IPv6 两种写法重复统计。
显示端口 80 上的活动连接数
$ netstat -an |grep :80 |wc -lwc -l统计匹配行数,得到一个数字:当前与 80 端口相关的连接总数,适合直接写入监控脚本做阈值告警。
仅显示外部 IP 地址
$ netstat -antu | grep :80 | grep -v LISTEN | awk '{print $5}'grep -v LISTEN排除监听行,剩下的就是真实的外部连接,awk '{print $5}'取出对端地址列(含端口)。如需纯 IP,可再叠加cut -d: -f1。
显示活动 SYN_REC 数量
$ netstat -n -p|grep SYN_REC | wc -lSYN_REC表示服务器已收到对端的 SYN 握手请求、正在等待确认。正常情况下该数值应当很低(小于 5);如果达到两位数,说明服务器可能正在遭受DoS攻击或被邮件轰炸——攻击者发送大量伪造 SYN 包却不完成握手,令服务器堆积半开连接。-p需要 root 权限,可替换为netstat -tn | grep SYN_REC | wc -l在普通权限下运行。
列出发送 SYN_REC 连接的唯一 IP 地址
$ netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'该命令将每个处于SYN_REC状态的连接的对端IP:端口拆出纯 IP,重复 IP 会多次出现(即出现次数 = 该 IP 发起的半开连接数)。如需去重统计,可加| sort | uniq -c。
每个远程 IP 的连接数
$ netstat -antu | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -n统计所有 TCP / UDP 连接按对端 IP 分组的数量,并按升序排列;sort -n换成sort -nr即可按连接数降序输出,快速定位最活跃的对端。
或者使用纯 awk 实现(兼容性更强的写法):
$ netstat -antu | awk '$5 ~ /[0-9]:/{split($5, a, ":"); ips[a[1]]++} END {for (ip in ips) print ips[ip], ip | "sort -k1 -nr"}'该写法在awk内部用关联数组ips累计每个 IP 的连接数,最后按次数降序输出次数 IP。
检查开放端口(IPv4 和 IPv6)
$ netstat -plntu-p(进程)+-l(监听)+-n(数字)+-t(TCP)+-u(UDP),一次列出所有监听中的 TCP / UDP 端口及其所属进程,同时覆盖 IPv4 与 IPv6,是安全基线核查的标准命令。
仅查看 TCP 时:
$ netstat -plnt每个 IP 的打开连接数
$ netstat -an | grep 80 | wc -l快速统计与 80 相关的全部连接行数(含监听行),适合写进一行脚本做粗略的并发评估。
活跃的互联网连接
$ netstat -pnut -w | column -t -s $'\t'-w输出原始(raw)连接,column -t将制表符分隔的输出对齐成整齐的表格,可读性更好。
关键选项速查
把文档中的选项按功能归纳如下,便于速记:
| 选项 | 含义 | | :- | :- | |-a/--all| 显示所有连接与监听端口 | |-t/--tcp| 仅显示 TCP 连接 | |-u/--udp| 仅显示 UDP 连接 | |-l/--listening| 仅显示监听状态 | |-p/--program| 显示进程 PID 与名称(需 root) | |-n/--numeric| 数字形式显示地址与端口,不做反向解析 | |-e/--extend| 显示扩展信息(如用户) | |-r/--route| 显示路由表 | |-i/--interfaces| 显示网络接口统计 | |-s/--statistics| 显示协议统计 | |-F| 显示域名(尽量解析主机名) | |-M/--masquerade| 显示伪装连接 | |-h| 帮助信息 |
跨平台与工具联动
- Windows:本项目 docs/cmd.md 记录了 Windows 下
netstat -a、netstat -n、netstat -v、netstat -s等用法,且netstat -ano查询到的 PID 可直接配合taskkill /pid使用,与 Linux 排查思路完全一致。 - 容器 / 云原生:本项目 docs/sysdig.md 展示了在 sysdig 中复用 netstat 思路的例子——
sudo sysdig -pc -A -c netstat container.name=aaa可列出指定容器的监听端口,说明 netstat 的「查监听、查连接」心智模型同样适用于更现代的观测工具。 - 端口语义:netstat 输出的端口号可对照本项目 docs/ports.md 的端口清单确认服务身份,例如
:22为 SSH、:80为 HTTP、:443为 HTTPS、:3306为 MySQL、:5432为 PostgreSQL、:8080为 WWW 缓存服务等,让排查结果一目了然。 - 文本处理:安全命令中用到的
grep、awk、sed、sort、uniq、cut、watch、column均有独立速查文档(如 docs/grep.md、docs/awk.md),可交叉查阅加深理解。
总结
netstat用极少的参数组合覆盖了网络排障的绝大部分场景:-l系列查监听、-a系列查连接、-i查接口、-r查路由、-s查协议统计;而配合grep、awk、sort、uniq等文本工具后,它又变身为一套轻量级的安全分析引擎,可以完成连接排行、SYN 洪水检测、开放端口核查等任务。将本文的命令按需复制保存,即可作为日常运维与应急响应时的第一份检查清单。
【免费下载链接】reference面向开发者的技术速查清单(Cheat Sheets)集合,整理常见技术、工具与开发流程,帮助快速查阅关键信息,提高开发效率。项目地址: https://gitcode.com/GitHub_Trending/referen/reference
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考