netstat (Network Statistics) 命令是:网络统计(Network Statistics)是Windows操作系统中的一个命令行工具,用于显示网络连接、路由表和网络接口统计信息。它可以显示当前活动的网络连接、监听端口、TCP/IP协议的统计数据等,是网络诊断和故障排除的重要工具

netstat.exe 完整演进历程(UNIX 起源移植 → NT3.51 → XP → Vista → Win10/11 现行稳定版)
总述
netstat 源自 UNIX BSD 网络工具,随 Windows NT 初代系统移植进入 Windows 生态;演进分为四大关键分水岭:- NT3.51 / NT4.0:初代移植版,仅基础 TCP/IPv4 连接、路由、统计;无进程 PID、端口归属、IPv6;
- Windows XP / Server2003:核心功能大升级,新增
-oPID、-b进程栈、基础 IPv6 支持,奠定运维基础; - Vista / Server2008:全双栈完善,新增 QoS、RDMA、TCP 模板、连接时长、DSCP、卸载状态等企业服务器参数(截图全部参数诞生于此);
- Win10/11 / Server2016~2025:语法完全冻结,仅底层 API 兼容加固、ARM64 适配,微软主推 PowerShell
Get-NetTCPConnection作为现代替代,netstat仅保留老旧兼容场景。
一、初代:Windows NT 3.51 / NT 4.0(1994~1998,BSD 移植原型)
原生仅支持基础功能
- 仅 IPv4,完全无 IPv6 相关能力;
- 基础子参数:
-a / -e / -n / -r / -s; - 无进程关联能力:不存在
-o(PID)、-b(程序组件栈),无法查询端口属于哪个程序; - 无域名 FQDN、连接时长、DSCP、RDMA、TCP 模板、卸载状态、端口排序等现代参数;
底层与局限
- 底层调用老旧
iphlpapi初代 API,仅读取内核 TCP 连接表、路由、网卡流量; - 无权限隔离,普通用户 / 管理员输出无差异;
- 无周期性刷新
interval间隔参数,只能单次输出; - 仅区分 TCP/UDP,无细分 TCPv6/UDPv6 协议筛选。
二、第二代:Windows XP / Server 2003(运维实用化分水岭)
划时代新增核心能力(至今机房老旧脚本大量依赖)
-o参数:输出连接对应 PID 进程 ID首次实现端口与进程关联,解决端口占用溯源核心痛点;-b参数:管理员专属,输出端口对应的程序 + DLL 组件调用栈恶意端口、后门程序溯源标配,必须提升管理员权限;- 完整 IPv6 基础支持:
-p tcpv6 / udpv6筛选双栈连接; - 新增
interval间隔刷新功能,支持持续监控网络波动; - 完善
-s分协议统计,拆分 IPv4/IPv6、ICMP、TCP、UDP 独立计数;
仍缺失截图中企业级高级参数
-c 端口排序、-d DSCP 标记、-f FQDN 完整域名、-i TCP 连接时长、-q 非侦听端口、-t TCP 卸载状态、-x RDMA NetworkDirect、-y TCP 连接模板。三、第三代:Windows Vista / Server 2008(截图全套参数完整定型,最大功能扩充)
一次性补齐全部现代运维高级参数(当前 netstat /? 所有新增开关均来自 Vista)
- 流量 / QoS 类
-d:显示每条连接 DSCP 优先级标记,适配企业专线 QoS 排错;-i:统计 TCP 连接当前状态持续时长,排查僵死长连接;
- 端口 / 连接增强
-c:按端口数字升序排序输出列表;-q:展示非侦听 TCP 预留绑定端口,解决端口预留冲突;-f:外部 IP 解析为完整 FQDN 域名,外联资产审计;
- 高性能服务器专属
-t:TCP Offload 硬件卸载状态查看,网卡性能调优;-x:RDMA NetworkDirect 高速集群连接(HPC、数据库存储专用);-y:全局 TCP 连接模板配置基线审计;
配套底层架构升级
iphlpapi.dll重构,新增全套 IOCTL 读取内核 TCP 扩展元数据(DSCP、连接时长、RDMA 端点);- 双栈 TCP/IPv6 内核栈完善,所有参数原生兼容 IPv4/IPv6;
- 权限校验强化:
-o/-b严格校验管理员 UAC 令牌,普通用户隐藏进程信息; - 输出格式化标准化,错误码、协议状态字段统一,适配批处理
findstr过滤;
局限
四、第四代:Windows 7 / Server 2008 R2(稳定兼容迭代,无新增参数)
- 仅底层性能优化:超大连接表(上万并发)输出卡顿修复;
- IPv6、RDMA、DSCP 参数兼容性修复;
- 无任何新参数、新语法增加,完全继承 Vista 全套命令体系;
- 成为企业文件服务器、数据库服务器通用标准运维工具。
五、第五代:Windows 8 / 8.1 / Server 2012 R2(PowerShell 替代工具推出)
核心变化:微软推出面向对象网络模块,开始弱化 netstat
- 新增
NetTCPIPPowerShell 模块:Get-NetTCPConnection,结构化对象输出,支持管道筛选; netstat语法、参数完全冻结不再改动,仅做安全漏洞补丁修复;- RDMA
-x参数适配集群共享卷 CSV、Hyper-V 虚拟化; - 底层加固:读取进程 PID、组件栈增加 HVCI 内存完整性校验,防止信息泄露劫持。
六、第六代:Windows 10 / Win11 / Server 2016~2025(现行稳定版本)
核心规则:顶层命令永久冻结,仅底层兼容、安全优化,无功能新增
- 跨架构兼容:原生支持 ARM64 Windows 平板 / 云服务器,x86 与 ARM64 参数、输出行为完全一致;
- 安全加固:内核网络栈 API 增加访问控制,恶意程序无法劫持 netstat 读取进程端口映射;
- 场景定位收缩:仅保留三大兼容场景
- WinPE 离线故障排查(无 PowerShell 环境);
- 老旧 CMD 批处理自动化脚本兼容;
- 单机快速简易端口排查;
- 官方主推替代方案:PowerShell CIM 远程批量查询、对象化网络命令,云原生 / 批量运维优先使用;
- 100% 向下兼容:Vista 以来所有 netstat 批处理脚本无需修改,直接运行在 Win11。
七、各版本核心能力演进对照表
| 系统版本 | 标志性新增能力 | 缺失功能 |
|---|---|---|
| NT3.51 / NT4.0 | -a/-e/-n/-r/-s 基础 IPv4 连接、路由、流量统计 |
无 PID / 进程栈、无 IPv6、无高级 QoS/RDMA 参数、无间隔刷新 |
| XP / 2003 | -o PID 进程、-b 组件栈、IPv6 基础、interval 间隔刷新 |
DSCP、连接时长、RDMA、FQDN、端口排序、TCP 模板等全套高级参数 |
| Vista / 2008 | -c/-d/-f/-i/-q/-t/-x/-y 截图全部高级参数,完整双栈扩展 |
无远程批量查询能力,仅本地单机执行 |
| Win7 / 2008R2 | 性能优化、并发连接输出提速 | 无新增命令参数,架构完全不变 |
| Win8 / 2012R2 | PowerShell Get-NetTCPConnection 现代替代工具推出 |
netstat 无语法新增,仅底层安全补丁 |
| Win10/11/Server2025 | ARM64 全兼容、HVCI 安全加固 | 顶层参数永久冻结,无任何新开关新增 |
八、演进三大核心趋势总结
1. 功能补齐路线:基础网络查看 → 进程溯源安全排查 → 企业高性能服务器调优
- NT 初代:仅能看连接与流量,无法定位程序;
- XP:解决安全应急溯源核心痛点(PID / 进程栈);
- Vista:覆盖 QoS、RDMA、TCP 调优、长连接分析等数据中心刚需;
- Win10+:停止功能迭代,转为兼容维护。
2. 工具定位转型:主力运维工具 → 老旧兼容备用工具
netstat 仅作为兼容兜底工具,现代云原生、批量自动化不再推荐使用。3. 兼容优先策略
九、新旧工具底层定位区分
netstat.exe:文本输出传统工具,仅单机本地执行,无结构化数据、无远程批量能力;- PowerShell
Get-NetTCPConnection:现代云原生工具,底层同调用iphlpapi,增加 CIM 远程会话、对象管道筛选、导出 CSV 报表、多服务器并发查询,是当下自动化运维标准方案。
netstat.exe 与 Get-NetTCPConnection 完整解构|底层原理、依赖、执行链路、配套链
前置核心结论
- netstat.exe:传统控制台遗留工具(Win32 EXE),属于封装上层展示工具,底层调用 Windows IP Helper API;
- Get-NetTCPConnection:PowerShell Cmdlet,属于 NetTCPIP WMI 提供程序,原生基于 TCP/IP 驱动栈查询内核连接状态;
- 两者数据源同源(内核 TCP 控制块),但调用路径、依赖组件、能力边界、性能完全不同;
- Windows 自 Vista/Server2008 起推荐使用 PowerShell 网络 cmdlet,netstat 仅为兼容保留。
一、netstat.exe 深度拆解
1. 基础信息
%SystemRoot%\System32\netstat.exe
iphlpapi.dll(IP Helper API)2. 底层原理与执行链路
netstat.exe 启动 → 解析命令参数(-ano/-r/-b等)
↓
调用 iphlpapi.dll 提供的IP Helper系列API
├─ GetTcpTable2() / GetTcp6Table2() # 获取IPv4/IPv6 TCP连接表
├─ GetUdpTable2() / GetUdp6Table2() # 获取UDP监听表
├─ GetRouteTable2() # 获取路由表(netstat -r)
└─ GetOwnerModuleFromTcpEntry() # 根据连接获取PID(-o参数)
↓
iphlpapi.dll → 内核层和 tcpip.sys 驱动通信
↓
tcpip.sys 读取内核TCP控制块(TCB)、UDP控制块,返回连接信息
↓
netstat.exe 接收原始数据 → 格式化文本输出到控制台
关键参数底层行为
netstat -o:额外调用GetOwnerModuleFromTcpEntry查询连接归属 PID;netstat -b:在 PID 基础上继续调用 QueryModuleInformation,遍历进程加载模块,找出创建套接字的程序;⚠️-b需要管理员权限,性能很低;netstat -ano:最常用组合,列出地址、端口、状态、PID;netstat -r:读取系统路由表;netstat -s:读取协议统计信息(IP/ICMP/TCP/UDP)。
3. netstat.exe 配套依赖文件链
netstat.exe
├─直接依赖:iphlpapi.dll(核心,IP Helper API)
├─辅助依赖:kernel32.dll, advapi32.dll, ntdll.dll
├─内核驱动数据源:tcpip.sys(TCP/IP协议栈驱动)
├─可选支撑:ws2_32.dll Windows Sockets
└─配套关联工具:
tasklist.exe(配合PID查找进程)
findstr.exe(过滤端口、连接)
4. netstat 短板
- 输出纯文本,无法程序化筛选、排序;
- 获取进程名(
-b)效率差; - 不支持原生筛选指定端口、状态;
- 不支持直接导出结构化对象;
- 微软标记为传统兼容工具,不再新增功能。
二、Get-NetTCPConnection 深度拆解(PowerShell Cmdlet)
1. 基础信息
NetTCPIP.dll
2. 底层完整执行链路
PowerShell 执行 Get-NetTCPConnection
↓
加载 NetTCPIP.dll 托管cmdlet
↓
调用 Win32 WMI API,访问 root\StandardCimv2 命名空间
↓
NetTCPIP WMI Provider → 和内核 tcpip.sys 交互
↓
tcpip.sys 取出内核TCP连接控制块TCB数据
↓
数据封装为 CIM 对象(结构化对象,不是文本)
↓
返回PowerShell管道,可直接筛选、排序、导出CSV
重要区分:Get-NetTCPConnection 仅查询 TCP 连接(不含 UDP);查询 UDP 需要配套命令:Get-NetUDPEndpoint
3. 内置配套相关 Cmdlet(同模块 NetTCPIP)
Get-NetTCPConnection # TCP连接(等价netstat TCP部分)
Get-NetUDPEndpoint # UDP端点
Get-NetRoute # 路由表(netstat -r)
Get-NetIPInterface
Get-NetAdapter
Get-NetTcpSetting
4. 获取进程 PID / 进程名配套链路
Get-NetTCPConnection 默认输出包含 OwningProcess(PID)
# 原生组合,直接关联进程
Get-NetTCPConnection | Select LocalPort,RemoteAddress,State,OwningProcess,
@{Name='ProcessName';Expression={ (Get-Process -Id $_.OwningProcess).Name }}
5. 依赖配套链
Get-NetTCPConnection
├─上层载体:powershell.exe / pwsh.exe
├─核心模块:NetTCPIP.dll
├─中间层:WMI/CIM 基础设施(winmgmt服务)
├─内核数据源:tcpip.sys
├─配套服务:Windows Management Instrumentation (winmgmt)
└─联动工具:Get-Process(根据PID匹配进程名称)
三、netstat.exe VS Get-NetTCPConnection 横向对比
| 对比维度 | netstat.exe | Get-NetTCPConnection |
|---|---|---|
| 类型 | 传统控制台 EXE | PowerShell CIM Cmdlet |
| 数据格式 | 纯文本字符串 | 结构化对象 |
| 底层 API | IP Helper API(iphlpapi.dll) | CIM/WMI + NetTCPIP Provider |
| 数据源 | tcpip.sys TCB | tcpip.sys TCB【同源】 |
| UDP 查询 | 内置支持 netstat -anu | 需要单独 Get-NetUDPEndpoint |
| 端口过滤 | 依靠 findstr 文本筛选 | 原生 Where-Object 对象筛选 |
| 获取进程名 | -b 参数,性能差,需要管理员 | 自带 OwningProcess,配合 Get-Process 高效查询 |
| 远程计算机查询 | 不原生支持 | 配合 - CimSession 支持远程主机查询 |
| 微软定位 | 遗留兼容工具 | 现代官方推荐方案 |
四、同源底层:tcpip.sys(两者共同数据源)
tcpip.sys 请求:
通俗理解:tcpip.sys 是操作系统网络栈;netstat / Get-NetTCPConnection 只是两种不同的 “查询窗口”,只是窗口实现方式不一样。
五、典型实操链路模板
1)netstat 传统用法
:: 查看所有TCP/UDP连接,带PID
netstat -ano
:: 查找指定端口
netstat -ano | findstr ":443"
2)PowerShell 现代方案(推荐)
# 所有TCP连接
Get-NetTCPConnection
# 筛选监听端口
Get-NetTCPConnection -State Listen
# 筛选443端口并带出进程名
Get-NetTCPConnection -LocalPort 443 | Select LocalPort,State,OwningProcess,
@{n='Process';e={ (Get-Process -Id $_.OwningProcess).Name }}
# 远程主机查询(企业运维)
Get-NetTCPConnection -CimSession FILE01
六、高频底层误区澄清
-
❌误区:两者读取不同网络连接表✅真相:数据源完全一致,都是 tcpip.sys 内核 TCB;区别只在用户态调用 API。
-
❌误区:Get-NetTCPConnection 可以查看 UDP✅错误:仅 TCP;UDP 端点使用
Get-NetUDPEndpoint。 -
❌误区:netstat -b 和 PowerShell 获取进程方式等价✅不等价:netstat
-b遍历进程加载模块寻找 socket;PowerShell 直接从 TCB 读取 OwningProcess PID,性能更高。 -
❌误区:无管理员权限完全无法运行✅普通权限可以看到大部分连接;部分内核 / 系统进程连接、
-b参数、CIM 远程查询需要管理员权限。
netstat.exe 完整底层原理(用户程序 → Win32 API → 内核 TCP/IP 栈全链路拆解)
一、整体分层执行架构(自上而下)
1. 用户态前端:netstat.exe 可执行程序
- 无网络数据采集逻辑,仅做两件事:解析命令行参数、格式化内核返回的二进制数据为人类可读文本;
- 区分参数分支:连接表、网卡流量、路由、协议统计、进程映射,分别调用对应
iphlpapi.dll函数; - 权限校验分支:
- 普通参数(
-a/-n/-e/-r/-s):普通用户令牌即可执行; -o(PID)、-b(程序组件栈):校验管理员 UAC 提升令牌,普通用户直接返回空进程信息;
- 普通参数(
- 输出处理:反向 DNS 解析(无
-n时触发)、FQDN 域名格式化、按端口排序(-c)、周期循环刷新(interval)。
2. 系统 API 中间层:iphlpapi.dll(核心桥梁)
| 功能模块 | 核心 API 函数 | 对应 netstat 参数 |
|---|---|---|
| TCP/UDP 连接表读取 | GetTcpTable2 / GetUdpTable2 / GetTcp6Table2 |
-a/-n/-o/-i/-d/-q |
| 网卡以太网流量统计 | GetIfTable2 / GetIfEntry2 |
-e |
| 系统路由表读取 | GetIpForwardTable2 |
-r |
| 全协议收发统计 | GetIpStatisticsEx / GetTcpStatisticsEx |
-s/-p proto |
| RDMA/NetworkDirect 高速连接 | GetNetworkDirectTable |
-x |
| TCP 全局模板配置 | GetTcpTemplateTable |
-y |
| 进程 - 端口映射查询 | GetOwnerModuleFromTcpEntry |
-b(管理员专属) |
tcpip.sys,读取内核内存中维护的网络元数据。3. 内核层:tcpip.sys Windows TCP/IP 协议驱动(数据源核心)
- TCP 连接控制块 TCB:存储每条 TCP 连接五元组、状态、持续时长、DSCP 标记、卸载标记、关联 PID;
- UDP 端点表:所有侦听 / 绑定 UDP 端口记录;
- IP 路由表:系统静态 / 动态路由缓存(
netstat -r读取); - 协议统计计数器:IP 分片、TCP 重传、ICMP 错误、丢包、收发字节计数器;
- 网卡接口 MIB 计数器:每块网卡收发数据包、错误、丢弃、广播统计;
- RDMA 高速端点池:NetworkDirect 集群专用连接记录;
- TCP 模板注册表缓存:系统全局 TCP 调优模板配置;
ntoskrnl.exe:进程管理器,提供 PID 与进程模块路径查询接口;ndis.sys:网卡驱动栈,提供二层流量统计;tcpipoffload.sys:TCP 硬件卸载状态管理(对应-t)。
4. 硬件层:网卡 NDIS 驱动
tcpip.sys供 netstat 读取。二、核心功能底层细分原理
1. 端口 / 连接查询(-a/-n/-o/-i/-d/-q)
- 调用
GetTcpTable2读取内核全部 TCB(TCP 控制块); - 每条 TCB 内置字段:本地 IP / 端口、远端 IP / 端口、连接状态、创建时间戳、DSCP 值、关联 PID、卸载状态;
-i底层逻辑:用当前系统时间减去 TCB 创建时间,计算连接已持续时长;-d底层逻辑:直接读取 TCB 内 QoS DSCP 标记字段;-q底层逻辑:读取未侦听绑定端口(仅调用 bind、未 listen 的 TCP 预留端点);-o底层逻辑:TCB 自带OwnerPid字段,直接返回进程 ID,无需额外内核查询。
2. -b 进程 / 组件栈溯源(管理员专属,权限隔离核心)
- 前置依赖:必须管理员令牌,普通用户内核接口直接拒绝访问;
- 执行链路:
- 通过 TCB 获取
OwnerPid; - 调用内核进程 API,读取该 PID 加载的全部 DLL 模块;
- 逐层反向追溯模块调用栈,定位创建套接字的可执行文件;
- 通过 TCB 获取
- 性能损耗:需要遍历进程模块链表,上万并发连接时会产生明显卡顿。
3. 网卡流量统计 -e
- 接收 / 发送总字节、总数据包;
- 单播、多播、广播包计数;
- 错误包、丢弃包、CRC 校验失败计数;
计数器由网卡硬件 / NDIS 驱动实时更新,永久驻留内核内存。
4. 协议统计 -s
tcpip.sys 为 IP/ICMP/TCP/UDP(IPv4+IPv6)分别维护独立统计计数器:- IP:分片、重组、丢弃、路由失败;
- TCP:连接建立 / 关闭、重传、超时、窗口缩放事件;
- ICMP:入 / 出报文、应答、错误报文;
API 一次性批量读取全部计数器,netstat 格式化分协议输出。
5. 路由表 -r
GetIpForwardTable2,数据源与route print完全一致:- 目标网段、子网掩码、网关、接口索引、跃点 Metric;
区分永久静态路由、动态 OSPF/RIP 路由、直连网段。
6. RDMA -x、TCP 模板 -y、TCP 卸载 -t
-x:读取内核 NetworkDirect RDMA 端点池,面向高性能 HPC / 数据库集群;-t:读取 TCB 内 TCP Offload 硬件卸载标记,判断是否启用网卡分段卸载;-y:不读取实时连接,直接读取注册表 TCP 全局模板配置缓存,独立 API,无法与其他参数组合。
7. 周期刷新 interval
三、权限隔离底层安全机制
- 普通用户限制
内核
tcpip.sys、进程管理器做访问控制:普通令牌调用读取OwnerPid、进程模块栈的 API 会返回空值,所以-o/-b看不到进程信息; - 管理员 UAC 提升
右键「以管理员身份」启动终端,进程令牌携带高权限 SID,内核放开进程 - 端口映射接口访问;
- 安全防护目的:防止低权限恶意程序扫描系统所有端口对应的进程,窃取内网服务、后门程序信息。
四、DNS 域名解析底层逻辑(有无-n核心差异)
- 不带
-n:对每条远端 IP 调用gethostbyaddr反向 DNS 查询,发送 DNS 请求解析 FQDN 域名;- 内网无 DNS 服务器、公网延迟高时会造成输出卡顿;
- 带
-n:完全跳过 DNS 解析,直接输出纯数字 IP + 端口,大幅提升查询速度,批量脚本、实时监控必用; -f:强制输出完整 FQDN,普通模式仅输出主机短名。
五、netstat 与 PowerShell Get-NetTCPConnection 底层异同
相同底层根基
iphlpapi.dll 读取tcpip.sys内核网络元数据,数据源完全一致。核心底层差异
| 维度 | netstat.exe | Get-NetTCPConnection(PowerShell) |
|---|---|---|
| 数据输出 | 纯文本字符串,无结构化字段,只能 findstr 模糊过滤 | 原生.NET 对象,字段可直接管道筛选、导出 CSV |
| 远程能力 | 仅本地单机读取内核,无远程接口 | 支持 CIM/WMI 远程会话,批量查询多台服务器内核网络栈 |
| 性能 | 文本格式化开销大,上万连接卡顿 | 对象二进制传输,过滤逻辑在内核 / API 层完成,无需全量文本输出 |
| 扩展能力 | 无自定义字段、无批量导出 | 可联合Get-Process直接关联进程名,无需二次 PID 匹配 |
| 适用环境 | WinPE、老旧 CMD 批处理、无 PowerShell 极简系统 | 现代 Windows Server、云原生自动化、批量运维流水线 |
六、常见底层故障根源
netstat -b卡顿 / 无模块输出底层:未管理员权限、进程已退出 TCB 残留、大量并发连接导致进程模块遍历阻塞;- 执行输出极慢
底层:未加
-n触发大量反向 DNS 解析,DNS 服务器无响应; - 看不到 PID 进程号
底层:终端未提升管理员 UAC 令牌,内核拦截进程映射 API;
-sTCP 重传计数持续上涨底层:内核tcpip.sys检测到链路丢包,触发 TCP 重传机制,属于链路层故障;-xRDMA 无输出底层:服务器未启用 NetworkDirect/RDMA 网卡驱动,内核无 RDMA 端点池。
netstat 完整手册解读(截图 netstat /? 全覆盖)
一、工具总述
netstat.exe 是 Windows 传统 TCP/IP 网络诊断工具,用于查看TCP/UDP 连接、侦听端口、路由表、协议统计、进程关联、网卡流量,底层依托 iphlpapi.dll 读取内核网络栈数据;现代 Windows 主推 PowerShell Get-NetTCPConnection 对象化替代,但 netstat 因兼容老旧批处理、WinPE 仍广泛用于故障排查。
-b/-o)必须管理员终端执行。二、全参数功能对照表(按截图顺序)
| 参数 | 完整功能说明 | 运维典型场景 |
|---|---|---|
-a |
显示所有TCP/UDP 连接 + 全部侦听端口(包含服务、后台程序、非侦听绑定端口) | 端口扫描、木马后门排查、防火墙放行校验 |
-b |
显示创建连接 / 端口对应的可执行程序与组件调用栈,逐层展示 DLL 依赖 | 定位恶意程序、异常端口归属进程,溯源端口占用 |
-c |
按端口数字升序排序进程列表 | 快速检索指定端口条目 |
-d |
显示每条连接的 DSCP 标记值(QoS 流量优先级) | 企业专线 QoS 策略校验、流量分级排错 |
-e |
输出以太网网卡收发统计(数据包、字节、错误、丢弃),可搭配 -s |
网卡丢包、流量过载、二层故障排查 |
-f |
将外部 IP 解析为完整 FQDN 域名 | 溯源外部访问服务器域名、外联资产审计 |
-i |
显示 TCP 连接处于当前状态的持续时长 | 长连接、闲置连接、僵死会话排查 |
-n |
纯数字输出,不解析 IP / 端口域名,无 DNS 解析延迟 | 高频实时监控、批量脚本、防止 DNS 解析卡顿 |
-o |
每条连接附带对应进程 PID | 配合任务管理器定位占用端口程序 |
-p proto |
筛选指定协议连接;支持 tcp/udp/tcpv6/udpv6/ip/icmp;搭配 -s 可单独输出单协议统计 |
单独排查 IPv6 UDP、ICMP 异常流量 |
-q |
额外展示非侦听 TCP 绑定端口(未建立会话的预留端口) | 程序端口预留冲突、端口占用预检测 |
-r |
打印系统路由表,等效简化版 route print |
快速查看默认网关、静态路由 |
-s |
分协议输出完整收发统计、丢包、重传、错误计数(IP/ICMP/TCP/UDP 双栈) | 网络性能瓶颈、TCP 重传、ICMP 攻击排查 |
-t |
展示 TCP 连接卸载状态(Offload TCP) | 网卡硬件卸载功能故障、内核 TCP 栈调优 |
-x |
列出 NetworkDirect RDMA 高速连接、侦听器、共享端点 | 服务器 RDMA、HPC 高性能存储 / 计算集群排错 |
-y |
输出所有 TCP 连接的 TCP 模板配置,无法与其他参数组合 | 全局 TCP 参数模板基线审计、延迟调优 |
interval(数字) |
周期性刷新统计,间隔秒数;Ctrl+C 终止刷新 |
实时监控流量、连接波动、端口持续占用 |
三、高频运维组合命令(实战示例)
1. 最常用:数字显示所有端口 + 进程 PID(无 DNS 延迟,排错首选)
netstat -ano
2. 溯源端口对应的程序与组件栈(管理员)
netstat -ano -b
3. 持续实时监控 TCP 连接,每 2 秒刷新
netstat -an 2
4. 仅查看 IPv4 TCP 连接,按端口排序
netstat -ano -p tcp -c
5. 查看完整网卡流量统计 + 分协议网络统计
netstat -es
6. 查看路由表(快速替代 route print)
netstat -r
7. 查看 TCP 连接持续时长、QoS DSCP 标记
netstat -and -i
8. 输出 RDMA 高速网络连接(数据库 / 高性能集群)
netstat -x
四、底层执行原理
- 用户层 netstat.exe:仅参数解析、文本格式化输出;通过
iphlpapi.dll调用 Windows 网络管理 API; - 内核网络栈 tcpip.sys:维护连接表、端口侦听列表、协议统计、路由、网卡流量计数器;
- 权限区分:
- 普通用户:仅可读取基础连接、端口、流量统计;
- 管理员令牌:才可读取进程 PID(
-o)、程序组件栈(-b),内核限制普通用户获取进程 - 端口映射防信息泄露;
- DNS 解析逻辑:不带
-n/-f时自动反向解析 IP 域名,会产生 DNS 请求、延迟输出;-n直接跳过解析。
五、核心业务应用场景
- 安全应急排查:
netstat -ano -b溯源陌生外联端口、木马后门、异常外联进程; - 服务端口冲突排错:定位 80/443/3389 等端口被哪个程序占用;
- 网络性能调优:
netstat -s查看 TCP 重传、分片丢失、ICMP 错误,定位链路抖动; - QoS 专线校验:
-d查看 DSCP 标记是否正常下发; - 服务器集群 / RDMA 运维:
-x排查 NetworkDirect 高速存储连接; - 自动化批量审计:
netstat -an导出端口基线,对比异常开放端口; - 路由快速校验:
netstat -r快速查看网关、静态路由,无需记忆 route 命令。
六、避坑关键提醒 ⚠️
-b参数消耗大量系统资源,扫描大型端口列表会卡顿,必须管理员权限;- 不加
-n会触发大量反向 DNS 解析,内网无 DNS 服务器时输出极慢; - 普通管理员 UAC 未提升时,
-o/-b会显示空 / 拒绝访问; -yTCP 模板参数无法搭配其他筛选参数,只能单独执行;- Windows10/11 推荐 PowerShell 现代化替代:
Get-NetTCPConnection,支持对象管道筛选、远程批量查询;netstat 仅用于兼容老旧脚本与 WinPE 离线环境。
七、PowerShell 现代替代对比
| netstat 功能 | PowerShell 等价命令优势 |
|---|---|
netstat -ano |
Get-NetTCPConnection,结构化对象,可按端口 / 状态 / PID 精准筛选 |
| 端口进程溯源 | Get-NetTCPConnection | Select LocalPort,OwningProcess,@{n="Process";e={Get-Process -Id $_.OwningProcess}} 直接输出进程名 |
| 协议统计 | Get-NetIPStatistics,分 IPv4/IPv6 输出标准化统计 |
| 远程批量运维 | -CimSession 远程批量查询多服务器连接,netstat 仅本地单机执行 |
netstat.exe 完整应用场景(分安全应急、网络排错、服务器运维、自动化基线、虚拟化高性能集群五大类,配套可直接运行命令)
一、端口占用 / 服务故障排查(最常用单机运维场景)
场景 1:定位端口占用程序(80/3389/443 / 数据库端口冲突)
netstat -ano | findstr ":80"
:: 根据返回PID,查看进程名称
tasklist | findstr 1234
:: 管理员查看完整程序+依赖DLL栈
netstat -ano -b | findstr ":3306"
场景 2:全盘扫描本机所有开放侦听端口,梳理服务基线
netstat -an
:: 仅查看TCP侦听端口
netstat -an -p tcp | findstr "LISTENING"
场景 3:排查预留未侦听端口冲突(程序 bind 绑定失败)
-q 查看仅绑定未监听的 TCP 预留端口,解决程序端口初始化报错netstat -anq
二、网络连通、链路性能故障排查
场景 1:实时监控 TCP 连接波动,排查断连、频繁重连
netstat -an 2
场景 2:分析僵死长连接、闲置会话(数据库 / 堡垒机超时异常)
-i 查看每条 TCP 连接持续运行时长,定位长时间无交互僵死连接netstat -ani
场景 3:链路丢包、TCP 重传、分片异常性能诊断
netstat -s
:: 仅查看IPv4 TCP统计
netstat -s -p tcp
场景 4:QoS 专线 DSCP 标记校验(企业专线流量分级失效)
-d 查看每条连接 DSCP 优先级值,验证路由 / 防火墙 QoS 策略是否生效netstat -and
场景 5:网卡二层丢包、流量过载排查
-e 读取网卡原生收发统计,查看丢弃、错误、广播风暴计数netstat -e
:: 联合协议统计综合分析
netstat -es
场景 6:TCP 硬件卸载故障排查(网卡 Offload 导致卡顿 / 断流)
-t 查看 TCP 卸载状态,定位硬件分段卸载引发的网络异常netstat -ant
三、安全应急、病毒 / 后门外联溯源(红蓝对抗、勒索病毒排查)
场景 1:溯源陌生外联 IP、恶意后门程序
:: 数字快速定位外联PID
netstat -ano | findstr "ESTABLISHED"
:: 管理员完整溯源程序与DLL调用链
netstat -ano -b
场景 2:外联域名资产审计,反向解析外部 IP 完整 FQDN
-f 将外联 IP 解析为完整域名,识别访问的外部服务netstat -anf
场景 3:批量导出端口基线,对比异常新增开放端口
netstat -an > C:\port_baseline.txt
场景 4:排查木马隐蔽非标准侦听端口
netstat -a
四、路由、网关快速校验(轻量化路由排查,替代 route print)
netstat -r
五、高性能集群、RDMA / 数据库服务器专属场景
场景 1:HPC、数据库 RDMA 高速连接排查(NetworkDirect)
-x 查看 RDMA 侦听器、共享端点、高速直连会话netstat -x
场景 2:全局 TCP 参数基线审计、延迟调优模板核查
-y 读取系统 TCP 连接模板配置,用于服务器网络调优基线归档netstat -y
六、自动化、批量机房基线运维(CMD 批处理 / GPO 开机脚本)
场景 1:服务器开机自动导出网络审计日志
@echo off
set log=C:\Net_Log_%date:/=-%.txt
echo ===== 端口连接清单 ===== >> %log%
netstat -an >> %log%
echo ===== 网卡流量统计 ===== >> %log%
netstat -e >> %log%
echo ===== 协议错误统计 ===== >> %log%
netstat -s >> %log%
场景 2:按端口排序批量检索业务端口
-c 端口升序输出,快速检索业务固定端口段netstat -anc
场景 3:WinPE 离线故障抢救(无 PowerShell 极简环境)
七、IPv6 双栈网络专项运维
场景:单独筛选 IPv6 连接、统计 IPv6 流量错误
:: 仅查看IPv6 TCP连接
netstat -an -p tcpv6
:: 仅输出IPv6全套协议统计
netstat -s -p ipv6
八、分场景参数选型速查表
| 业务场景 | 推荐组合参数 | 核心价值 |
|---|---|---|
| 日常端口占用快速排查 | -ano |
纯数字无延迟,带进程 PID |
| 恶意程序完整溯源 | -ano -b |
展示程序与 DLL 调用栈,必须管理员 |
| 实时监控网络波动 | -an 2 |
2 秒周期性刷新连接快照 |
| QoS/DSCP 专线校验 | -and |
查看每条连接流量优先级标记 |
| 网卡丢包、流量统计 | -e / -es |
二层网卡硬件错误计数 |
| TCP 链路重传、分片故障 | -s |
内核协议层完整错误统计 |
| RDMA 高性能集群排查 | -x |
查看高速 NetworkDirect 连接 |
| 安全基线端口导出 | -an |
无冗余解析,适合日志归档 |
| 长连接僵死会话分析 | -ani |
显示 TCP 连接持续时长 |
| 快速查看系统路由 | -r |
轻量化路由查询 |
九、适用环境边界说明
- 适用环境:Windows 全系列桌面 / 服务器、WinPE 离线镜像、老旧机房 CMD 批处理自动化、无 PowerShell 极简系统;
- 不推荐场景:大规模云服务器批量运维、远程多主机并发查询,优先使用 PowerShell
Get-NetTCPConnection+ CIM 远程会话; - 权限边界:端口进程溯源(
-o/-b)必须管理员提升终端,普通用户无法读取进程 PID 与程序路径。
netstat.exe 特殊 / 另类实战示例(常规教程极少覆盖,适配安全溯源、批量审计、底层性能、离线抢救、自动化脚本小众场景)
前置通用约束
- 带
-b / -o参数必须管理员终端; - 批量脚本优先加
-n关闭 DNS 解析,消除卡顿; - 间隔刷新、RDMA、TCP 模板、DSCP、连接时长均为小众专业参数。
一、安全应急溯源类(隐蔽恶意外联、木马后门深度排查)
1. 实时持续监控外联建立行为(入侵捕获)
:loop
cls
netstat -ano | findstr ESTABLISHED
timeout /t 1 /nobreak >nul
goto loop
2. 完整溯源外联程序 + 全套 DLL 依赖栈,导出审计日志
netstat -ano -b > C:\security_net_trace.log
3. 反向解析所有外部 IP 完整 FQDN 域名,识别境外恶意服务器
-f 输出完整域名,普通参数仅显示 IP,适合外联资产审计netstat -anf | findstr "ESTABLISHED"
4. 检索所有非标准高危侦听端口(1024 以上陌生端口)
netstat -an | findstr LISTENING | findstr /v "0.0.0.0:[0-9][0-9][0-9]$"
二、底层网络性能小众排查(QoS、长连接、TCP 卸载、僵死会话)
1. 查看每条 TCP 连接持续时长 + DSCP 优先级标记(专线 QoS 故障专用)
netstat -and -i
2. 批量统计 TCP 重传、分片、超时错误,导出性能报表
netstat -s -p tcp > C:\tcp_perf_stat.txt
findstr "重传\|超时\|丢弃" C:\tcp_perf_stat.txt
3. 查看 TCP 硬件卸载 Offload 状态,解决网卡断流、卡顿
-t 小众参数,定位网卡分段卸载导致的内核 TCP 栈异常netstat -ant
4. 筛选长时间僵死闲置 TCP 长连接(数据库 / 堡垒机堆积会话)
netstat -ani | findstr /r "[0-9][0-9]:[0-9][0-9]:[0-9][0-9]"
5. 同时输出网卡二层丢包 + 三层协议统计,完整链路诊断
-e -s 同时读取网卡硬件错误与 TCP/IP 协议层统计netstat -es
三、端口冲突、预留端口小众场景(程序 bind 绑定失败专用)
1. 查看系统仅绑定未监听的预留 TCP 端口(普通 netstat -a 无法显示)
-q 特殊参数,排查端口预占用导致服务启动失败netstat -anq
2. 按端口数字升序完整排序,批量检索业务端口段
-c 端口从小到大排列,快速定位连续端口占用netstat -anc
3. 单独筛选 IPv6 UDP 侦听端口(双栈服务器冷门排查)
netstat -an -p udpv6 | findstr LISTENING
四、高性能集群 / 数据库专属小众示例(RDMA NetworkDirect)
1. 查看 RDMA 高速直连端点、侦听器、共享内存连接
-x 仅 HPC、数据库、分布式存储服务器可用,普通办公机无输出netstat -x
2. 导出系统全局 TCP 连接模板基线,用于多服务器调优对比
-y 独立参数,无法搭配其他筛选开关,归档 TCP 全局配置netstat -y > C:\tcp_template_baseline.txt
五、自动化批处理 / 基线审计另类脚本(OEM 镜像、GPO 开机自检)
1. 开机自动生成带时间戳完整网络基线档案
@echo off
set log=C:\Network_Baseline_%date:/=-%_%time::=-%.txt
echo ========== 全量端口连接清单 ========== >> %log%
netstat -an >> %log%
echo. >> %log%
echo ========== 网卡收发流量统计 ========== >> %log%
netstat -e >> %log%
echo. >> %log%
echo ========== TCP/IP协议层错误统计 ========== >> %log%
netstat -s >> %log%
echo. >> %log%
echo ========== 系统路由表 ========== >> %log%
netstat -r >> %log%
echo 基线采集完成,日志路径:%log%
2. 批量检索指定端口段全部连接(如 3306、1433 数据库段)
@echo off
for %%p in (1433 3306 6379 22) do (
echo ===== 端口 %%p 连接清单 =====
netstat -ano | findstr :%%p
)
六、轻量化路由快速排查(替代 route print 极简用法)
单命令快速查看网关、静态路由、直连网段
netstat -r
七、WinPE 离线抢救特殊用法(无 PowerShell 极简环境)
:: PE内离线读取目标系统遗留网络信息,导出U盘
netstat -an > E:\offline_host_port_log.txt
八、避坑型特殊组合(解决常见卡顿、解析延迟)
1. 关闭 DNS 解析极速实时监控(内网无 DNS 服务器必用)
-n 禁用反向域名解析,彻底消除输出卡顿netstat -an 3
2. 管理员一键全量扫描 + 溯源,跳过 DNS 解析提速
netstat -ano -bn
九、小众参数分类速记
| 小众特殊参数 | 专属另类场景 |
|---|---|
-i |
长连接僵死会话时长排查 |
-d |
QoS DSCP 流量优先级校验 |
-q |
预留未监听端口冲突排查 |
-c |
端口升序批量检索 |
-t |
TCP 硬件卸载故障排错 |
-x |
RDMA 高性能集群连接查看 |
-y |
TCP 全局模板基线归档 |
-f |
外联 IP 完整 FQDN 域名解析取证 |
interval 数字 |
实时循环监控外联行为捕获 |
netstat 高精度时钟、无截断、完整时间采集特殊另类示例
核心前置说明
netstat -i原生输出 TCP 连接持续时长,格式时:分:秒,内核 TCB 时间戳精度为毫秒级,但控制台文本输出仅格式化到秒;- 默认 CMD 输出存在换行截断、列宽度截断、长连接时间折行丢失问题;
- 配套
findstr /r、for /f、PowerShell 混合脚本实现:无截断完整输出、高精度时间提取、毫秒级时序日志、循环时钟快照留存。 - 全部脚本区分 CMD 原生批处理 / PowerShell 高精度版本,管理员运行。
一、无截断完整输出:解决控制台列截断、长时间折行丢失
1. CMD 原生:重定向文件规避窗口宽度截断(核心无截断方案)
:: 全量信息(时长+DSCP+PID+完整五元组)写入日志,永不截断
netstat -and -i > C:\netstat_full_no_trunc.txt
:: 事后读取完整无截断日志
type C:\netstat_full_no_trunc.txt
2. PowerShell 管道完整导出 CSV(结构化零截断,保留原始毫秒时间戳)
# 读取内核TCB原始创建时间(高精度DateTime,毫秒级),无列截断
Get-NetTCPConnection | Select-Object `
LocalAddress,LocalPort,RemoteAddress,RemotePort,State,OwningProcess,`
@{Name="CreateTime";Expression={$_.CreationTime}},`
@{Name="AliveSeconds";Expression={(New-TimeSpan -Start $_.CreationTime).TotalSeconds}} |
Export-Csv C:\tcp_full_highprecise.csv -NoTypeInformation -Encoding UTF8
3. 禁用 CMD 自动换行截断:加宽控制台缓冲区
:: 设置缓冲区宽300字符,高5000行
mode con cols=300 lines=500
netstat -and -i
二、高精度时钟循环快照:带系统时间戳标记每轮采集(精确到毫秒)
示例 1:CMD 循环采集,每 2 秒输出系统当前精确时间 + 完整连接时长(无截断日志)
@echo off
mode con cols=300 lines=9999
set log=C:\netstat_time_precise.log
:loop
:: 输出当前系统时间(到0.01秒)作为采集时钟基准
echo ====================== 采集时间:%date% %time% ====================== >> %log%
:: 无截断完整连接表(时长+DSCP)
netstat -and -i >> %log%
echo. >> %log%
timeout /t 2 /nobreak >nul
goto loop
- 特性:每条网络快照前置系统 wall-clock 时钟,可精确对比连接存活时长与系统真实时间差;
- 解决原生
netstat -i只显示相对时长、无绝对采集时间的缺陷。
示例 2:PowerShell 毫秒级高精度循环监控(原生内核时间戳,精度远高于 CMD)
while($true){
# 采集绝对系统时间 毫秒精度
$now = Get-Date -Format "yyyy-MM-dd HH:mm:ss.fff"
Write-Host "===== 快照时间 $now ====="
# 读取TCP连接原始创建时间(内核毫秒级,无格式化丢失)
Get-NetTCPConnection | Select LocalPort,RemoteAddress,State,OwningProcess,CreationTime
Start-Sleep -Milliseconds 500
}
三、提取、换算高精度连接存活时长(突破netstat -i仅秒级显示限制)
底层原理
netstat -i 只是把内核毫秒时间差格式化为 hh:mm:ss,原始 TCB 存储总毫秒数,纯 netstat 无法取出,必须 PowerShell 读取原生字段获取高精度。示例:输出每条 TCP 连接总存活毫秒数
Get-NetTCPConnection | ForEach-Object {
$liveSpan = New-TimeSpan -Start $_.CreationTime
[PSCustomObject]@{
LocalIP = $_.LocalAddress
LocalPort = $_.LocalPort
RemoteIP = $_.RemoteAddress
RemotePort = $_.RemotePort
ConnectionState = $_.State
PID = $_.OwningProcess
CreateTime = $_.CreationTime.ToString("yyyy-MM-dd HH:mm:ss.fff")
LiveTotalMs = $liveSpan.TotalMilliseconds # 原生毫秒高精度
LiveFormatS = $liveSpan.TotalSeconds.ToString("0.000")
}
}
四、特殊组合:同时输出 DSCP + 连接时长 + PID + 无截断 + 时间戳归档
完整批处理一体化脚本(机房长时间链路监控专用)
@echo off
:: 加宽控制台防止截断
mode con cols=350 lines=10000
set save_log=D:\netstat_high_time_log_%date:/=-%.log
echo 启动高精度网络时序采集,日志:%save_log%
:cycle
:: 写入绝对系统时间戳(精确到0.01秒)
echo ======================================
echo 采集时刻:%date% %time%
echo ====================================== >> %save_log%
:: -a 全连接 -n 关闭DNS加速 -d DSCP -i 连接时长 -o PID 完整无截断输出
netstat -andio >> %save_log%
echo. >> %save_log%
timeout /t 1 /nobreak >nul
goto cycle
五、另类时序分析用法:筛选超过指定毫秒 / 秒的僵死长连接
1. CMD 仅靠 netstat 过滤(秒级粗筛,适合快速排查)
-i输出格式 01:00:xx)mode con cols=300
netstat -and -i | findstr /r "^.* [0-9][0-9]:[0-9][0-9]:[0-9][0-9]"
2. PowerShell 高精度毫秒阈值过滤(精准,无精度丢失)
Get-NetTCPConnection | Where-Object {
(New-TimeSpan -Start $_.CreationTime).TotalMilliseconds -gt 3600000
} | Select LocalPort,RemoteAddress,CreationTime
六、关键精度 / 截断底层补充说明
- netstat 原生时间精度局限
netstat -i仅对外输出秒级格式化字符串,内核 TCB 内部是毫秒级时间戳,netstat 工具做了格式化截断,无法直接拿到毫秒;想要毫秒精度必须依赖Get-NetTCPConnection读取原生 CreationTime 字段。 - 截断产生根源
CMD 窗口可视列宽有限,长五元组、长时长字符串会自动折行丢失后半段;重定向至文件
> log.txt完全规避截断,缓冲区mode con cols=xxx为屏幕临时解决方案。 - 时钟两类区分
- 相对时钟:
netstat -i连接存活时长(相对创建时间) - 绝对时钟:系统
%time%/ PowerShellGet-Date .fff(真实墙上时间,用于时序对齐、故障溯源时间线)
- 相对时钟:
Get-NetTCPConnection 高精度时间、无截断、小众另类完整示例
核心底层优势(对比 netstat)
- 原生毫秒级时间戳:
CreationTime内核原始创建时间,精确到yyyy-MM-dd HH:mm:ss.fff,无格式化秒级截断; - 结构化对象零截断:无 CMD 窗口列宽折行丢失,导出 CSV/JSON 完整保留全部字段;
- 内置绝对时间 + 相对存活时长双精度计算,原生支持毫秒阈值过滤;
- 原生 CIM 远程批量多服务器采集统一时间基线;
- 可联合
Get-NetNeighbor/Get-Process一次性带出进程、ARP、网卡信息。
前置约束
一、无截断完整输出方案(彻底解决文本换行、列宽截断)
1. 完整对象列表,加宽格式化无屏幕截断
Format-List * 横向全字段展开,不受控制台宽度限制,所有隐藏属性全部打印# 完整展开每条TCP连接所有原生字段,无任何截断
Get-NetTCPConnection -AddressFamily IPv4 | Format-List *
2. 导出 CSV 结构化永久归档(生产环境零丢失,推荐)
$outPath = "C:\tcp_full_archive_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv"
Get-NetTCPConnection | Select-Object `
LocalAddress,LocalPort,RemoteAddress,RemotePort,State,OwningProcess,InterfaceIndex,
@{Name="CreateTimeMs";Expression={$_.CreationTime.ToString("yyyy-MM-dd HH:mm:ss.fff")}},
@{Name="AliveTotalMs";Expression={(New-TimeSpan -Start $_.CreationTime).TotalMilliseconds}},
@{Name="AliveTotalSec";Expression={(New-TimeSpan -Start $_.CreationTime).TotalSeconds.ToString("0.000")}} |
Export-Csv -Path $outPath -NoTypeInformation -Encoding UTF8
Write-Host "完整无截断日志输出至:$outPath"
3. JSON 无损导出(适合自动化日志解析、SIEM 对接)
Get-NetTCPConnection | ConvertTo-Json -Depth 5 | Out-File C:\tcp_full.json -Encoding utf8
4. 远程批量导出多服务器无截断日志
$servers = @("SRV01","SRV02","SRV03")
$cred = Get-Credential
$cimSess = New-CimSession -ComputerName $servers -Credential $cred
Invoke-CimSession -CimSession $cimSess -ScriptBlock {
Get-NetTCPConnection -AddressFamily IPv4 | Select-Object `
LocalPort,RemoteAddress,OwningProcess,
@{Name="CreateMs";Exp={$_.CreationTime.ToString("yyyy-MM-dd HH:mm:ss.fff")}},
@{Name="LiveMs";Exp={(New-TimeSpan -Start $_.CreationTime).TotalMilliseconds}}
} | Export-Csv C:\remote_tcp_baseline.csv -NoType -Encoding UTF8
二、超高精度时间处理(绝对墙钟时间 + 毫秒级相对存活时长)
1. 输出每条连接 毫秒级创建时间 + 总存活毫秒(核心高精度示例)
netstat -i 仅秒级显示限制,原生读取内核 TCB 毫秒时间戳Get-NetTCPConnection | ForEach-Object {
$life = New-TimeSpan -Start $_.CreationTime
[PSCustomObject]@{
本机IP = $_.LocalAddress
本机端口 = $_.LocalPort
远端IP = $_.RemoteAddress
远端端口 = $_.RemotePort
连接状态 = $_.State
进程PID = $_.OwningProcess
# 绝对创建时间 毫秒精度
连接创建绝对时间 = $_.CreationTime.ToString("yyyy-MM-dd HH:mm:ss.fff")
# 总存活毫秒(最高精度)
总存活毫秒 = $life.TotalMilliseconds
# 格式化时分秒毫秒
存活时分秒毫秒 = "$($life.Hours)h $($life.Minutes)m $($life.Seconds)s $($life.Milliseconds)ms"
}
} | Format-Table -AutoSize
2. 定时循环高精度快照,每次快照标记全局采集绝对毫秒时间
while($true){
# 快照基准全局时间(毫秒)
$snapTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss.fff"
Write-Host "`n===== 全局采集基准时间:$snapTime =====" -ForegroundColor Cyan
Get-NetTCPConnection | Select-Object `
LocalPort,RemoteAddress,State,OwningProcess,
@{Name="ConnCreateMs";Exp={$_.CreationTime.ToString("HH:mm:ss.fff")}},
@{Name="LiveMs";Exp={(New-TimeSpan -Start $_.CreationTime).TotalMilliseconds}}
Start-Sleep -Milliseconds 500
}
3. 精准阈值过滤:仅输出存活超过指定毫秒的僵死长连接
# 筛选存活大于 3600000ms = 1小时 的TCP长连接
$thresholdMs = 3600000
Get-NetTCPConnection | Where-Object {
(New-TimeSpan -Start $_.CreationTime).TotalMilliseconds -gt $thresholdMs
} | Select LocalPort,RemoteAddress,State,CreationTime
三、小众另类组合用法(常规教程不覆盖)
1. 一次性带出进程名称 + TCP 高精度时间(无需二次 tasklist 匹配)
Get-NetTCPConnection | ForEach-Object {
$life = New-TimeSpan -Start $_.CreationTime
$proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
[PSCustomObject]@{
PID = $_.OwningProcess
进程名 = $proc.Name
远端地址 = $_.RemoteAddress
端口 = $_.LocalPort
创建时间 = $_.CreationTime.ToString("yyyy-MM-dd HH:mm:ss.fff")
存活毫秒 = $life.TotalMilliseconds
}
}
2. 按存活毫秒升序排序,快速定位最短 / 最长连接
Get-NetTCPConnection | ForEach-Object {
[PSCustomObject]@{
Remote=$_.RemoteAddress;Port=$_.LocalPort;PID=$_.OwningProcess;
LiveMs=(New-TimeSpan -Start $_.CreationTime).TotalMilliseconds
}
} | Sort-Object LiveMs -Descending | Format-Table -AutoSize
3. 分离监听端口与活动连接,分别归档高精度日志
# 仅侦听端口
Get-NetTCPConnection | Where State -eq Listen | Export-Csv C:\listen_ports.csv -NoType
# 仅已建立外联会话
Get-NetTCPConnection | Where State -eq Established | Export-Csv C:\active_connect.csv -NoType
4. 联合网卡信息,输出接口索引与分层完整时序日志
$adapters = Get-NetAdapter | Select InterfaceIndex,Name
Get-NetTCPConnection | ForEach-Object {
$life = New-TimeSpan -Start $_.CreationTime
$ifName = ($adapters | Where InterfaceIndex -eq $_.InterfaceIndex).Name
[PSCustomObject]@{
网卡名称=$ifName;本地端口=$_.LocalPort;远端=$_.RemoteAddress;
创建毫秒=$_.CreationTime.ToString("HH:mm:ss.fff");存活总Ms=$life.TotalMilliseconds
}
}
5. 离线 / 镜像基线对比:导出每日固定快照用于安全审计
$logPath = "C:\Network_Audit\TCP_$(Get-Date -Format 'yyyyMMdd').csv"
Get-NetTCPConnection -AddressFamily IPv4 | Select-Object `
LocalAddress,LocalPort,RemoteAddress,RemotePort,State,OwningProcess,
@{Name="CreateTimeFull";Exp={$_.CreationTime.ToString("yyyy-MM-dd HH:mm:ss.fff")}} |
Export-Csv $logPath -NoTypeInformation -Encoding UTF8
四、精度 & 截断底层关键说明
1. 时间精度根源
netstat.exe:内核毫秒 TCB → 工具格式化丢弃毫秒,仅输出hh:mm:ss;Get-NetTCPConnection:直接读取IP_TCPTABLE_2原生CreationTimeFILETIME 时间戳,保留完整微秒 / 毫秒精度,无格式化损耗。
2. 截断产生与规避
- 截断诱因:CMD 文本工具按控制台字符宽度自动换行,长 IP / 长时长字段丢失后半段;
- 规避方案:
Format-List *横向展开所有对象字段;- 导出 CSV/JSON 二进制结构化存储,完全不受界面宽度限制;
- PowerShell 对象管道处理无中间文本转换,全程零字段丢失。
3. 两种时钟区分
- 相对时钟:
TotalMilliseconds连接从创建到当前的时长(用于僵死会话、连接生命周期分析); - 绝对墙钟时钟:
CreationTime标准系统时间戳(用于跨服务器时序对齐、故障时间线溯源、安全取证)。
方案 1:先查全部 TCP 连接,管道筛选仅 IPv4(无参数报错,通用兼容所有 Windows 版本)
# 完整展开所有原生字段,无截断,仅保留IPv4连接
Get-NetTCPConnection | Where-Object { $_.AddressFamily -eq 'IPv4' } | Format-List *
方案 2:只查看 IPv6
Get-NetTCPConnection | Where-Object { $_.AddressFamily -eq 'IPv6' } | Format-List *
方案 3:不筛选协议,直接完整打印全部 TCP 连接(最简无报错)
Get-NetTCPConnection | Format-List *
补充:高精度时间 + 无截断导出 CSV 修正版(可用)
$outPath = "C:\tcp_full_archive_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv"
Get-NetTCPConnection | Where-Object { $_.AddressFamily -eq 'IPv4' } | Select-Object `
LocalAddress,LocalPort,RemoteAddress,RemotePort,State,OwningProcess,InterfaceIndex,
@{Name="CreateTimeMs";Expression={$_.CreationTime.ToString("yyyy-MM-dd HH:mm:ss.fff")}},
@{Name="AliveTotalMs";Expression={(New-TimeSpan -Start $_.CreationTime).TotalMilliseconds}},
@{Name="AliveTotalSec";Expression={(New-TimeSpan -Start $_.CreationTime).TotalSeconds.ToString("0.000")}} |
Export-Csv -Path $outPath -NoTypeInformation -Encoding UTF8
Write-Host "完整无截断日志输出至:$outPath"
补充说明
Format-List *作用:横向展开对象全部隐藏原生属性,不受控制台宽度限制,彻底解决 netstat 文本截断问题;CreationTime原生自带毫秒级时间戳,不需要额外换算即可做时序故障溯源;- 兼容 Win10 / Win11 / Server2016~2025 全版本 PowerShell,无版本兼容报错。
输出内容解读 + 关键字段说明 + 补充高精度 / 无截断进阶用法
一、当前输出内容整体说明
- 执行
Get-NetTCPConnection | Format-List *成功,无报错,完整输出所有 TCP 连接原生 CIM 对象全字段,彻底规避 netstat 窗口列宽截断、秒级时间精度丢失问题; - 输出同时包含 IPv4 + IPv6 两类连接:
LocalAddress = ::、RemoteAddress = :::IPv6 绑定 / 侦听端口(Bound / Listen);LocalAddress = 0.0.0.0、192.168.5.4:IPv4 本地地址;
- 连接状态分类说明:
Listen:本机对外侦听端口(服务、后台程序);Bound:仅绑定端口、未建立外联会话(预留端口);Established:已建立活跃 TCP 外联会话(你主机访问外部 443 HTTPS);TimeWait:连接关闭后等待回收,CreationTime = 1601-01-01是内核默认占位空时间,无实际创建时间;
- 最后一段脚本执行成功:已在
C:\生成带毫秒时间戳的无截断结构化 CSV 归档文件,字段包含毫秒创建时间、总存活毫秒,适合长期时序审计、安全基线留存。
二、核心高精度时间字段解读(对比 netstat 优势)
1. CreationTime 原生高精度基准字段
CreationTime : 2026-07-13 星期一 12:25:09
- 底层源自内核 TCP 控制块 TCB FILETIME 时间戳,原生支持毫秒,Format-List 仅简化显示时分秒;导出 CSV 脚本中
CreateTimeMs强制格式化输出.fff毫秒; TimeWait条目统一显示1601-01-01:Windows CIM 对 TIME_WAIT 临时连接无有效创建时间,填充系统纪元占位符,属于正常现象。
2. CSV 自定义计算字段(高精度核心)
CreateTimeMs:yyyy-MM-dd HH:mm:ss.fff绝对创建墙钟时间(毫秒);AliveTotalMs:连接从创建到快照的总毫秒存活时长(无精度丢失);AliveTotalSec:格式化保留 3 位小数秒,方便快速阅读。
三、无截断优势说明
Format-List *:纵向逐条展开所有属性,不受控制台横向宽度限制,长 IPv6 地址、长 CIM 属性不会折行丢失后半段;Export-Csv UTF8:二进制结构化存储,所有 IP、端口、时间、PID 完整保存,打开 Excel / 文本编辑器无任何字符截断;- 全程对象管道处理,无中间文本转换损耗,不会像 netstat 丢弃毫秒、长 IP 字段。
四、从输出里能提取的关键运维信息示例
- 高频外联进程 PID
7028:大量Established 443HTTPS 会话,可搭配Get-Process -Id 7028直接查看程序名称; - 侦听端口清单:
135、445、49664~49668系统服务侦听端口; - 大量
Bound动态端口:程序预绑定未外联的预留端口,可排查端口冲突; - IPv6 双栈正常工作:同时存在 IPv6 侦听与 IPv6 外联会话。
五、补充 2 条进阶高精度 / 无截断特殊脚本
1. 实时循环快照(全局毫秒基准时钟 + 毫秒存活时长)
while($true){
# 全局快照基准时间(毫秒)
$snapNow = Get-Date -Format "yyyy-MM-dd HH:mm:ss.fff"
Write-Host "`n===== 全局采集快照时间:$snapNow =====" -ForegroundColor Cyan
Get-NetTCPConnection | Where { $_.AddressFamily -eq 'IPv4' } | ForEach-Object {
$life = New-TimeSpan -Start $_.CreationTime
[PSCustomObject]@{
本地地址 = $_.LocalAddress
本地端口 = $_.LocalPort
远端地址 = $_.RemoteAddress
远端端口 = $_.RemotePort
连接状态 = $_.State
PID = $_.OwningProcess
创建绝对时间 = $_.CreationTime.ToString("HH:mm:ss.fff")
存活总毫秒 = $life.TotalMilliseconds
}
} | Format-Table -AutoSize
Start-Sleep -Milliseconds 800
}
2. 筛选存活超过 1 小时僵死长连接(纯数值毫秒阈值,无文本模糊匹配)
# 3600000 毫秒 = 1小时
$threshold = 3600000
Get-NetTCPConnection | Where-Object {
$_.State -eq 'Established' -and
(New-TimeSpan -Start $_.CreationTime).TotalMilliseconds -gt $threshold
} | Select-Object LocalPort,RemoteAddress,OwningProcess,CreationTime
六、底层精度关键区分总结
netstat -i:内核毫秒源 → 工具格式化丢弃毫秒,仅输出hh:mm:ss;Get-NetTCPConnection CreationTime:直接读取 CIM FILETIME 原生毫秒时间戳,格式化后完整保留.fff;- 截断根源:CMD/netstat 基于纯文本输出,受控制台列宽限制;PowerShell 对象管道 + CSV 结构化存储完全规避截断。
PS C:\Users\Administrator> netstat /?
显示协议统计信息和当前 TCP/IP 网络连接。
NETSTAT [-a] [-b] [-e] [-f] [-i] [-n] [-o] [-p proto] [-r] [-s] [-t] [-x] [-y] [interval]
NETSTAT -a 显示所有连接和侦听端口。
NETSTAT -b 显示创建每个连接所涉及的可执行文件或侦听端口。在某些情况下,已知的可执行文件托管多个独立组件,在这些情况下,将显示创建连接或侦听端口所涉及的组件序列。在这种情况下,可执行文件 名称位于 [] 底部,顶部是它调用的组件,依此类推,直到达到 TCP/IP。请注意,此选项可能很耗时,并且会失败,除非你有足够的权限。
NETSTAT -c 显示按当前使用的 TCP 或 UDP 端口数排序的进程列表。
NETSTAT -d 显示每个连接分配的 DSCP 值。
NETSTAT -e 显示以太网统计信息。这可以与 -s选项结合使用。
NETSTAT -f 显示外部的完全限定的域名 (FQDN)地址。
NETSTAT -i 显示 TCP 连接在其当前状态下所用的时间。
NETSTAT -n 以数字形式显示地址和端口号。
NETSTAT -o 显示与每个连接关联的拥有进程 ID。
NETSTAT -p proto 显示 proto 指定的协议的连接;proto可以是以下任一项: TCP、UDP、TCPv6 或 UDPv6。如果与 -s选项一起使用以显示每个协议统计信息,则 proto 可以是以下任一项: IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。
NETSTAT -q 显示所有连接、侦听端口和绑定非侦听 TCP 端口。绑定的非侦听端口可能已与或未与 活动连接相关联。
NETSTAT -r 显示路由表。
NETSTAT -s 显示每个协议的统计信息。默认情况下,显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息;-p 选项可用于指定默认值的子集。
NETSTAT -t 显示当前的连接卸载状态。
NETSTAT -x 显示 NetworkDirect 连接、侦听器和共享终结点。
NETSTAT -y 显示所有连接的 TCP 连接模板。无法与其他选项结合使用。
NETSTAT 间隔 重播所选统计信息、每次显示之间的暂停间隔秒数。按 CTRL+C 停止重新显示 统计信息。如果省略,netstat 将打印当前配置信息一次。
分析 netstat 命令在 Windows 系统中的执行过程
netstat(Network Statistics) 是一个非常常用的网络命令,用于显示当前计算机的网络连接、路由表、接口统计等信息。它主要用来帮助用户诊断网络连接情况、端口使用情况、网络通信状态等。
在 Windows 系统中,netstat 命令本身并不直接传输网络数据包,它只是通过查询系统内部的网络堆栈信息来展示网络连接的状态。然而,在某些情况下,执行 netstat 命令时,会涉及到一些网络数据交互,如 TCP 连接的三次握手过程、活动连接的包交换等。
以下是 netstat (Network Statistics)命令执行过程中,Windows 系统如何展示网络信息,并涉及到的 IP 包、以太网头部、数据链路层帧的传递全过程的分析。
时间线模型:netstat 命令的执行过程
1. 用户执行 netstat 命令
时间点:T0
-
用户在命令行中输入
netstat命令。 -
Windows 系统通过
netstat.exe程序调用网络堆栈接口,查询当前的网络连接、端口使用情况、路由表等信息。 -
协议栈交互:
netstat→winsock.dll→tcpip.sys→iphlpapi.dll
2. netstat 查询活动连接的本地和远程端口
时间点:T1
-
netstat查询当前系统的 TCP/IP 网络连接状态,包括本地端口、远程端口、连接状态等。 -
计算机会调用
tcpip.sys驱动来获取当前系统中 TCP 和 UDP 连接的状态。这些连接通常在 TCP/IP 协议栈 中进行维护,并且对应本地计算机和远程设备的 IP 地址与端口号。 -
查询的内容:
- TCP 状态:例如
LISTENING,ESTABLISHED,CLOSE_WAIT等。 - 本地地址:显示本地计算机的 IP 地址和端口号。
- 远程地址:显示远程计算机的 IP 地址和端口号。
- 连接状态:显示连接的当前状态。
- TCP 状态:例如
-
需要注意的是,
netstat本身并不会主动发起网络请求或发送数据包,而是从操作系统的内核中查询相关的连接信息。
3. TCP 连接的三次握手过程(如果有活动连接)
时间点:T2
-
如果某些
netstat命令展示的是活动的 TCP 连接(例如ESTABLISHED状态),则这些连接可能涉及到 TCP 三次握手 的过程。以下是这个过程的详细分析: -
TCP 三次握手过程:
- SYN:客户端发送 SYN 包,表示请求建立连接。
- SYN-ACK:服务器收到 SYN 包后,返回 SYN-ACK 包,确认接收并同意建立连接。
- ACK:客户端收到 SYN-ACK 包后,返回 ACK 包,完成连接建立。
-
协议栈交互:
tcpip.sys→tcp.sys→winsock.dll
-
在执行这三次握手的过程中,数据包传输的过程将涉及到以下内容:
-
以太网帧头部:
- 目标 MAC 地址:接收方(如目标服务器或网关)的 MAC 地址。
- 源 MAC 地址:发送方(如本地计算机)的 MAC 地址。
- 以太网类型:0x0800(IPv4)。
-
IP 包头部:
- 源 IP 地址:发送方的 IP 地址。
- 目标 IP 地址:接收方的 IP 地址。
- 协议:TCP 协议(6)。
-
TCP 包头部:
- 源端口:发送方的端口号。
- 目标端口:接收方的端口号。
- 标志位:如 SYN、ACK 标志位等。
- 序列号:标识数据流中的位置。
-
4. 操作系统返回当前网络连接信息
时间点:T3
-
一旦
netstat执行完毕,它将系统内核的查询结果返回到命令行界面,用户会看到本地和远程的 IP 地址、端口号以及当前的连接状态。 -
协议栈交互:
netstat→iphlpapi.dll→tcpip.sys
-
返回的数据包括:
- 本地地址:显示当前本机的 IP 地址和端口号。
- 远程地址:显示远程计算机的 IP 地址和端口号。
- 连接状态:例如
LISTENING、ESTABLISHED等。
5. 显示 UDP 连接和监听端口(如果有)
时间点:T4
-
如果
netstat显示了 UDP 连接(netstat -u),那么系统会展示 UDP 端口的当前使用情况。由于 UDP 是无连接协议,因此没有类似 TCP 的三次握手过程,但会显示每个端口的状态(如 绑定端口)。 -
协议栈交互:
netstat→iphlpapi.dll→tcpip.sys
-
UDP 数据包的构建:
- IP 包头部:包括源和目标 IP 地址、协议字段为 UDP。
- UDP 包头部:包括源和目标端口、长度、校验和等。
总结:netstat 命令的协议交互与数据传输过程
-
执行
netstat查询:当用户执行netstat命令时,操作系统通过网络协议栈查询当前的网络连接状态、路由表、接口统计信息等。 -
TCP 连接的三次握手过程:如果查询的是活动的 TCP 连接,可能会涉及到三次握手过程,在此过程中,数据包会通过以太网帧、IP 包、TCP 包传输。
-
UDP 连接的查询:
netstat也会列出当前使用的 UDP 端口。UDP 连接没有三次握手,但netstat会显示每个端口的使用情况。 -
以太网帧、IP 包和协议层交互:
- 以太网层负责数据链路的传输,封装网络数据包并通过 MAC 地址发送。
- IP 层负责在网络中路由数据包,根据目标 IP 地址传输信息。
- TCP/UDP 层负责管理数据传输的具体协议,通过端口和标志位等信息维持连接状态。
虽然 netstat 命令本身并不直接发送网络数据包,但它通过查询系统的网络堆栈状态,提供了关于活动连接、端口使用、路由表等的信息,间接反映了系统的网络通信情况。
PS C:\Users\Administrator> netstat -e
接口统计
接收的 发送的
字节 2566934900 385739106
单播数据包 4022772 1528386
非单播数据包 171132 2250
丢弃 0 0
错误 0 0
未知协议 0
PS C:\Users\Administrator> netstat -s
IPv4 统计信息
接收的数据包 = 264213
接收的标头错误 = 0
接收的地址错误 = 0
转发的数据报 = 0
接收的未知协议 = 0
丢弃的接收数据包 = 13717
传送的接收数据包 = 254913
输出请求 = 121164
路由丢弃 = 0
丢弃的输出数据包 = 0
输出数据包无路由 = 8
需要重新组合 = 0
重新组合成功 = 0
重新组合失败 = 0
数据报分段成功 = 0
数据报分段失败 = 0
分段已创建 = 0
IPv6 统计信息
接收的数据包 = 267304
接收的标头错误 = 0
接收的地址错误 = 1339
转发的数据报 = 0
接收的未知协议 = 0
丢弃的接收数据包 = 839
传送的接收数据包 = 265701
输出请求 = 156743
路由丢弃 = 0
丢弃的输出数据包 = 0
输出数据包无路由 = 0
需要重新组合 = 0
重新组合成功 = 0
重新组合失败 = 0
数据报分段成功 = 0
数据报分段失败 = 0
分段已创建 = 0
ICMPv4 统计信息
已接收 已发送
消息 47 270
错误 0 0
目标不可达 6 129
超时 31 0
参数问题 0 0
源抑制 0 0
重定向 0 0
回显回复 10 0
回显 0 141
时间戳 0 0
时间戳回复 0 0
地址掩码 0 0
地址掩码回复 0 0
路由器请求 0 0
路由器播发 0 0
ICMPv6 统计信息
已接收 已发送
消息 2779 2738
错误 0 0
目标不可达 0 262
数据包太大 0 0
超时 41 0
参数问题 0 0
回显 250 106
回显回复 5 0
MLD 查询 0 0
MLD 报告 0 0
MLD 已完成 0 0
路由器请求 0 5
路由器播发 142 0
邻居请求 2072 278
邻居播发 269 2087
重定向 0 0
路由器重新编号 0 0
IPv4 的 TCP 统计信息
主动开放 = 7239
被动开放 = 968
失败的连接尝试 = 4347
重置连接 = 61
当前连接 = 5
接收的分段 = 145425
发送的分段 = 116925
重新传输的分段 = 593
IPv6 的 TCP 统计信息
主动开放 = 3191
被动开放 = 0
失败的连接尝试 = 59
重置连接 = 75
当前连接 = 2
接收的分段 = 187800
发送的分段 = 119818
重新传输的分段 = 442
IPv4 的 UDP 统计信息
接收的数据报 = 186976
无端口 = 13711
接收错误 = 0
发送的数据报 = 22753
IPv6 的 UDP 统计信息
接收的数据报 = 191450
无端口 = 339
接收错误 = 0
发送的数据报 = 32001
PS C:\Users\Administrator> netstat -es
接口统计
接收的 发送的
字节 2544855278 384470154
单播数据包 4018866 1526124
非单播数据包 171042 2250
丢弃 0 0
错误 0 0
未知协议 0
IPv4 统计信息
接收的数据包 = 264086
接收的标头错误 = 0
接收的地址错误 = 0
转发的数据报 = 0
接收的未知协议 = 0
丢弃的接收数据包 = 13717
传送的接收数据包 = 254750
输出请求 = 120943
路由丢弃 = 0
丢弃的输出数据包 = 0
输出数据包无路由 = 8
需要重新组合 = 0
重新组合成功 = 0
重新组合失败 = 0
数据报分段成功 = 0
数据报分段失败 = 0
分段已创建 = 0
IPv6 统计信息
接收的数据包 = 266661
接收的标头错误 = 0
接收的地址错误 = 1339
转发的数据报 = 0
接收的未知协议 = 0
丢弃的接收数据包 = 839
传送的接收数据包 = 265058
输出请求 = 156340
路由丢弃 = 0
丢弃的输出数据包 = 0
输出数据包无路由 = 0
需要重新组合 = 0
重新组合成功 = 0
重新组合失败 = 0
数据报分段成功 = 0
数据报分段失败 = 0
分段已创建 = 0
ICMPv4 统计信息
已接收 已发送
消息 47 270
错误 0 0
目标不可达 6 129
超时 31 0
参数问题 0 0
源抑制 0 0
重定向 0 0
回显回复 10 0
回显 0 141
时间戳 0 0
时间戳回复 0 0
地址掩码 0 0
地址掩码回复 0 0
路由器请求 0 0
路由器播发 0 0
ICMPv6 统计信息
已接收 已发送
消息 2779 2738
错误 0 0
目标不可达 0 262
数据包太大 0 0
超时 41 0
参数问题 0 0
回显 250 106
回显回复 5 0
MLD 查询 0 0
MLD 报告 0 0
MLD 已完成 0 0
路由器请求 0 5
路由器播发 142 0
邻居请求 2072 278
邻居播发 269 2087
重定向 0 0
路由器重新编号 0 0
IPv4 的 TCP 统计信息
主动开放 = 7195
被动开放 = 965
失败的连接尝试 = 4311
重置连接 = 61
当前连接 = 5
接收的分段 = 145164
发送的分段 = 116615
重新传输的分段 = 591
IPv6 的 TCP 统计信息
主动开放 = 3173
被动开放 = 0
失败的连接尝试 = 59
重置连接 = 75
当前连接 = 3
接收的分段 = 187179
发送的分段 = 119436
重新传输的分段 = 442
IPv4 的 UDP 统计信息
接收的数据报 = 186972
无端口 = 13711
接收错误 = 0
发送的数据报 = 22753
IPv6 的 UDP 统计信息
接收的数据报 = 191425
无端口 = 339
接收错误 = 0
发送的数据报 = 31988
netstat /? 输出的信息,我们可以将 netstat (Network Statistics)命令的各种参数按照功能分类,并整理成一个清晰的表格。以下是按照功能分类后的表格:
1. 显示网络连接与监听端口相关信息
| 选项 | 描述 |
|---|---|
-a |
显示所有连接和监听端口。 |
-q |
显示所有连接、监听端口和绑定的非监听 TCP 端口。绑定的非监听端口可能与活动连接相关,也可能不相关。 |
2. 显示进程信息
| 选项 | 描述 |
|---|---|
-b |
显示每个连接或监听端口所涉及的可执行文件。如果一个可执行文件包含多个独立的组件,显示每个组件,直到 TCP/IP 层。需要足够的权限。 |
-c |
显示按照当前 TCP 或 UDP 端口数量排序的进程列表。 |
-o |
显示与每个连接相关的拥有进程 ID(PID)。 |
3. 显示地址和域名相关信息
| 选项 | 描述 |
|---|---|
-f |
显示外部地址的完全限定域名(FQDN)。 |
-n |
以数字形式显示地址和端口号,而不是尝试解析主机名和服务名。 |
4. 显示协议统计信息
| 选项 | 描述 |
|---|---|
-e |
显示以太网统计信息。可以与 -s 一起使用。 |
-s |
显示每个协议的统计信息。默认显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息。可以使用 -p 来指定协议的子集。 |
-p |
显示指定协议的连接,proto 可以是 TCP、UDP、TCPv6 或 UDPv6。如果与 -s 一起使用,proto 可以是 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。 |
5. 显示路由表和其他网络信息
| 选项 | 描述 |
|---|---|
-r |
显示路由表。 |
-t |
显示当前连接的卸载状态。 |
-x |
显示 NetworkDirect 连接、监听器和共享端点。 |
-y |
显示所有连接的 TCP 连接模板。不能与其他选项一起使用。 |
6. 其他功能
| 选项 | 描述 |
|---|---|
interval |
重新显示选定的统计信息,每次显示之间暂停指定的秒数。如果省略,则一次性显示当前配置。按 CTRL+C 停止重新显示统计信息。 |
- 网络连接与端口相关:
-a,-q - 进程信息:
-b,-c,-o - 地址与域名:
-f,-n - 协议统计信息:
-e,-s,-p - 路由与其他信息:
-r,-t,-x,-y - 周期性统计:
interval
这些选项提供了丰富的功能,可以帮助用户根据需求查看网络连接、路由、进程、协议等详细信息。
在 Windows(以及大多数操作系统)中,netstat (Network Statistics)命令的全称是:网络统计(Network Statistics)
netstat 是一个命令行网络工具,它提供有关网络连接、路由表、网络接口和其他与网络相关的统计信息。它广泛用于故障排除网络问题和监控网络活动。
在 Windows 中,您可以使用 netstat 命令查看活动的 TCP/IP 连接、开放端口以及其他网络统计信息。您还可以使用不同的标志或参数来自定义命令的输出。
在 Windows(以及大多数操作系统)中,netstat (Network Statistics)命令的全称是:网络统计(Network Statistics)是Windows操作系统中的一个命令行工具,用于显示网络连接、路由表和网络接口统计信息。它可以显示当前活动的网络连接、监听端口、TCP/IP协议的统计数据等,是网络诊断和故障排除的重要工具。
Netstat命令的主要作用包括:
-
显示网络连接信息:Netstat可以列出当前系统上的所有网络连接,包括TCP、UDP等协议的连接状态、本地和远程地址、端口号等信息。通过查看网络连接信息,可以了解系统当前的网络活动情况。
-
显示监听端口:Netstat可以显示当前系统上正在监听的端口,包括TCP和UDP端口。这对于监视系统上运行的网络服务和应用程序非常有用,可以帮助管理员及时发现并解决端口冲突或者异常监听的问题。
-
显示路由表:Netstat可以显示系统的路由表信息,包括目标网络、网关、接口等信息。通过查看路由表信息,可以了解系统当前的网络路由配置,帮助诊断网络连接和数据传输的问题。
-
显示网络接口统计信息:Netstat可以显示系统的网络接口统计信息,包括接收和发送的数据包数量、错误数量、丢失的数据包数量等。这对于监视系统网络流量和性能非常有用,可以帮助管理员及时发现并解决网络故障和性能问题。
Netstat命令是Windows操作系统中一个强大的网络诊断工具,可以帮助管理员监视和管理系统的网络连接、端口、路由和接口等信息,以确保网络的稳定性和安全性。
Netstat命令的起源可以追溯到Unix操作系统。它最早出现在BSD Unix中,并逐渐成为Unix和类Unix系统(包括Linux)中常见的网络诊断工具之一。
Netstat命令最初设计用于显示网络连接信息、路由表和接口统计数据,以帮助系统管理员监视和管理系统的网络活动。它提供了一种简单而有效的方式来查看系统的网络状态,帮助用户诊断网络故障、优化网络性能以及发现安全问题。
随着Unix系统的普及和发展,Netstat命令逐渐被移植到其他操作系统平台上,包括Windows。在Windows操作系统中,Netstat命令被实现为一个命令行工具,可以通过命令提示符或者PowerShell来调用和使用。它在Windows中提供了类似于Unix版本的功能,可以显示当前系统的网络连接、监听端口、路由表和接口统计信息,帮助用户进行网络故障排除和性能优化。
Netstat命令起源于Unix操作系统,是一个用于显示网络状态信息的常见工具,在Windows和其他操作系统中被广泛使用。
Windows的Netstat(Network Statistics)命令在其发展过程中经历了一些重要的阶段,包括功能增强、性能优化和用户体验改进等。以下是Windows Netstat命令的主要发展阶段:
-
早期版本:最初的Windows版本中的Netstat命令功能较为简单,主要用于显示基本的网络连接信息和监听端口。它提供了一些基本的选项,如
-a显示所有连接和监听端口,-n以数字形式显示地址和端口等。 -
Windows XP和Server 2003:随着Windows XP和Server 2003的推出,Netstat命令得到了一些功能性的增强。新增了一些选项,如
-o显示相关的进程ID,-b显示程序名称,帮助用户更好地理解网络连接和占用网络资源的程序。 -
Windows Vista和Server 2008:在Windows Vista和Server 2008中,Netstat命令进一步改进了用户体验和可用性。新增了一些选项,如
-f显示FQDN(Fully Qualified Domain Name)格式的地址,-x显示扩展的信息,帮助用户更详细地了解网络连接和性能情况。 -
Windows 7和Server 2008 R2:随着Windows 7和Server 2008 R2的发布,Netstat命令继续进行了一些改进和优化。提升了性能和稳定性,改进了输出格式,使其更易读和易理解。
-
Windows 8和Server 2012:在Windows 8和Server 2012中,Netstat命令保持了稳定性和可靠性,并进行了一些细微的改进。优化了一些选项的默认行为,改进了输出的格式,提升了用户体验。
-
Windows 10和Server 2016:随着Windows 10和Server 2016的推出,Netstat命令继续得到改进和优化。提升了性能和稳定性,增强了安全性,改进了输出格式和用户界面,使其更加现代化和易用。
Windows的Netstat命令在其发展过程中不断得到改进和优化,功能逐渐丰富,性能逐步提升,用户体验不断改进,成为Windows系统中重要的网络诊断工具之一。
Windows的Netstat(Network Statistics)命令在网络管理和故障排除中有着广泛的应用场景,以下是其中一些常见的应用场景:
-
检查网络连接状态:使用Netstat命令可以查看当前系统中的网络连接状态,包括已建立的连接、正在监听的端口以及连接状态等信息。这有助于管理员了解系统的网络活动情况,及时发现异常连接或网络瓶颈。
-
查找端口占用情况:通过Netstat命令可以查找当前系统中正在占用的端口,以及占用该端口的进程。这对于解决端口冲突、定位服务启动失败等问题非常有用。
-
检测网络活动:管理员可以使用Netstat命令来检测系统中的网络活动,包括接收和发送的数据包数量、流量统计等信息。这有助于监视系统的网络使用情况,及时发现异常流量或攻击行为。
-
查找网络连接的远程地址:通过Netstat命令可以查找当前系统中与远程主机建立的网络连接,包括远程主机的IP地址、端口号等信息。这对于识别网络攻击来源、防范恶意连接非常有用。
-
诊断网络故障:管理员可以使用Netstat命令来诊断网络故障,包括检查网络连接是否正常、查找网络延迟或丢包等问题。通过分析Netstat输出可以定位网络问题的原因,并采取相应的措施进行修复。
-
监控网络性能:通过定期运行Netstat命令并记录输出结果,管理员可以监控系统的网络性能,并根据历史数据进行性能分析和优化。这有助于提高系统的网络效率和稳定性。
Windows的Netstat命令在网络管理和故障排除中扮演着重要的角色,可以帮助管理员实时监控网络状态、定位问题并采取相应的措施进行处理,确保系统的网络运行正常。
Windows的Netstat(Network Statistics)命令还可以用于一些更高级的应用场景,如下所示:
-
监控特定端口或协议的网络活动:管理员可以使用Netstat命令结合过滤选项,如
-p用于指定协议、-t用于指定TCP连接、-u用于指定UDP连接等,来监控特定端口或协议的网络活动。这有助于对特定服务或应用程序的网络使用情况进行深入分析。 -
查找并终止指定端口的连接:通过结合Netstat命令和其他命令(如Tasklist和Taskkill),管理员可以查找并终止指定端口的网络连接。这对于清理僵尸连接、关闭异常连接或防范网络攻击非常有用。
-
分析网络性能问题:管理员可以使用Netstat命令结合
-s选项查看详细的网络统计信息,包括接收和发送的数据包数量、错误统计、拒绝的连接等。通过分析这些统计信息,可以发现网络性能问题的根本原因,并采取相应的措施进行优化。 -
检测网络安全漏洞:通过监控Netstat命令的输出,管理员可以及时发现异常连接或未经授权的访问,从而及时采取措施防范网络安全漏洞。例如,发现大量连接到未经授权的端口,可能表明系统存在安全风险。
-
网络流量分析:管理员可以使用Netstat命令结合其他网络分析工具,如Wireshark,对系统的网络流量进行深入分析。通过分析网络流量,可以了解系统的网络使用情况、识别恶意流量并加以防范。
-
监控远程连接状态:通过使用Netstat命令结合
-a选项和远程主机地址,管理员可以监控系统与远程主机之间的连接状态。这有助于实时监控远程访问情况,及时发现异常连接或未经授权的访问。
Windows的Netstat命令在高级网络管理和安全监控中有着广泛的应用,管理员可以根据实际需求结合不同的选项和其他命令,灵活运用Netstat命令进行网络管理和故障排除。
|
示例:
通过这些分类,用户可以根据自己的需求选择合适的选项来获取网络连接、路由、协议统计等信息。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
netstat /? 显示协议统计信息和当前 TCP/IP 网络连接。 NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-t] [-x] [-y] [interval] -a 显示所有连接和侦听端口。 |
|
netstat -a 活动连接 协议 本地地址 外部地址 状态
|
|
netstat -b 活动连接 协议 本地地址 外部地址 状态
|
|
|
netstat -f 活动连接 协议 本地地址 外部地址 状态
|
|
netstat -n 活动连接 协议 本地地址 外部地址 状态 |
|
netstat -o 活动连接 协议 本地地址 外部地址 状态 PID 备注: 在Windows系统中,PID的全称是“Process Identifier”,即进程标识符。PID是操作系统为每个正在运行的进程分配的唯一标识符,用于区分不同的进程。每当启动一个新的进程时,操作系统都会为该进程分配一个唯一的PID,并在进程终止后立即释放该PID,以便在将来的进程中重用。 PID的存在主要是为了方便操作系统和系统管理员管理和监控系统中运行的进程。通过PID,系统管理员可以轻松地识别和操作特定的进程,例如终止一个运行异常的进程、查看进程的详细信息、调整进程的优先级等。 在Windows中,可以使用一些命令和工具来查看和管理进程及其对应的PID,包括Task Manager(任务管理器)、Tasklist命令和Process Explorer等。PID在Windows系统中扮演着重要的角色,为系统管理提供了便利和灵活性。 |
|
netstat -q 活动连接 协议 本地地址 外部地址 状态 |
|
netstat -r|route print IPv4 路由表 IPv6 路由表 |
|
netstat -s IPv4 统计信息 接收的数据包 = 26367 IPv6 统计信息 接收的数据包 = 4626 ICMPv4 统计信息 已接收 已发送 ICMPv6 统计信息 已接收 已发送 IPv4 的 TCP 统计信息 主动开放 = 1108 IPv6 的 TCP 统计信息 主动开放 = 102 IPv4 的 UDP 统计信息 接收的数据报 = 8958 IPv6 的 UDP 统计信息 接收的数据报 = 602 |
|
netstat -t 活动连接 协议 本地地址 外部地址 状态 卸载状态 |
|
netstat -x 活动 NetworkDirect 连接、侦听器和共享端点 模式 IfIndex 类型 本地地址 外部地址 PID |
|
netstat -y 活动连接 协议 本地地址 外部地址 状态 模板 |
netstat -s 命令 参数
netstat -s是一个用于显示网络统计信息的命令。它会列出各种网络协议的统计数据,包括接收和发送的数据包数量、错误信息、连接状态等。通过查看这些统计信息,可以了解系统网络的运行情况,帮助诊断网络问题和优化网络性能。
这个命令的输出可以帮助管理员监控网络活动,识别潜在的问题,比如网络拥塞、连接异常、数据包丢失等。通过分析这些统计信息,可以及时采取措施来解决网络故障或改进网络性能。
使用netstat -s命令需要相应的权限,通常需要以管理员身份或root用户来运行。在处理网络问题时,这个命令可以提供有用的信息,但需要正确解读和分析结果,以便有效地解决网络相关的挑战。
以下是输出结果:
|
IPv4 Statistics Packets Received = 20292 IPv6 Statistics Packets Received = 26139 ICMPv4 Statistics Received Sent ICMPv6 Statistics Received Sent TCP Statistics for IPv4 Active Opens = 707 TCP Statistics for IPv6 Active Opens = 168 UDP Statistics for IPv4 Datagrams Received = 127 UDP Statistics for IPv6 Datagrams Received = 760 |
IPv4统计信息 接收的数据包数 = 20292 IPv6统计信息 接收的数据包数 = 26139 ICMPv4统计信息 接收 发送 ICMPv6统计信息 接收 发送 IPv4的TCP统计信息 主动打开连接 = 707 IPv6的TCP统计信息 主动打开连接 = 168 IPv4的UDP统计信息 接收的数据报数 = 127 IPv6的UDP统计信息 接收的数据报数 = 760 |
Netstat命令是用于显示计算机网络连接信息的命令行工具。它提供了许多用于查看网络状态、连接信息和统计数据的选项。下面是Netstat命令的初级、中级和高级应用实例:
初级应用实例:
-
查看所有活动连接:
bashCopy Codenetstat这将显示计算机上所有活动的网络连接。
-
查看TCP连接:
bashCopy Codenetstat -t这将仅显示TCP连接的信息。
-
查看UDP连接:
bashCopy Codenetstat -u这将仅显示UDP连接的信息。
-
查看监听端口:
bashCopy Codenetstat -a这将显示计算机上所有正在监听的端口以及相应的协议。
中级应用实例:
-
查看指定端口的连接:
bashCopy Codenetstat -an | find "端口号"这将显示指定端口的所有连接信息,例如
netstat -an | find "80"可以查找所有连接到端口80的网络连接。 -
查看网络连接统计信息:
bashCopy Codenetstat -s这将显示各种协议的网络统计信息,包括接收和发送的数据包数量、错误统计等。
高级应用实例:
-
查找指定IP的连接:
bashCopy Codenetstat -an | find "IP地址"这将显示与指定IP地址相关联的所有连接信息。
-
查找特定进程的连接:
bashCopy Codenetstat -ano | find "PID"这将显示与指定进程ID相关联的所有连接信息。可与任务管理器一起使用,以查看特定进程的网络活动。
-
检测网络安全漏洞:
bashCopy Codenetstat -ab这将显示正在使用网络连接的每个进程的相关信息,包括进程名称、PID和本地地址等。通过分析这些信息,可以发现异常连接或潜在的安全威胁。
通过结合这些选项和参数,管理员可以根据实际情况灵活运用Netstat命令,从而更好地管理和监控计算机的网络连接。
Netstat命令与其他命令组合可以扩展其功能,提供更多有用的信息。下面是Netstat命令与其他一些命令组合的初级、中级和高级应用实例:
初级应用实例:
-
查看本地IP地址:
bashCopy Codeipconfig | findstr IPv4这将显示计算机的本地IPv4地址,然后可以使用此地址来过滤Netstat输出,以查看与该地址相关的连接。
-
查看活动连接和进程:
bashCopy Codenetstat -ano结合Tasklist命令:
bashCopy Codetasklist | findstr "PID"这将显示所有活动连接及其相关的进程ID(PID),然后使用Tasklist命令找到对应的进程名称。
中级应用实例:
-
查找指定端口的占用进程:
bashCopy Codenetstat -ano | find "端口号"结合Tasklist命令:
bashCopy Codetasklist | findstr "PID"这将显示占用指定端口的进程ID(PID),然后使用Tasklist命令找到对应的进程名称。
-
查看特定进程的网络连接:
bashCopy Codenetstat -ano | find "PID"这将显示与指定进程ID相关联的所有连接信息。
高级应用实例:
-
查找指定进程的详细信息:
bashCopy Codewmic process where ProcessId="PID" get Caption,ProcessId,CommandLine这将显示指定进程的名称、进程ID和启动命令行参数。
-
查找指定进程的资源使用情况:
bashCopy Codewmic process where ProcessId="PID" get Caption,ProcessId,ThreadCount,WorkingSetSize,VirtualSize这将显示指定进程的名称、进程ID以及线程数、工作集大小和虚拟大小等资源使用情况。
通过这些组合,可以更深入地了解特定网络连接和进程的相关信息,帮助管理员进行网络监控、故障排除和安全审计等任务。
在 Windows 系统中,watch 命令是 Linux 和类 Unix 系统中使用的命令,并没有直接在 PowerShell 中可用。为了在 Windows 中模拟 watch 命令的功能,你可以使用 PowerShell 的 Start-Process 或 Get-Command 来定期运行命令。以下是几种常见的替代方法。
方法 1:使用 Start-Sleep 在 PowerShell 中模拟 watch 命令
你可以编写一个简单的循环,使用 Start-Sleep 命令来每隔几秒钟执行一次 netstat 命令。例如,以下命令将每 2 秒执行一次 netstat -anop tcp:
while ($true) {
netstat -anop tcp
Start-Sleep -Seconds 2
}
此命令会不断显示 TCP 连接状态,每 2 秒刷新一次。
方法 2:使用 Get-Command 来实现定时输出
如果你希望在 PowerShell 中查看一个命令的输出,可以利用 Get-Command 来定期执行并显示。
Get-Command "netstat -anop tcp" | ForEach-Object {
& $_
Start-Sleep -Seconds 2
}
方法 3:使用 Windows 原生命令
另外,Windows 自带的 timeout 命令也可以用来模拟定时执行:
while ($true) {
netstat -anop tcp
timeout /t 2 >nul
}
在这里,timeout /t 2 会使脚本等待 2 秒钟,然后继续执行 netstat。
结论
Windows 中没有 watch 命令,你可以使用 PowerShell 的循环结构结合 Start-Sleep 来实现相同的效果。
netstat 命令和 PowerShell 中对应命令的表格化对比。这个表格列出了常见的 netstat 命令及其在 PowerShell 中的对应替代命令。
| netstat 命令 | PowerShell 命令 | 描述 |
|---|---|---|
netstat -an |
Get-NetTCPConnection |
查看所有 TCP 连接,显示本地和远程地址以及端口号。 |
netstat -anop tcp |
Get-NetTCPConnection -AddressFamily IPv4 |
查看所有 TCP 连接及其相关的本地、远程地址,端口,状态等。 |
netstat -anop udp |
Get-NetUDPEndpoint |
查看所有 UDP 连接的本地地址和端口。 |
netstat -a |
Get-NetTCPConnection -State Established |
查看所有的 TCP 连接(已建立连接和监听中的连接)。 |
netstat -b |
`Get-NetTCPConnection | Select-Object -Property *` |
netstat -r |
Get-NetRoute |
查看路由表。 |
netstat -s |
Get-NetStatistics |
查看网络统计信息,如发送/接收字节数等。 |
netstat -p tcp |
Get-NetTCPConnection -Protocol TCP |
查看所有 TCP 连接。 |
netstat -p udp |
Get-NetUDPEndpoint |
查看所有 UDP 连接。 |
netstat -i |
Get-NetAdapter |
查看网络接口的统计信息。 |
netstat -o |
`Get-NetTCPConnection -State Established | Select-Object -Property *` |
示例:
-
netstat -an对应 PowerShell 命令:powershellCopy CodeGet-NetTCPConnection -
netstat -a查看所有连接和监听端口:powershellCopy CodeGet-NetTCPConnection -State Listen -
netstat -b查看与连接关联的应用程序: PowerShell 没有直接的命令来列出应用程序和进程,但可以通过:powershellCopy CodeGet-NetTCPConnection | Select-Object -Property LocalAddress, LocalPort, State, OwningProcess然后通过
OwningProcess获取对应的进程 ID (PID)。 -
netstat -o查看连接 PID:powershellCopy CodeGet-NetTCPConnection | Select-Object -Property LocalAddress, LocalPort, RemoteAddress, RemotePort, State, OwningProcess -
netstat -r查看路由表:powershellCopy CodeGet-NetRoute
备注:
netstat是一个命令行工具,默认情况下是与操作系统一起安装的。- PowerShell 的
Get-NetTCPConnection、Get-NetUDPEndpoint等 cmdlet 提供了更现代、功能强大的接口来查看网络连接信息。 - PowerShell 命令能更方便地与其他 cmdlet(如
Where-Object、Select-Object等)结合使用进行更精确的过滤和处理。
通过 PowerShell,你不仅能执行基本的网络诊断,还可以轻松地对输出进行自定义和进一步处理。

浙公网安备 33010602011771号