netstat 网络排查与安全分析速查指南(jaywcjlove/reference)
2026/9/23 21:04:24 网站建设 项目流程
  • 文档
  • 知识库
  • 教程
  • 开发工具

【免费下载链接】reference

为开发人员分享快速参考备忘清单(速查表)

项目地址:https://gitcode.com/jaywcjlove/reference
点击查看免费下载

本指南以开源速查仓库 jaywcjlove/reference 中 docs/netstat.md 为骨架,系统梳理netstat命令的监听、连接、路由、统计等核心用法,并深入讲解端口排查、服务检测与 DoS 攻击识别的实战命令链。读完本文,你将能熟练运用netstat配合grepawksort等工具,快速定位监听端口、追踪异常连接、统计远程 IP 连接数并判断服务器是否遭受攻击。

netstat 是什么

netstat(network statistics)是 Linux/Unix 系统中用于显示网络连接、路由表、网络接口统计信息的经典命令行工具。它通过读取内核中的网络子系统状态(如/proc/net/tcp/proc/net/udp等),以文本形式输出当前系统的网络活动快照。

在本仓库中,netstat被归类于"系统/网络"速查清单,与 lsof(列出打开文件)、linux-command(常用命令综合速查,其中netstat -pnltu用于显示所有活动监听端口)、ports(常用端口对照表)等文档互为补充,是服务器日常运维与故障排查的高频起点。

快速上手:三条入门命令

查看端口 80 上的所有连接

$ netstat -anp | grep :80

组合解释:-a显示所有连接与监听端口,-n以数字形式显示地址和端口(不做 DNS 反向解析,速度更快),-p显示进程 PID 与名称,再交给grep过滤出包含:80的行,即可看到所有与 80 端口相关的连接。

查看网络统计帮助

$ netstat -h

输出所有可用选项的简要说明,适合在不确定某个选项含义时随时查阅。

常用选项速查

选项含义
-a显示所有连接(含监听)
-t仅显示 TCP 连接
-u仅显示 UDP 连接
-x仅显示 Unix 套接字
-n以数字显示 IP 与端口,不做反向 DNS 解析
-p显示进程 PID 与名称
-l仅显示监听中的套接字
-e显示扩展信息(如用户、Inode)
-i显示网络接口信息
-r显示路由表
-s显示协议统计信息
-F尽可能将 IP 解析为域名
-M显示伪装的连接
-w显示原始套接字(Raw)

监听端口:谁在提供服务

监听状态(LISTEN)表示进程正在某个端口上等待连接,是排查"端口被占用""服务未启动"等问题的核心手段。

命令说明
netstat -ltunp所有监听端口(TCP+UDP,含进程信息)
netstat -ltn监听 TCP 端口(数字显示)
netstat -lun监听 UDP 端口
netstat -lx监听 Unix 域套接字
netstat -lt仅列出侦听 TCP 端口
netstat -lu仅列出侦听 UDP 端口
netstat -l列出所有监听条件

其中-ltunp是日常使用频率最高的组合:l(监听)+t(TCP)+u(UDP)+n(数字)+p(进程),一条命令即可看清本机开放了哪些端口、由哪个进程占用。

连接状态:活动连接一览

连接状态分为ESTABLISHED(已建立)、SYN_SENT(正在发起连接)、TIME_WAITCLOSE_WAIT等多种。查看全部连接:

命令说明
netstat活动连接(默认输出)
netstat -a所有连接
netstat -at所有 TCP 连接
netstat -au所有 UDP 连接
netstat -ant所有 TCP 连接,数字显示 IP(不做反向 DNS 查找)
netstat -tnl监听 TCP 端口
netstat -unl监听 UDP 端口

显示没有域名的 TCP 连接

$ netstat --tcp --numeric

--tcp等价于-t--numeric等价于-n,两条长选项写法可读性更强,适合写入脚本或文档示例。

显示活动/已建立的连接

$ netstat -atnp | grep ESTA

ESTAESTABLISHED的前缀匹配,用于快速过滤出所有已建立的连接。若需连续观察,可配合watch

$ watch -d -n0 "netstat -atnp | grep ESTA"

-d高亮两次刷新间发生变化的部分,-n0表示尽可能快的刷新间隔,适合观察连接数的动态变化。

网络与路由信息

网络接口

命令说明
netstat -i显示网络接口(含收发数据包统计)
netstat -ie显示网络接口扩展信息(类似ifconfig
netstat -n仅显示 IP 地址
netstat -F尽可能显示 IP 地址对应的域名

路由表

命令说明
netstat -r显示路由表(等价于route
netstat -rn显示路由表,且不解析主机名

排查"网络不通""网关错误"问题时,netstat -rn可直接查看内核路由决策结果,确认默认网关与目标网段的路由条目。

统计信息与进程定位

协议统计

命令说明
netstat -s显示各协议统计信息(TCP/UDP/ICMP 等)
netstat -st仅显示 TCP 统计信息
netstat -su仅显示 UDP 统计信息

统计信息中包含重传次数、丢包、连接重置等关键指标,是判断网络质量与丢包率的重要依据。

进程与扩展信息

命令说明
netstat -ltpe使用进程信息和扩展信息显示 TCP 侦听连接
netstat -tp显示带有 PID 编号的服务名称
sudo netstat -nlpt列出进程名称/PID 和用户 ID
netstat -nlptue所有带 PID 和扩展信息的监听端口
netstat -M显示伪装的连接

注意:-p显示进程名通常需要 root 权限,非 root 用户可能只能看到进程名而看不到 PID,因此推荐使用sudo执行。

实战:检查服务是否正在运行

$ sudo netstat -aple | grep ntp

-a(所有)+-p(进程)+-l(监听)+-e(扩展信息),配合grep过滤服务关键字。将ntp替换为httpsmtp等即可检查对应服务是否在监听状态:

$ sudo netstat -aple | grep http $ sudo netstat -aple | grep smtp

这是比ps更精准的"服务是否对外可用"检查方式——进程存在但未监听端口,同样无法提供服务。

显示到特定端口的所有打开连接

$ netstat -anp | grep":"

将冒号:替换为具体端口号即可,例如:

$ netstat -anp | grep":3306"

用于查看某个端口的全部打开连接(含监听与已建立)。

安全分析:用 netstat 识别异常流量

netstat配合管道命令可以构建轻量级的安全分析工具链,用于统计连接来源、发现 DoS 攻击迹象。

显示具有大量连接的 IP

$ netstat -tn 2>/dev/null | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head

命令链拆解:netstat -tn输出数字化的 TCP 连接 →grep :80过滤 80 端口 →awk '{print $5}'取第 5 列(远端地址)→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 映射到 IPv6 时的前缀(::ffff:1.2.3.41.2.3.4),使统计结果更干净。

显示端口 80 上的活动连接数

$ netstat -an |grep :80 |wc -l

wc -l统计行数,得到当前 80 端口相关连接(含监听)的总数量,适合作为监控脚本的指标来源。

仅显示外部 IP 地址

$ netstat -antu | grep :80 | grep -v LISTEN | awk '{print $5}'

grep -v LISTEN排除本地监听行,awk '{print $5}'提取远端地址,得到所有"主动连入 80 端口的外部地址"。

识别 DoS 攻击:SYN_REC 状态统计

SYN_REC(SYN_RECEIVED)表示收到了 SYN 请求但未完成三次握手,是半开连接攻击(SYN Flood)的典型特征:

$ netstat -n -p|grep SYN_REC | wc -l

该命令输出服务器上当前处于SYN_REC状态的连接数量。正常情况下该数值应该很低(小于5);如果达到两位数,则很可能正在遭受 DoS 攻击或邮件轰炸。

列出发送 SYN_REC 连接的唯一 IP 地址
$ netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'

与上面的命令一样,该命令列出所有向服务器发起SYN_REC半开连接的节点唯一 IP 地址,方便进一步封禁或溯源。

每个远程 IP 的连接数

方法一(经典管道):

$ netstat -antu | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -n

方法二(单条 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"}'

方法二仅在第五列匹配数字:端口格式时执行:split($5, a, ":")按冒号拆分地址与端口,ips[a[1]]++以 IP 为键计数,最终通过sort -k1 -nr按连接数降序输出。相比方法一省去了多个中间进程,在处理海量连接时更高效。

检查开放端口(IPv4 和 IPv6)

$ netstat -plntu

以及仅 TCP 的版本:

$ netstat -plnt

-p(进程)+-l(监听)+-n(数字)+-t(TCP)/-u(UDP),一条命令列出所有监听中的端口及其进程,是"查看本机开放了哪些端口"的标准答案,也可与 ports.md 中的端口对照表配合识别端口用途。

每个 IP 的打开连接数

$ netstat -an | grep 80 | wc -l

统计所有包含80的 TCP/UDP 行数,用于快速估算 80 端口的连接总量。

活跃的互联网连接

$ netstat -pnut -w | column -t -s $'\t'

-p(进程)+-n(数字)+-u(UDP)+-t(TCP)+-w(Raw 原始套接字)覆盖所有互联网协议,column -t -s $'\t'以制表符为分隔并对齐列,输出排版整洁的活跃连接清单。

小结

netstat尽管在部分新系统中被ss逐步替代,但其选项直观、输出稳定、随处可用,仍是排查端口占用、服务状态与网络连接的首选工具。本清单中的命令链体现了 Unix 管道哲学的典型用法:netstat负责采集网络快照,grep/awk/cut负责字段提取,sort/uniq负责聚合统计,组合起来即可覆盖从日常巡检到安全应急的多数场景。

进一步阅读本仓库相关清单:lsof 备忘清单(按进程/端口查打开文件)、常用端口对照表(识别端口用途)、Linux 常用命令(netstat -pnltu综合用法)以及 awk、grep(掌握管道处理能力)。

  • 文档
  • 知识库
  • 教程
  • 开发工具

【免费下载链接】reference

为开发人员分享快速参考备忘清单(速查表)

项目地址:https://gitcode.com/jaywcjlove/reference
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询