当前位置: 首页 > news >正文

Linux netstat 命令深度解析:从网络连接到端口监控的完整实现

netstat 的核心价值netstat的本质是读取内核网络栈信息。在 Linux 系统中所有网络连接信息都存储在/proc文件系统# TCP 连接信息/proc/net/tcp /proc/net/tcp6# UDP 连接信息/proc/net/udp /proc/net/udp6# Unix 域套接字/proc/net/unix# 路由表/proc/net/route# 网络接口统计/proc/net/devnetstat 命令其实就是这些文件的格式化输出工具。了解了这一点很多输出字段就很好理解了。常用参数深度解析1.-tunlp参数组合这是最常见的组合每个字母都有特定含义netstat-tunlp-t: 显示 TCP 连接-u: 显示 UDP 连接-n: 以数字形式显示地址和端口不做 DNS 解析快 10 倍以上-l: 只显示监听状态的套接字-p: 显示进程 ID 和程序名需要 root 权限输出示例Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 5678/mysqld tcp6 0 0 :::443 :::* LISTEN 1234/nginx2.-an参数组合显示所有连接包括已建立的netstat-an|grepESTABLISHED输出字段详解Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 192.168.1.100:22 203.0.113.5:52341 ESTABLISHEDRecv-Q: 接收队列中等待应用读取的字节数应该接近 0Send-Q: 发送队列中未收到 ACK 的字节数高值可能是网络拥塞Local Address: 本地 IP:端口Foreign Address: 远程 IP:端口State: TCP 连接状态3. TCP 状态详解netstat最强大的功能之一是查看 TCP 状态netstat-ant|awk{print $6}|sort|uniq-c输出示例12 CLOSE_WAIT 3 ESTABLISHED 45 TIME_WAIT 2 LISTEN关键状态含义状态含义排查意义LISTEN服务端等待连接正常监听状态ESTABLISHED连接已建立活跃连接TIME_WAIT主动关闭方等待 2MSL大量堆积可能导致端口耗尽CLOSE_WAIT被动关闭方等待应用关闭大量堆积表示程序 bugSYN_SENT主动发起连接大量值可能是 SYN Flood 攻击FIN_WAIT1/2关闭握手进行中状态卡住可能是网络问题实战案例排查连接问题案例 1端口占用排查# 查看端口 8080 的占用情况netstat-tunlp|grep:8080# 或者更精确的查找netstat-tunlp|awk$4 ~ /:8080$/输出tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 12345/java案例 2TIME_WAIT 过多导致端口耗尽# 统计 TIME_WAIT 数量netstat-ant|grepTIME_WAIT|wc-l# 如果超过几千需要调整内核参数echonet.ipv4.tcp_tw_reuse 1/etc/sysctl.confechonet.ipv4.tcp_max_tw_buckets 5000/etc/sysctl.confsysctl-p案例 3CLOSE_WAIT 堆积问题CLOSE_WAIT 堆积意味着对方关闭了连接但本地程序没有调用close()# 查看哪些程序产生了 CLOSE_WAITnetstat-antp|grepCLOSE_WAIT这通常是程序 bug需要检查代码中是否正确关闭了 socket。案例 4统计并发连接数# 统计每个 IP 的连接数netstat-ant|grepESTABLISHED|awk{print $5}|cut-d:-f1|sort|uniq-c|sort-nr|head-10# 输出示例125192.168.1.1004510.0.0.512203.0.113.10可以快速发现异常 IP可能是 DDoS 攻击。性能优化netstat vs ssnetstat读取/proc文件时会遍历所有 socket在高并发服务器上性能较差# 性能对比10万连接timenetstat-ant|wc-l# 约 2-3 秒timess-ant|wc-l# 约 0.1 秒ss命令直接读取内核 netlink socket速度快 20 倍以上。但netstat在低并发场景下足够用且输出更易读。高级技巧持续监控1. 实时监控连接变化# 每秒刷新一次watch-n1netstat -ant | grep ESTABLISHED | wc -l2. 监控特定端口# 监控 80 端口的连接变化watch-n1netstat -ant | grep :80 3. 导出网络统计到 CSVnetstat-i|awkNR2 {print $1,$4,$5,$6,$7}network_stats.csvWeb 实现浏览器端的netstat浏览器无法直接访问系统网络栈但可以通过 WebRTC 获取本地 IPasyncfunctiongetLocalIP():Promisestring[]{returnnewPromise((resolve){constips:string[][]constpcnewRTCPeerConnection({iceServers:[]})pc.createDataChannel()pc.createOffer().then(offerpc.setLocalDescription(offer))pc.onicecandidate(event){if(!event?.candidate?.candidate)returnconstmatchevent.candidate.candidate.match(/(\d\.\d\.\d\.\d)/)if(match!ips.includes(match[1])){ips.push(match[1])}if(pc.connectionStateclosed){resolve(ips)}}setTimeout((){pc.close()resolve(ips)},1000)})}// 使用constlocalIPsawaitgetLocalIP()console.log(Local IPs:,localIPs)// [192.168.1.100, 10.0.0.5]虽然功能有限但展示了如何在前端获取网络信息。常见陷阱1. DNS 解析拖慢速度# 慢会做 DNS 反向解析netstat-a# 快数字形式显示netstat-an2.-p参数需要 root 权限# 普通用户运行PID/Program name 显示为空netstat-tunlp# 需要 sudosudonetstat-tunlp3. 容器环境中的网络命名空间Docker 容器有独立的网络命名空间宿主机的netstat看不到容器内的连接# 进入容器的网络命名空间dockerexeccontainer_idnetstat-tunlpnetstat 在线工具如果你想快速查看网络连接信息可以试试 Linux netstat 命令查询提供了命令详解和常用参数说明。总结netstat是网络诊断的基础工具掌握它可以快速定位大部分网络问题。核心要点理解/proc文件系统是数据源掌握-tunlp和-an参数组合熟悉 TCP 状态及其含义高并发场景用ss替代结合watch和管道实现持续监控下次遇到网络连接问题时不要只会ping和telnet试试netstat你会看到更多信息。相关工具端口检测器 | IP 地址查询
http://www.rkmt.cn/news/1310326.html

相关文章:

  • 个人开发者如何利用多模型API构建移动端智能应用
  • 嵌入式面试总结:
  • Ever® Demand™生产环境部署:Docker、PM2与AWS最佳实践
  • 粒子系统与Canvas 2D实现动态喷漆轨迹生成
  • XUnity Auto Translator:3分钟为Unity游戏添加多语言支持的终极方案
  • 基于ESP32与Pure Data的无线音乐控制器:从硬件到软件的完整实现
  • Claude API集成学习工具包:从入门到实战的完整指南
  • 关于上海音航汽车音响网络信息不实的郑重澄清声明 - 汽车音响改装
  • 从DETR到Deformable DETR:Transformer目标检测核心原理与实战指南
  • 永辉超市购物卡(电子与实体卡)怎么回收,解读通用流程 - 淘淘收小程序
  • Git远程仓库核心原理与团队协作实战指南
  • I2C总线设计实战:从物理层到协议层,解决多设备挂载与信号完整性问题
  • 如何高效使用v-code-diff:Vue代码对比组件完整指南
  • Orange Pi R1:低成本双网口开发板在OpenWrt软路由与物联网网关中的应用实践
  • 5分钟掌握PyFluent:用Python自动化CFD仿真的终极指南
  • 考研失利?别emo!转行AI大模型训练师/应用开发工程师,高薪新机会等你收藏
  • 重新定义Windows上的安卓应用安装体验:APK安装器深度探索
  • 厦门手表回收实测:亲测跑了五家店,终于找了靠谱不坑人的 - 奢侈品回收测评
  • VBS脚本的‘伪编译’之旅:从.vbs到.vbe,聊聊Windows脚本编码器的那些事儿
  • 深度解析PoeCharm:Path of Building中文版的技术实现与应用实践
  • 安卓手机搭建 Kali 环境|便携式渗透测试平台搭建指南
  • NotebookLM+量子计算:如何在72小时内构建首个可验证量子线路原型?
  • NotebookLM引用格式生成:从手动补全到全自动闭环,20年科研老炮私藏的Zotero+NotebookLM双链工作流
  • 暗黑破坏神2存档编辑器使用指南:自定义角色与装备管理方法
  • 从Postman到Newman:一键生成微信小程序接口测试报告(Node.js环境搭建指南)
  • listmonk数据库迁移最佳实践:零停机部署策略
  • 西安泰芮斯电气有限公司:以电气屏蔽为核心,构筑工业电磁兼容与全国配套能力 - 深度智识库
  • N_m3u8DL-CLI-SimpleG:图形化M3U8视频下载终极指南
  • 现有基准任务(如操纵、导航)是否足够
  • ChartGPT:用自然语言重塑数据可视化的智能革命