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

netstat | Microsoft Learn

PixPin_2026-07-13_12-06-57

netstat.exe 完整演进历程(UNIX 起源移植 → NT3.51 → XP → Vista → Win10/11 现行稳定版)

总述

netstat 源自 UNIX BSD 网络工具,随 Windows NT 初代系统移植进入 Windows 生态;演进分为四大关键分水岭:
  1. NT3.51 / NT4.0:初代移植版,仅基础 TCP/IPv4 连接、路由、统计;无进程 PID、端口归属、IPv6;
  2. Windows XP / Server2003:核心功能大升级,新增 -o PID、-b 进程栈、基础 IPv6 支持,奠定运维基础;
  3. Vista / Server2008:全双栈完善,新增 QoS、RDMA、TCP 模板、连接时长、DSCP、卸载状态等企业服务器参数(截图全部参数诞生于此);
  4. Win10/11 / Server2016~2025:语法完全冻结,仅底层 API 兼容加固、ARM64 适配,微软主推 PowerShell Get-NetTCPConnection 作为现代替代,netstat 仅保留老旧兼容场景。

一、初代:Windows NT 3.51 / NT 4.0(1994~1998,BSD 移植原型)

原生仅支持基础功能

  1. 仅 IPv4,完全无 IPv6 相关能力;
  2. 基础子参数:-a / -e / -n / -r / -s
  3. 无进程关联能力:不存在 -o(PID)、-b(程序组件栈),无法查询端口属于哪个程序;
  4. 无域名 FQDN、连接时长、DSCP、RDMA、TCP 模板、卸载状态、端口排序等现代参数;

底层与局限

  • 底层调用老旧 iphlpapi 初代 API,仅读取内核 TCP 连接表、路由、网卡流量;
  • 无权限隔离,普通用户 / 管理员输出无差异;
  • 无周期性刷新 interval 间隔参数,只能单次输出;
  • 仅区分 TCP/UDP,无细分 TCPv6/UDPv6 协议筛选。

二、第二代:Windows XP / Server 2003(运维实用化分水岭)

划时代新增核心能力(至今机房老旧脚本大量依赖)

  1. -o 参数:输出连接对应 PID 进程 ID
     
    首次实现端口与进程关联,解决端口占用溯源核心痛点;
  2. -b 参数:管理员专属,输出端口对应的程序 + DLL 组件调用栈
     
    恶意端口、后门程序溯源标配,必须提升管理员权限;
  3. 完整 IPv6 基础支持:-p tcpv6 / udpv6 筛选双栈连接;
  4. 新增 interval 间隔刷新功能,支持持续监控网络波动;
  5. 完善 -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)

  1. 流量 / QoS 类
    • -d:显示每条连接 DSCP 优先级标记,适配企业专线 QoS 排错;
    • -i:统计 TCP 连接当前状态持续时长,排查僵死长连接;
  2. 端口 / 连接增强
    • -c:按端口数字升序排序输出列表;
    • -q:展示非侦听 TCP 预留绑定端口,解决端口预留冲突;
    • -f:外部 IP 解析为完整 FQDN 域名,外联资产审计;
  3. 高性能服务器专属
    • -t:TCP Offload 硬件卸载状态查看,网卡性能调优;
    • -x:RDMA NetworkDirect 高速集群连接(HPC、数据库存储专用);
    • -y:全局 TCP 连接模板配置基线审计;

配套底层架构升级

  1. iphlpapi.dll 重构,新增全套 IOCTL 读取内核 TCP 扩展元数据(DSCP、连接时长、RDMA 端点);
  2. 双栈 TCP/IPv6 内核栈完善,所有参数原生兼容 IPv4/IPv6;
  3. 权限校验强化:-o/-b 严格校验管理员 UAC 令牌,普通用户隐藏进程信息;
  4. 输出格式化标准化,错误码、协议状态字段统一,适配批处理findstr过滤;

局限

无云原生远程批量能力,仅支持单机本地查询,无法跨服务器批量执行。

四、第四代:Windows 7 / Server 2008 R2(稳定兼容迭代,无新增参数)

  1. 仅底层性能优化:超大连接表(上万并发)输出卡顿修复;
  2. IPv6、RDMA、DSCP 参数兼容性修复;
  3. 无任何新参数、新语法增加,完全继承 Vista 全套命令体系;
  4. 成为企业文件服务器、数据库服务器通用标准运维工具。

五、第五代:Windows 8 / 8.1 / Server 2012 R2(PowerShell 替代工具推出)

核心变化:微软推出面向对象网络模块,开始弱化 netstat

  1. 新增 NetTCPIP PowerShell 模块:Get-NetTCPConnection,结构化对象输出,支持管道筛选;
  2. netstat 语法、参数完全冻结不再改动,仅做安全漏洞补丁修复;
  3. RDMA -x 参数适配集群共享卷 CSV、Hyper-V 虚拟化;
  4. 底层加固:读取进程 PID、组件栈增加 HVCI 内存完整性校验,防止信息泄露劫持。

六、第六代:Windows 10 / Win11 / Server 2016~2025(现行稳定版本)

核心规则:顶层命令永久冻结,仅底层兼容、安全优化,无功能新增

  1. 跨架构兼容:原生支持 ARM64 Windows 平板 / 云服务器,x86 与 ARM64 参数、输出行为完全一致;
  2. 安全加固:内核网络栈 API 增加访问控制,恶意程序无法劫持 netstat 读取进程端口映射;
  3. 场景定位收缩:仅保留三大兼容场景
    • WinPE 离线故障排查(无 PowerShell 环境);
    • 老旧 CMD 批处理自动化脚本兼容;
    • 单机快速简易端口排查;
  4. 官方主推替代方案:PowerShell CIM 远程批量查询、对象化网络命令,云原生 / 批量运维优先使用;
  5. 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. 功能补齐路线:基础网络查看 → 进程溯源安全排查 → 企业高性能服务器调优

  1. NT 初代:仅能看连接与流量,无法定位程序;
  2. XP:解决安全应急溯源核心痛点(PID / 进程栈);
  3. Vista:覆盖 QoS、RDMA、TCP 调优、长连接分析等数据中心刚需;
  4. Win10+:停止功能迭代,转为兼容维护。

2. 工具定位转型:主力运维工具 → 老旧兼容备用工具

Vista~Win7 时期是服务器网络排查首选;Win8 之后微软主推 PowerShell 面向对象网络模块,netstat 仅作为兼容兜底工具,现代云原生、批量自动化不再推荐使用。

3. 兼容优先策略

Vista 定型后的整套参数体系永久不变,存量机房批处理、镜像部署脚本、离线 WinPE 抢救工具全部无需改造,保证企业存量资产长期稳定运行。

九、新旧工具底层定位区分

  1. netstat.exe:文本输出传统工具,仅单机本地执行,无结构化数据、无远程批量能力;
  2. PowerShell Get-NetTCPConnection:现代云原生工具,底层同调用iphlpapi,增加 CIM 远程会话、对象管道筛选、导出 CSV 报表、多服务器并发查询,是当下自动化运维标准方案。

netstat.exe 与 Get-NetTCPConnection 完整解构|底层原理、依赖、执行链路、配套链

前置核心结论

  1. netstat.exe:传统控制台遗留工具(Win32 EXE),属于封装上层展示工具,底层调用 Windows IP Helper API;
  2. Get-NetTCPConnection:PowerShell Cmdlet,属于 NetTCPIP WMI 提供程序,原生基于 TCP/IP 驱动栈查询内核连接状态
  3. 两者数据源同源(内核 TCP 控制块),但调用路径、依赖组件、能力边界、性能完全不同;
  4. Windows 自 Vista/Server2008 起推荐使用 PowerShell 网络 cmdlet,netstat 仅为兼容保留。

一、netstat.exe 深度拆解

1. 基础信息

路径:%SystemRoot%\System32\netstat.exe
 
实现方式:原生 Win32 控制台程序
 
核心依赖库:iphlpapi.dll(IP Helper API)

2. 底层原理与执行链路

plaintext
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 配套依赖文件链

plaintext
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 短板

  1. 输出纯文本,无法程序化筛选、排序;
  2. 获取进程名(-b)效率差;
  3. 不支持原生筛选指定端口、状态;
  4. 不支持直接导出结构化对象;
  5. 微软标记为传统兼容工具,不再新增功能。

二、Get-NetTCPConnection 深度拆解(PowerShell Cmdlet)

1. 基础信息

归属模块:NetTCPIP
 
Cmdlet 载体:NetTCPIP.dll
 
运行环境:PowerShell 3.0+(Win8/Win10/Win11)
 
底层依托:WMI Provider / MSFT_NetTCPConnection 管理对象

2. 底层完整执行链路

plaintext
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)

plaintext
Get-NetTCPConnection        # TCP连接(等价netstat TCP部分)
Get-NetUDPEndpoint          # UDP端点
Get-NetRoute                # 路由表(netstat -r)
Get-NetIPInterface
Get-NetAdapter
Get-NetTcpSetting

4. 获取进程 PID / 进程名配套链路

Get-NetTCPConnection 默认输出包含 OwningProcess(PID)
 
示例链路:
powershell
# 原生组合,直接关联进程
Get-NetTCPConnection | Select LocalPort,RemoteAddress,State,OwningProcess,
    @{Name='ProcessName';Expression={ (Get-Process -Id $_.OwningProcess).Name }}

5. 依赖配套链

plaintext
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(两者共同数据源)

不管 netstat 还是 PowerShell 命令,最终都向内核驱动 tcpip.sys 请求:
 
TCP Control Block(TCB,TCP 控制块)
 
TCB 内核结构保存:
 
本地地址端口、远端地址端口、连接状态(LISTEN/ESTABLISHED/TIME_WAIT)、归属进程 PID、超时计时器、滑动窗口等。
通俗理解:
 
tcpip.sys 是操作系统网络栈;
 
netstat / Get-NetTCPConnection 只是两种不同的 “查询窗口”,只是窗口实现方式不一样。

五、典型实操链路模板

1)netstat 传统用法

cmd
:: 查看所有TCP/UDP连接,带PID
netstat -ano
:: 查找指定端口
netstat -ano | findstr ":443"

2)PowerShell 现代方案(推荐)

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

六、高频底层误区澄清

  1. ❌误区:两者读取不同网络连接表
     
    ✅真相:数据源完全一致,都是 tcpip.sys 内核 TCB;区别只在用户态调用 API。
  2. ❌误区:Get-NetTCPConnection 可以查看 UDP
     
    ✅错误:仅 TCP;UDP 端点使用 Get-NetUDPEndpoint
  3. ❌误区:netstat -b 和 PowerShell 获取进程方式等价
     
    ✅不等价:
     
    netstat -b 遍历进程加载模块寻找 socket;
     
    PowerShell 直接从 TCB 读取 OwningProcess PID,性能更高。
  4. ❌误区:无管理员权限完全无法运行
     
    ✅普通权限可以看到大部分连接;部分内核 / 系统进程连接、-b 参数、CIM 远程查询需要管理员权限

netstat.exe 完整底层原理(用户程序 → Win32 API → 内核 TCP/IP 栈全链路拆解)

一、整体分层执行架构(自上而下)

1. 用户态前端:netstat.exe 可执行程序

  1. 无网络数据采集逻辑,仅做两件事:解析命令行参数、格式化内核返回的二进制数据为人类可读文本;
  2. 区分参数分支:连接表、网卡流量、路由、协议统计、进程映射,分别调用对应 iphlpapi.dll 函数;
  3. 权限校验分支:
    • 普通参数(-a/-n/-e/-r/-s):普通用户令牌即可执行;
    • -o(PID)、-b(程序组件栈):校验管理员 UAC 提升令牌,普通用户直接返回空进程信息;
  4. 输出处理:反向 DNS 解析(无-n时触发)、FQDN 域名格式化、按端口排序(-c)、周期循环刷新(interval)。

2. 系统 API 中间层:iphlpapi.dll(核心桥梁)

netstat 所有底层数据全部依赖这套 Windows 网络管理 API,分为五大类接口:
功能模块 核心 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(管理员专属)
关键:所有 API 最终通过IOCTL 控制码下发请求至内核 tcpip.sys,读取内核内存中维护的网络元数据。

3. 内核层:tcpip.sys Windows TCP/IP 协议驱动(数据源核心)

内核常驻驱动,在非分页内存维护所有网络运行时元数据,是 netstat 唯一真实数据源:
  1. TCP 连接控制块 TCB:存储每条 TCP 连接五元组、状态、持续时长、DSCP 标记、卸载标记、关联 PID;
  2. UDP 端点表:所有侦听 / 绑定 UDP 端口记录;
  3. IP 路由表:系统静态 / 动态路由缓存(netstat -r 读取);
  4. 协议统计计数器:IP 分片、TCP 重传、ICMP 错误、丢包、收发字节计数器;
  5. 网卡接口 MIB 计数器:每块网卡收发数据包、错误、丢弃、广播统计;
  6. RDMA 高速端点池:NetworkDirect 集群专用连接记录;
  7. TCP 模板注册表缓存:系统全局 TCP 调优模板配置;
配套内核组件:
  • ntoskrnl.exe:进程管理器,提供 PID 与进程模块路径查询接口;
  • ndis.sys:网卡驱动栈,提供二层流量统计;
  • tcpipoffload.sys:TCP 硬件卸载状态管理(对应-t)。

4. 硬件层:网卡 NDIS 驱动

负责真实收发数据包,更新内核流量、错误计数器,数据会同步至tcpip.sys供 netstat 读取。

二、核心功能底层细分原理

1. 端口 / 连接查询(-a/-n/-o/-i/-d/-q

  1. 调用 GetTcpTable2 读取内核全部 TCB(TCP 控制块);
  2. 每条 TCB 内置字段:本地 IP / 端口、远端 IP / 端口、连接状态、创建时间戳、DSCP 值、关联 PID、卸载状态;
  3. -i 底层逻辑:用当前系统时间减去 TCB 创建时间,计算连接已持续时长;
  4. -d 底层逻辑:直接读取 TCB 内 QoS DSCP 标记字段;
  5. -q 底层逻辑:读取未侦听绑定端口(仅调用 bind、未 listen 的 TCP 预留端点);
  6. -o 底层逻辑:TCB 自带OwnerPid字段,直接返回进程 ID,无需额外内核查询。

2. -b 进程 / 组件栈溯源(管理员专属,权限隔离核心)

  1. 前置依赖:必须管理员令牌,普通用户内核接口直接拒绝访问;
  2. 执行链路:
    1. 通过 TCB 获取OwnerPid
    2. 调用内核进程 API,读取该 PID 加载的全部 DLL 模块;
    3. 逐层反向追溯模块调用栈,定位创建套接字的可执行文件;
  3. 性能损耗:需要遍历进程模块链表,上万并发连接时会产生明显卡顿。

3. 网卡流量统计 -e

底层读取 NDIS 接口 MIB-II 计数器,每条网卡独立维护一组原子计数器:
  • 接收 / 发送总字节、总数据包;
  • 单播、多播、广播包计数;
  • 错误包、丢弃包、CRC 校验失败计数;
     
    计数器由网卡硬件 / NDIS 驱动实时更新,永久驻留内核内存。

4. 协议统计 -s

tcpip.sys 为 IP/ICMP/TCP/UDP(IPv4+IPv6)分别维护独立统计计数器:
  • IP:分片、重组、丢弃、路由失败;
  • TCP:连接建立 / 关闭、重传、超时、窗口缩放事件;
  • ICMP:入 / 出报文、应答、错误报文;
     
    API 一次性批量读取全部计数器,netstat 格式化分协议输出。

5. 路由表 -r

读取内核 IP 转发表 GetIpForwardTable2,数据源与route print完全一致:
  • 目标网段、子网掩码、网关、接口索引、跃点 Metric;
     
    区分永久静态路由、动态 OSPF/RIP 路由、直连网段。

6. RDMA -x、TCP 模板 -y、TCP 卸载 -t

  1. -x:读取内核 NetworkDirect RDMA 端点池,面向高性能 HPC / 数据库集群;
  2. -t:读取 TCB 内 TCP Offload 硬件卸载标记,判断是否启用网卡分段卸载;
  3. -y:不读取实时连接,直接读取注册表 TCP 全局模板配置缓存,独立 API,无法与其他参数组合。

7. 周期刷新 interval

netstat 主线程循环执行完整 API 查询,sleep 指定秒数,循环打印;不会持续监听内核网络事件,仅定时快照采集,存在毫秒级数据延迟。

三、权限隔离底层安全机制

  1. 普通用户限制
     
    内核tcpip.sys、进程管理器做访问控制:普通令牌调用读取OwnerPid、进程模块栈的 API 会返回空值,所以-o/-b看不到进程信息;
  2. 管理员 UAC 提升
     
    右键「以管理员身份」启动终端,进程令牌携带高权限 SID,内核放开进程 - 端口映射接口访问;
  3. 安全防护目的:防止低权限恶意程序扫描系统所有端口对应的进程,窃取内网服务、后门程序信息。

四、DNS 域名解析底层逻辑(有无-n核心差异)

  1. 不带-n:对每条远端 IP 调用gethostbyaddr反向 DNS 查询,发送 DNS 请求解析 FQDN 域名;
    • 内网无 DNS 服务器、公网延迟高时会造成输出卡顿;
  2. -n完全跳过 DNS 解析,直接输出纯数字 IP + 端口,大幅提升查询速度,批量脚本、实时监控必用;
  3. -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、云原生自动化、批量运维流水线

六、常见底层故障根源

  1. netstat -b 卡顿 / 无模块输出
     
    底层:未管理员权限、进程已退出 TCB 残留、大量并发连接导致进程模块遍历阻塞;
  2. 执行输出极慢
     
    底层:未加-n触发大量反向 DNS 解析,DNS 服务器无响应;
  3. 看不到 PID 进程号
     
    底层:终端未提升管理员 UAC 令牌,内核拦截进程映射 API;
  4. -s TCP 重传计数持续上涨
     
    底层:内核tcpip.sys检测到链路丢包,触发 TCP 重传机制,属于链路层故障;
  5. -x RDMA 无输出
     
    底层:服务器未启用 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 延迟,排错首选)

cmd
netstat -ano

2. 溯源端口对应的程序与组件栈(管理员)

cmd
netstat -ano -b

3. 持续实时监控 TCP 连接,每 2 秒刷新

cmd
netstat -an 2

4. 仅查看 IPv4 TCP 连接,按端口排序

cmd
netstat -ano -p tcp -c

5. 查看完整网卡流量统计 + 分协议网络统计

cmd
netstat -es

6. 查看路由表(快速替代 route print)

cmd
netstat -r

7. 查看 TCP 连接持续时长、QoS DSCP 标记

cmd
netstat -and -i

8. 输出 RDMA 高速网络连接(数据库 / 高性能集群)

cmd
netstat -x

四、底层执行原理

  1. 用户层 netstat.exe:仅参数解析、文本格式化输出;通过 iphlpapi.dll 调用 Windows 网络管理 API;
  2. 内核网络栈 tcpip.sys:维护连接表、端口侦听列表、协议统计、路由、网卡流量计数器;
  3. 权限区分:
    • 普通用户:仅可读取基础连接、端口、流量统计;
    • 管理员令牌:才可读取进程 PID(-o)、程序组件栈(-b),内核限制普通用户获取进程 - 端口映射防信息泄露;
  4. DNS 解析逻辑:不带 -n/-f 时自动反向解析 IP 域名,会产生 DNS 请求、延迟输出;-n 直接跳过解析。

五、核心业务应用场景

  1. 安全应急排查netstat -ano -b 溯源陌生外联端口、木马后门、异常外联进程;
  2. 服务端口冲突排错:定位 80/443/3389 等端口被哪个程序占用;
  3. 网络性能调优netstat -s 查看 TCP 重传、分片丢失、ICMP 错误,定位链路抖动;
  4. QoS 专线校验-d 查看 DSCP 标记是否正常下发;
  5. 服务器集群 / RDMA 运维-x 排查 NetworkDirect 高速存储连接;
  6. 自动化批量审计netstat -an 导出端口基线,对比异常开放端口;
  7. 路由快速校验netstat -r 快速查看网关、静态路由,无需记忆 route 命令。

六、避坑关键提醒 ⚠️

  1. -b 参数消耗大量系统资源,扫描大型端口列表会卡顿,必须管理员权限;
  2. 不加 -n 会触发大量反向 DNS 解析,内网无 DNS 服务器时输出极慢;
  3. 普通管理员 UAC 未提升时,-o/-b 会显示空 / 拒绝访问;
  4. -y TCP 模板参数无法搭配其他筛选参数,只能单独执行;
  5. 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 / 数据库端口冲突)

需求:启动 IIS、MySQL、远程桌面提示端口被占用,溯源对应进程
cmd
netstat -ano | findstr ":80"
:: 根据返回PID,查看进程名称
tasklist | findstr 1234
:: 管理员查看完整程序+依赖DLL栈
netstat -ano -b | findstr ":3306"

场景 2:全盘扫描本机所有开放侦听端口,梳理服务基线

需求:盘点本机所有对外监听端口,检查不明开放端口
cmd
netstat -an
:: 仅查看TCP侦听端口
netstat -an -p tcp | findstr "LISTENING"

场景 3:排查预留未侦听端口冲突(程序 bind 绑定失败)

-q 查看仅绑定未监听的 TCP 预留端口,解决程序端口初始化报错
cmd
netstat -anq

二、网络连通、链路性能故障排查

场景 1:实时监控 TCP 连接波动,排查断连、频繁重连

每 2 秒刷新连接快照,观察客户端接入 / 断开情况
cmd
netstat -an 2

场景 2:分析僵死长连接、闲置会话(数据库 / 堡垒机超时异常)

-i 查看每条 TCP 连接持续运行时长,定位长时间无交互僵死连接
cmd
netstat -ani

场景 3:链路丢包、TCP 重传、分片异常性能诊断

读取全协议统计,查看 TCP 重传、ICMP 错误、IP 分片丢失计数
cmd
netstat -s
:: 仅查看IPv4 TCP统计
netstat -s -p tcp

场景 4:QoS 专线 DSCP 标记校验(企业专线流量分级失效)

-d 查看每条连接 DSCP 优先级值,验证路由 / 防火墙 QoS 策略是否生效
cmd
netstat -and

场景 5:网卡二层丢包、流量过载排查

-e 读取网卡原生收发统计,查看丢弃、错误、广播风暴计数
cmd
netstat -e
:: 联合协议统计综合分析
netstat -es

场景 6:TCP 硬件卸载故障排查(网卡 Offload 导致卡顿 / 断流)

-t 查看 TCP 卸载状态,定位硬件分段卸载引发的网络异常
cmd
netstat -ant

三、安全应急、病毒 / 后门外联溯源(红蓝对抗、勒索病毒排查)

场景 1:溯源陌生外联 IP、恶意后门程序

需求:发现主机主动外联境外 IP,定位恶意进程与程序文件
cmd
:: 数字快速定位外联PID
netstat -ano | findstr "ESTABLISHED"
:: 管理员完整溯源程序与DLL调用链
netstat -ano -b

场景 2:外联域名资产审计,反向解析外部 IP 完整 FQDN

-f 将外联 IP 解析为完整域名,识别访问的外部服务
cmd
netstat -anf

场景 3:批量导出端口基线,对比异常新增开放端口

自动化导出本机端口清单,用于安全基线比对
cmd
netstat -an > C:\port_baseline.txt

场景 4:排查木马隐蔽非标准侦听端口

全盘扫描所有 TCP/UDP 侦听、绑定端口,无遗漏
cmd
netstat -a

四、路由、网关快速校验(轻量化路由排查,替代 route print)

需求:快速查看本机默认网关、静态路由、直连网段,无需记忆 route 命令
cmd
netstat -r
适用场景:多网卡服务器切换网关、VPN 路由下发校验、内网跨网段不通快速排查。

五、高性能集群、RDMA / 数据库服务器专属场景

场景 1:HPC、数据库 RDMA 高速连接排查(NetworkDirect)

-x 查看 RDMA 侦听器、共享端点、高速直连会话
cmd
netstat -x

场景 2:全局 TCP 参数基线审计、延迟调优模板核查

-y 读取系统 TCP 连接模板配置,用于服务器网络调优基线归档
cmd
netstat -y

六、自动化、批量机房基线运维(CMD 批处理 / GPO 开机脚本)

场景 1:服务器开机自动导出网络审计日志

cmd
@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 端口升序输出,快速检索业务固定端口段
cmd
netstat -anc

场景 3:WinPE 离线故障抢救(无 PowerShell 极简环境)

系统蓝屏、无法进桌面时,WinPE 内置 netstat,挂载硬盘后排查遗留端口配置、路由异常。

七、IPv6 双栈网络专项运维

场景:单独筛选 IPv6 连接、统计 IPv6 流量错误

cmd
:: 仅查看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 轻量化路由查询

九、适用环境边界说明

  1. 适用环境:Windows 全系列桌面 / 服务器、WinPE 离线镜像、老旧机房 CMD 批处理自动化、无 PowerShell 极简系统;
  2. 不推荐场景:大规模云服务器批量运维、远程多主机并发查询,优先使用 PowerShell Get-NetTCPConnection + CIM 远程会话;
  3. 权限边界:端口进程溯源(-o/-b)必须管理员提升终端,普通用户无法读取进程 PID 与程序路径。

 

netstat.exe 特殊 / 另类实战示例(常规教程极少覆盖,适配安全溯源、批量审计、底层性能、离线抢救、自动化脚本小众场景)

前置通用约束

  1. -b / -o 参数必须管理员终端
  2. 批量脚本优先加 -n 关闭 DNS 解析,消除卡顿;
  3. 间隔刷新、RDMA、TCP 模板、DSCP、连接时长均为小众专业参数。

一、安全应急溯源类(隐蔽恶意外联、木马后门深度排查)

1. 实时持续监控外联建立行为(入侵捕获)

每 1 秒刷新,仅保留已建立外联连接,快速捕获木马主动外联
cmd
:loop
cls
netstat -ano | findstr ESTABLISHED
timeout /t 1 /nobreak >nul
goto loop

2. 完整溯源外联程序 + 全套 DLL 依赖栈,导出审计日志

批量保存恶意进程调用链,用于取证留档
cmd
netstat -ano -b > C:\security_net_trace.log

3. 反向解析所有外部 IP 完整 FQDN 域名,识别境外恶意服务器

-f 输出完整域名,普通参数仅显示 IP,适合外联资产审计
cmd
netstat -anf | findstr "ESTABLISHED"

4. 检索所有非标准高危侦听端口(1024 以上陌生端口)

过滤 LISTENING 侦听端口,排查隐藏后门
cmd
netstat -an | findstr LISTENING | findstr /v "0.0.0.0:[0-9][0-9][0-9]$"

二、底层网络性能小众排查(QoS、长连接、TCP 卸载、僵死会话)

1. 查看每条 TCP 连接持续时长 + DSCP 优先级标记(专线 QoS 故障专用)

同时展示连接存活时间与流量优先级,定位低优先级业务卡顿
cmd
netstat -and -i

2. 批量统计 TCP 重传、分片、超时错误,导出性能报表

单独提取 TCP 层异常计数器,用于链路抖动根因分析
cmd
netstat -s -p tcp > C:\tcp_perf_stat.txt
findstr "重传\|超时\|丢弃" C:\tcp_perf_stat.txt

3. 查看 TCP 硬件卸载 Offload 状态,解决网卡断流、卡顿

-t 小众参数,定位网卡分段卸载导致的内核 TCP 栈异常
cmd
netstat -ant

4. 筛选长时间僵死闲置 TCP 长连接(数据库 / 堡垒机堆积会话)

过滤存活超过 1 小时的闲置连接,清理无效占用
cmd
netstat -ani | findstr /r "[0-9][0-9]:[0-9][0-9]:[0-9][0-9]"

5. 同时输出网卡二层丢包 + 三层协议统计,完整链路诊断

组合 -e -s 同时读取网卡硬件错误与 TCP/IP 协议层统计
cmd
netstat -es

三、端口冲突、预留端口小众场景(程序 bind 绑定失败专用)

1. 查看系统仅绑定未监听的预留 TCP 端口(普通 netstat -a 无法显示)

-q 特殊参数,排查端口预占用导致服务启动失败
cmd
netstat -anq

2. 按端口数字升序完整排序,批量检索业务端口段

-c 端口从小到大排列,快速定位连续端口占用
cmd
netstat -anc

3. 单独筛选 IPv6 UDP 侦听端口(双栈服务器冷门排查)

过滤 IPv6 专属 UDP 端口,适配 IPv6 内网故障
cmd
netstat -an -p udpv6 | findstr LISTENING

四、高性能集群 / 数据库专属小众示例(RDMA NetworkDirect)

1. 查看 RDMA 高速直连端点、侦听器、共享内存连接

-x 仅 HPC、数据库、分布式存储服务器可用,普通办公机无输出
cmd
netstat -x

2. 导出系统全局 TCP 连接模板基线,用于多服务器调优对比

-y 独立参数,无法搭配其他筛选开关,归档 TCP 全局配置
cmd
netstat -y > C:\tcp_template_baseline.txt

五、自动化批处理 / 基线审计另类脚本(OEM 镜像、GPO 开机自检)

1. 开机自动生成带时间戳完整网络基线档案

整合端口、流量、路由、协议统计,无人值守资产采集
cmd
@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 数据库段)

循环检索多业务端口,一键汇总数据库外联会话
cmd
@echo off
for %%p in (1433 3306 6379 22) do (
    echo ===== 端口 %%p 连接清单 =====
    netstat -ano | findstr :%%p
)

六、轻量化路由快速排查(替代 route print 极简用法)

单命令快速查看网关、静态路由、直连网段

机房快速校验 VPN 下发路由、多网卡默认网关冲突
cmd
netstat -r

七、WinPE 离线抢救特殊用法(无 PowerShell 极简环境)

系统无法进桌面,WinPE 内置 netstat,挂载故障硬盘导出历史端口基线:
cmd
:: PE内离线读取目标系统遗留网络信息,导出U盘
netstat -an > E:\offline_host_port_log.txt

八、避坑型特殊组合(解决常见卡顿、解析延迟)

1. 关闭 DNS 解析极速实时监控(内网无 DNS 服务器必用)

-n 禁用反向域名解析,彻底消除输出卡顿
cmd
netstat -an 3

2. 管理员一键全量扫描 + 溯源,跳过 DNS 解析提速

cmd
netstat -ano -bn

九、小众参数分类速记

小众特殊参数 专属另类场景
-i 长连接僵死会话时长排查
-d QoS DSCP 流量优先级校验
-q 预留未监听端口冲突排查
-c 端口升序批量检索
-t TCP 硬件卸载故障排错
-x RDMA 高性能集群连接查看
-y TCP 全局模板基线归档
-f 外联 IP 完整 FQDN 域名解析取证
interval 数字 实时循环监控外联行为捕获

 

netstat 高精度时钟、无截断、完整时间采集特殊另类示例

核心前置说明

  1. netstat -i 原生输出 TCP 连接持续时长,格式 时:分:秒,内核 TCB 时间戳精度为毫秒级,但控制台文本输出仅格式化到秒;
  2. 默认 CMD 输出存在换行截断、列宽度截断、长连接时间折行丢失问题;
  3. 配套 findstr /rfor /f、PowerShell 混合脚本实现:无截断完整输出、高精度时间提取、毫秒级时序日志、循环时钟快照留存
  4. 全部脚本区分 CMD 原生批处理 / PowerShell 高精度版本,管理员运行。

一、无截断完整输出:解决控制台列截断、长时间折行丢失

1. CMD 原生:重定向文件规避窗口宽度截断(核心无截断方案)

直接输出至文本,不受 CMD 窗口列宽限制,完整保留连接时长、IP、PID、DSCP 全部字段,无任何折行丢失
cmd
:: 全量信息(时长+DSCP+PID+完整五元组)写入日志,永不截断
netstat -and -i > C:\netstat_full_no_trunc.txt
:: 事后读取完整无截断日志
type C:\netstat_full_no_trunc.txt

2. PowerShell 管道完整导出 CSV(结构化零截断,保留原始毫秒时间戳)

netstat 文本会丢失毫秒,PowerShell 原生 TCP API 读取内核原始时间戳,无格式截断
powershell
# 读取内核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 自动换行截断:加宽控制台缓冲区

临时扩大 CMD 输出缓冲区,屏幕实时查看不截断
cmd
:: 设置缓冲区宽300字符,高5000行
mode con cols=300 lines=500
netstat -and -i

二、高精度时钟循环快照:带系统时间戳标记每轮采集(精确到毫秒)

示例 1:CMD 循环采集,每 2 秒输出系统当前精确时间 + 完整连接时长(无截断日志)

cmd
@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)

powershell
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 连接总存活毫秒数

powershell
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 + 无截断 + 时间戳归档

完整批处理一体化脚本(机房长时间链路监控专用)

cmd
@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 过滤(秒级粗筛,适合快速排查)

筛选存活超过 1 小时的长连接(-i输出格式 01:00:xx
cmd
mode con cols=300
netstat -and -i | findstr /r "^.* [0-9][0-9]:[0-9][0-9]:[0-9][0-9]"

2. PowerShell 高精度毫秒阈值过滤(精准,无精度丢失)

只列出存活超过 3600000 毫秒(1 小时)的 TCP 会话
powershell
Get-NetTCPConnection | Where-Object {
    (New-TimeSpan -Start $_.CreationTime).TotalMilliseconds -gt 3600000
} | Select LocalPort,RemoteAddress,CreationTime

六、关键精度 / 截断底层补充说明

  1. netstat 原生时间精度局限
     
    netstat -i 仅对外输出秒级格式化字符串,内核 TCB 内部是毫秒级时间戳,netstat 工具做了格式化截断,无法直接拿到毫秒;
     
    想要毫秒精度必须依赖 Get-NetTCPConnection 读取原生 CreationTime 字段。
  2. 截断产生根源
     
    CMD 窗口可视列宽有限,长五元组、长时长字符串会自动折行丢失后半段;重定向至文件 > log.txt 完全规避截断,缓冲区mode con cols=xxx为屏幕临时解决方案。
  3. 时钟两类区分
    • 相对时钟:netstat -i 连接存活时长(相对创建时间)
    • 绝对时钟:系统%time% / PowerShell Get-Date .fff(真实墙上时间,用于时序对齐、故障溯源时间线)

Get-NetTCPConnection 高精度时间、无截断、小众另类完整示例

核心底层优势(对比 netstat)

  1. 原生毫秒级时间戳CreationTime 内核原始创建时间,精确到 yyyy-MM-dd HH:mm:ss.fff,无格式化秒级截断;
  2. 结构化对象零截断:无 CMD 窗口列宽折行丢失,导出 CSV/JSON 完整保留全部字段;
  3. 内置绝对时间 + 相对存活时长双精度计算,原生支持毫秒阈值过滤;
  4. 原生 CIM 远程批量多服务器采集统一时间基线;
  5. 可联合 Get-NetNeighbor / Get-Process 一次性带出进程、ARP、网卡信息。

前置约束

全部代码在管理员 PowerShell执行;远程查询需目标主机开启 WinRM 5985/5986。

一、无截断完整输出方案(彻底解决文本换行、列宽截断)

1. 完整对象列表,加宽格式化无屏幕截断

Format-List * 横向全字段展开,不受控制台宽度限制,所有隐藏属性全部打印
powershell
# 完整展开每条TCP连接所有原生字段,无任何截断
Get-NetTCPConnection -AddressFamily IPv4 | Format-List *

2. 导出 CSV 结构化永久归档(生产环境零丢失,推荐)

完整保留毫秒创建时间、本地 / 远端 IP、PID、网卡索引、DSCP、状态,无字符折行、无字段截断
powershell
$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 对接)

JSON 原生存储高精度 DateTime 对象,不会丢失毫秒精度
powershell
Get-NetTCPConnection | ConvertTo-Json -Depth 5 | Out-File C:\tcp_full.json -Encoding utf8

4. 远程批量导出多服务器无截断日志

单脚本批量采集百台服务器 TCP 连接,统一带高精度时间戳基线
powershell
$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 毫秒时间戳
powershell
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. 定时循环高精度快照,每次快照标记全局采集绝对毫秒时间

每 500 毫秒采集一次,每条快照带统一基准时钟,用于时序故障回溯
powershell
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. 精准阈值过滤:仅输出存活超过指定毫秒的僵死长连接

无需文本模糊匹配,原生数值判断,无精度丢失
powershell
# 筛选存活大于 3600000ms = 1小时 的TCP长连接
$thresholdMs = 3600000
Get-NetTCPConnection | Where-Object {
    (New-TimeSpan -Start $_.CreationTime).TotalMilliseconds -gt $thresholdMs
} | Select LocalPort,RemoteAddress,State,CreationTime

三、小众另类组合用法(常规教程不覆盖)

1. 一次性带出进程名称 + TCP 高精度时间(无需二次 tasklist 匹配)

powershell
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. 按存活毫秒升序排序,快速定位最短 / 最长连接

powershell
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. 分离监听端口与活动连接,分别归档高精度日志

powershell
# 仅侦听端口
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. 联合网卡信息,输出接口索引与分层完整时序日志

powershell
$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. 离线 / 镜像基线对比:导出每日固定快照用于安全审计

开机自动执行,生成带高精度时间戳的资产基线
powershell
$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 原生 CreationTime FILETIME 时间戳,保留完整微秒 / 毫秒精度,无格式化损耗。

2. 截断产生与规避

  • 截断诱因:CMD 文本工具按控制台字符宽度自动换行,长 IP / 长时长字段丢失后半段;
  • 规避方案:
    1. Format-List * 横向展开所有对象字段;
    2. 导出 CSV/JSON 二进制结构化存储,完全不受界面宽度限制;
    3. PowerShell 对象管道处理无中间文本转换,全程零字段丢失。

3. 两种时钟区分

  1. 相对时钟TotalMilliseconds 连接从创建到当前的时长(用于僵死会话、连接生命周期分析);
  2. 绝对墙钟时钟CreationTime 标准系统时间戳(用于跨服务器时序对齐、故障时间线溯源、安全取证)。

方案 1:先查全部 TCP 连接,管道筛选仅 IPv4(无参数报错,通用兼容所有 Windows 版本)

powershell
 
 
 
# 完整展开所有原生字段,无截断,仅保留IPv4连接
Get-NetTCPConnection | Where-Object { $_.AddressFamily -eq 'IPv4' } | Format-List *
 

方案 2:只查看 IPv6

powershell
 
 
 
Get-NetTCPConnection | Where-Object { $_.AddressFamily -eq 'IPv6' } | Format-List *
 

方案 3:不筛选协议,直接完整打印全部 TCP 连接(最简无报错)

powershell
 
 
 
Get-NetTCPConnection | Format-List *
 

补充:高精度时间 + 无截断导出 CSV 修正版(可用)

powershell
 
 
 
$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"
 

补充说明

  1. Format-List * 作用:横向展开对象全部隐藏原生属性,不受控制台宽度限制,彻底解决 netstat 文本截断问题;
  2. CreationTime 原生自带毫秒级时间戳,不需要额外换算即可做时序故障溯源;
  3. 兼容 Win10 / Win11 / Server2016~2025 全版本 PowerShell,无版本兼容报错。

输出内容解读 + 关键字段说明 + 补充高精度 / 无截断进阶用法

一、当前输出内容整体说明

  1. 执行 Get-NetTCPConnection | Format-List * 成功,无报错,完整输出所有 TCP 连接原生 CIM 对象全字段,彻底规避 netstat 窗口列宽截断、秒级时间精度丢失问题;
  2. 输出同时包含 IPv4 + IPv6 两类连接:
    • LocalAddress = ::RemoteAddress = :::IPv6 绑定 / 侦听端口(Bound / Listen);
    • LocalAddress = 0.0.0.0192.168.5.4:IPv4 本地地址;
  3. 连接状态分类说明:
    • Listen:本机对外侦听端口(服务、后台程序);
    • Bound:仅绑定端口、未建立外联会话(预留端口);
    • Established:已建立活跃 TCP 外联会话(你主机访问外部 443 HTTPS);
    • TimeWait:连接关闭后等待回收,CreationTime = 1601-01-01 是内核默认占位空时间,无实际创建时间;
  4. 最后一段脚本执行成功:已在 C:\ 生成带毫秒时间戳的无截断结构化 CSV 归档文件,字段包含毫秒创建时间、总存活毫秒,适合长期时序审计、安全基线留存。

二、核心高精度时间字段解读(对比 netstat 优势)

1. CreationTime 原生高精度基准字段

plaintext
 
 
 
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 自定义计算字段(高精度核心)

脚本里三个扩展字段彻底弥补 netstat 精度缺陷:
  1. CreateTimeMsyyyy-MM-dd HH:mm:ss.fff 绝对创建墙钟时间(毫秒);
  2. AliveTotalMs:连接从创建到快照的总毫秒存活时长(无精度丢失);
  3. AliveTotalSec:格式化保留 3 位小数秒,方便快速阅读。

三、无截断优势说明

  1. Format-List *:纵向逐条展开所有属性,不受控制台横向宽度限制,长 IPv6 地址、长 CIM 属性不会折行丢失后半段;
  2. Export-Csv UTF8:二进制结构化存储,所有 IP、端口、时间、PID 完整保存,打开 Excel / 文本编辑器无任何字符截断;
  3. 全程对象管道处理,无中间文本转换损耗,不会像 netstat 丢弃毫秒、长 IP 字段。

四、从输出里能提取的关键运维信息示例

  1. 高频外联进程 PID 7028:大量 Established 443 HTTPS 会话,可搭配 Get-Process -Id 7028 直接查看程序名称;
  2. 侦听端口清单:135、445、49664~49668 系统服务侦听端口;
  3. 大量 Bound 动态端口:程序预绑定未外联的预留端口,可排查端口冲突;
  4. IPv6 双栈正常工作:同时存在 IPv6 侦听与 IPv6 外联会话。

五、补充 2 条进阶高精度 / 无截断特殊脚本

1. 实时循环快照(全局毫秒基准时钟 + 毫秒存活时长)

powershell
 
 
 
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 小时僵死长连接(纯数值毫秒阈值,无文本模糊匹配)

powershell
 
 
 
# 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
 

六、底层精度关键区分总结

  1. netstat -i:内核毫秒源 → 工具格式化丢弃毫秒,仅输出 hh:mm:ss
  2. Get-NetTCPConnection CreationTime:直接读取 CIM FILETIME 原生毫秒时间戳,格式化后完整保留 .fff
  3. 截断根源: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 状态:例如 LISTENINGESTABLISHEDCLOSE_WAIT 等。
    • 本地地址:显示本地计算机的 IP 地址和端口号。
    • 远程地址:显示远程计算机的 IP 地址和端口号。
    • 连接状态:显示连接的当前状态。
  • 需要注意的是,netstat 本身并不会主动发起网络请求或发送数据包,而是从操作系统的内核中查询相关的连接信息。


3. TCP 连接的三次握手过程(如果有活动连接)

时间点:T2

  • 如果某些 netstat 命令展示的是活动的 TCP 连接(例如 ESTABLISHED 状态),则这些连接可能涉及到 TCP 三次握手 的过程。以下是这个过程的详细分析:

  • TCP 三次握手过程

    1. SYN:客户端发送 SYN 包,表示请求建立连接。
    2. SYN-ACK:服务器收到 SYN 包后,返回 SYN-ACK 包,确认接收并同意建立连接。
    3. 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 地址和端口号。
    • 连接状态:例如 LISTENINGESTABLISHED 等。

5. 显示 UDP 连接和监听端口(如果有)

时间点:T4

  • 如果 netstat 显示了 UDP 连接(netstat -u),那么系统会展示 UDP 端口的当前使用情况。由于 UDP 是无连接协议,因此没有类似 TCP 的三次握手过程,但会显示每个端口的状态(如 绑定端口)。

  • 协议栈交互

    • netstat → iphlpapi.dll → tcpip.sys
  • UDP 数据包的构建:

    • IP 包头部:包括源和目标 IP 地址、协议字段为 UDP。
    • UDP 包头部:包括源和目标端口、长度、校验和等。

总结:netstat 命令的协议交互与数据传输过程

  1. 执行 netstat 查询:当用户执行 netstat 命令时,操作系统通过网络协议栈查询当前的网络连接状态、路由表、接口统计信息等。

  2. TCP 连接的三次握手过程:如果查询的是活动的 TCP 连接,可能会涉及到三次握手过程,在此过程中,数据包会通过以太网帧、IP 包、TCP 包传输。

  3. UDP 连接的查询netstat 也会列出当前使用的 UDP 端口。UDP 连接没有三次握手,但 netstat 会显示每个端口的使用情况。

  4. 以太网帧、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命令的主要作用包括:

  1. 显示网络连接信息:Netstat可以列出当前系统上的所有网络连接,包括TCP、UDP等协议的连接状态、本地和远程地址、端口号等信息。通过查看网络连接信息,可以了解系统当前的网络活动情况。

  2. 显示监听端口:Netstat可以显示当前系统上正在监听的端口,包括TCP和UDP端口。这对于监视系统上运行的网络服务和应用程序非常有用,可以帮助管理员及时发现并解决端口冲突或者异常监听的问题。

  3. 显示路由表:Netstat可以显示系统的路由表信息,包括目标网络、网关、接口等信息。通过查看路由表信息,可以了解系统当前的网络路由配置,帮助诊断网络连接和数据传输的问题。

  4. 显示网络接口统计信息: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命令的主要发展阶段:

  1. 早期版本:最初的Windows版本中的Netstat命令功能较为简单,主要用于显示基本的网络连接信息和监听端口。它提供了一些基本的选项,如 -a 显示所有连接和监听端口, -n 以数字形式显示地址和端口等。

  2. Windows XP和Server 2003:随着Windows XP和Server 2003的推出,Netstat命令得到了一些功能性的增强。新增了一些选项,如 -o 显示相关的进程ID, -b 显示程序名称,帮助用户更好地理解网络连接和占用网络资源的程序。

  3. Windows Vista和Server 2008:在Windows Vista和Server 2008中,Netstat命令进一步改进了用户体验和可用性。新增了一些选项,如 -f 显示FQDN(Fully Qualified Domain Name)格式的地址, -x 显示扩展的信息,帮助用户更详细地了解网络连接和性能情况。

  4. Windows 7和Server 2008 R2:随着Windows 7和Server 2008 R2的发布,Netstat命令继续进行了一些改进和优化。提升了性能和稳定性,改进了输出格式,使其更易读和易理解。

  5. Windows 8和Server 2012:在Windows 8和Server 2012中,Netstat命令保持了稳定性和可靠性,并进行了一些细微的改进。优化了一些选项的默认行为,改进了输出的格式,提升了用户体验。

  6. Windows 10和Server 2016:随着Windows 10和Server 2016的推出,Netstat命令继续得到改进和优化。提升了性能和稳定性,增强了安全性,改进了输出格式和用户界面,使其更加现代化和易用。

 Windows的Netstat命令在其发展过程中不断得到改进和优化,功能逐渐丰富,性能逐步提升,用户体验不断改进,成为Windows系统中重要的网络诊断工具之一。


Windows的Netstat(Network Statistics)命令在网络管理和故障排除中有着广泛的应用场景,以下是其中一些常见的应用场景

  1. 检查网络连接状态:使用Netstat命令可以查看当前系统中的网络连接状态,包括已建立的连接、正在监听的端口以及连接状态等信息。这有助于管理员了解系统的网络活动情况,及时发现异常连接或网络瓶颈。

  2. 查找端口占用情况:通过Netstat命令可以查找当前系统中正在占用的端口,以及占用该端口的进程。这对于解决端口冲突、定位服务启动失败等问题非常有用。

  3. 检测网络活动:管理员可以使用Netstat命令来检测系统中的网络活动,包括接收和发送的数据包数量、流量统计等信息。这有助于监视系统的网络使用情况,及时发现异常流量或攻击行为。

  4. 查找网络连接的远程地址:通过Netstat命令可以查找当前系统中与远程主机建立的网络连接,包括远程主机的IP地址、端口号等信息。这对于识别网络攻击来源、防范恶意连接非常有用。

  5. 诊断网络故障:管理员可以使用Netstat命令来诊断网络故障,包括检查网络连接是否正常、查找网络延迟或丢包等问题。通过分析Netstat输出可以定位网络问题的原因,并采取相应的措施进行修复。

  6. 监控网络性能:通过定期运行Netstat命令并记录输出结果,管理员可以监控系统的网络性能,并根据历史数据进行性能分析和优化。这有助于提高系统的网络效率和稳定性。

Windows的Netstat命令在网络管理和故障排除中扮演着重要的角色,可以帮助管理员实时监控网络状态、定位问题并采取相应的措施进行处理,确保系统的网络运行正常。


Windows的Netstat(Network Statistics)命令还可以用于一些更高级的应用场景,如下所示

  1. 监控特定端口或协议的网络活动:管理员可以使用Netstat命令结合过滤选项,如 -p 用于指定协议、 -t 用于指定TCP连接、 -u 用于指定UDP连接等,来监控特定端口或协议的网络活动。这有助于对特定服务或应用程序的网络使用情况进行深入分析。

  2. 查找并终止指定端口的连接:通过结合Netstat命令和其他命令(如Tasklist和Taskkill),管理员可以查找并终止指定端口的网络连接。这对于清理僵尸连接、关闭异常连接或防范网络攻击非常有用。

  3. 分析网络性能问题:管理员可以使用Netstat命令结合 -s 选项查看详细的网络统计信息,包括接收和发送的数据包数量、错误统计、拒绝的连接等。通过分析这些统计信息,可以发现网络性能问题的根本原因,并采取相应的措施进行优化。

  4. 检测网络安全漏洞:通过监控Netstat命令的输出,管理员可以及时发现异常连接或未经授权的访问,从而及时采取措施防范网络安全漏洞。例如,发现大量连接到未经授权的端口,可能表明系统存在安全风险。

  5. 网络流量分析:管理员可以使用Netstat命令结合其他网络分析工具,如Wireshark,对系统的网络流量进行深入分析。通过分析网络流量,可以了解系统的网络使用情况、识别恶意流量并加以防范。

  6. 监控远程连接状态:通过使用Netstat命令结合 -a 选项和远程主机地址,管理员可以监控系统与远程主机之间的连接状态。这有助于实时监控远程访问情况,及时发现异常连接或未经授权的访问。

 Windows的Netstat命令在高级网络管理和安全监控中有着广泛的应用,管理员可以根据实际需求结合不同的选项和其他命令,灵活运用Netstat命令进行网络管理和故障排除。


netstat (Network Statistics)命令的各个选项的功能,我们可以将其归类为不同的功能类别,具体如下:

功能分类 参数 描述
显示所有连接与端口 -a 显示所有连接和监听端口。
  -q 显示所有连接、监听端口以及已绑定的非监听TCP端口(这些端口可能与活动连接有关)。
显示进程信息 -b 显示创建每个连接或监听端口的可执行程序。在某些情况下,显示多个组件的执行程序,直至达成TCP/IP连接。
  -o 显示每个连接的进程ID(PID)。
  -c 显示按当前消耗的TCP或UDP端口数排序的进程列表。
显示连接/端口的详细信息 -e 显示以太网统计信息(可以与 -s 参数结合使用)。
  -f 显示外部地址的完全限定域名(FQDN)。
  -n 以数字形式显示地址和端口号(不解析主机名、服务名)。
显示路由信息 -r 显示路由表信息。
显示协议统计信息 -s 显示按协议分的统计信息,默认显示IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP和UDPv6的使用情况。
  -p proto 显示指定协议(如TCP、UDP、TCPv6、UDPv6等)的连接信息。如果与 -s 一起使用,显示某个协议的统计信息。
显示TCP连接的状态 -i 显示TCP连接的当前状态及其所花费的时间。
显示网络连接状态 -t 显示当前连接的卸载状态。
显示网络Direct连接 -x 显示NetworkDirect连接、监听端口和共享端点。
显示TCP连接模板 -y 显示所有连接的TCP连接模板。此选项不能与其他选项一起使用。
显示DSCP值 -d 显示每个连接关联的DSCP(Differentiated Services Code Point)值。
实时刷新统计信息 interval 定时刷新选定的统计信息,每隔interval秒重新显示一次。按 CTRL+C 停止刷新。

示例:

  • netstat -a: 显示所有的连接和监听端口。
  • netstat -b: 显示每个连接及监听端口的相关可执行程序。
  • netstat -s: 显示按协议分类的网络统计信息。
  • netstat -p tcp: 显示TCP协议的连接信息。
  • netstat -r: 显示路由表信息。
  • netstat -o: 显示每个连接的进程ID(PID)。
  • netstat -e: 显示以太网统计信息。

通过这些分类,用户可以根据自己的需求选择合适的选项来获取网络连接、路由、协议统计等信息。

netstat /?

显示协议统计信息和当前 TCP/IP 网络连接。

NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-t] [-x] [-y] [interval]

  -a            显示所有连接和侦听端口。
  -b            显示在创建每个连接或侦听端口时涉及的
                可执行文件。在某些情况下,已知可执行文件托管
                多个独立的组件,此时会
                显示创建连接或侦听端口时
                涉及的组件序列。在此情况下,可执行文件的
                名称位于底部 [] 中,它调用的组件位于顶部,
                直至达到 TCP/IP。注意,此选项
                可能很耗时,并且可能因为你没有足够的
                权限而失败。
  -e            显示以太网统计信息。此选项可以与 -s 选项
                结合使用。
  -f            显示外部地址的完全限定
                域名(FQDN)。
  -n            以数字形式显示地址和端口号。
  -o            显示拥有的与每个连接关联的进程 ID。
  -p proto      显示 proto 指定的协议的连接;proto
                可以是下列任何一个: TCP、UDP、TCPv6 或 UDPv6。如果与 -s
                选项一起用来显示每个协议的统计信息,proto 可以是下列任何一个:
                IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 或 UDPv6。
  -q            显示所有连接、侦听端口和绑定的
                非侦听 TCP 端口。绑定的非侦听端口
                不一定与活动连接相关联。
  -r            显示路由表。
  -s            显示每个协议的统计信息。默认情况下,
                显示 IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6 的统计信息;
                -p 选项可用于指定默认的子网。
  -t            显示当前连接卸载状态。
  -x            显示 NetworkDirect 连接、侦听器和共享
                终结点。
  -y            显示所有连接的 TCP 连接模板。
                无法与其他选项结合使用。
  interval      重新显示选定的统计信息,各个显示间暂停的
                间隔秒数。按 CTRL+C 停止重新显示
                统计信息。如果省略,则 netstat 将打印当前的
                配置信息一次。

netstat -a

活动连接

  协议  本地地址          外部地址        状态

netstat -a 是一个非常有用的命令,用于显示计算机上的所有网络连接和监听的端口信息。该命令在 Windows 和类 Unix 系统(如 Linux 和 macOS)中都可以使用,帮助用户查看系统当前的网络状态。

netstat -a 的功能和用途

  1. 显示所有连接和监听的端口

    • netstat -a 命令会列出系统上所有的网络连接(包括 TCP 和 UDP 连接)以及当前监听的端口(包括处于监听状态的服务器端口)。
    • 它会列出连接的协议(如 TCP 或 UDP)、本地地址、远程地址及其状态。
  2. 查看当前的网络连接状态

    • 可以显示每个连接的状态(如 ESTABLISHEDLISTENINGCLOSE_WAIT 等),帮助用户了解哪些端口正在被使用,以及哪些连接处于活动状态。
  3. 帮助诊断网络问题

    • 通过查看所有连接和监听的端口,用户可以诊断网络连接问题或检测到潜在的安全问题。例如,如果某个端口没有被授权的服务监听或存在异常的网络连接,可以通过 netstat -a 来发现。

netstat -a 示例输出

以下是执行 netstat -a 命令后,可能出现的一些输出示例:

bashCopy Code
Proto  Local Address          Foreign Address        State
TCP    0.0.0.0:80             0.0.0.0:0              LISTENING
TCP    192.168.1.5:49152      192.168.1.10:80        ESTABLISHED
UDP    0.0.0.0:123            *:*                     LISTENING
UDP    192.168.1.5:53         *:*                     LISTENING

字段解释:

  • Proto: 协议类型,可能是 TCP 或 UDP
  • Local Address: 本地地址和端口,表示本地计算机上的 IP 地址和端口号。如果显示为 0.0.0.0,表示该端口正在监听所有可用的网络接口。
  • Foreign Address: 远程地址和端口,表示与本地计算机建立连接的远程计算机的 IP 地址和端口。
  • State: 连接的状态,常见的状态包括:
    • LISTENING: 表示该端口正在等待传入的连接请求(通常是服务器端口)。
    • ESTABLISHED: 表示该连接已经成功建立并正在传输数据。
    • TIME_WAIT: 表示连接已经关闭,正在等待足够的时间以确保远程系统收到确认。
    • CLOSE_WAIT: 表示本地计算机已经接收到连接关闭的请求,但还未完全关闭连接。

netstat -a 常见用途

  1. 检查正在监听的端口
    你可以查看所有正在监听的端口,帮助确认哪些服务在系统上运行。例如,如果你想查看哪个应用程序在使用 HTTP 服务端口 80,可以通过 netstat -a 查找 0.0.0.0:80192.168.1.x:80(具体取决于配置)。

  2. 检查远程连接
    netstat -a 可以列出所有当前的远程连接,包括它们的本地和远程地址,以及连接状态。如果你的计算机和远程服务器之间有 ESTABLISHED 状态的连接,这表示有数据正在传输。

  3. 安全性检查
    网络攻击者或恶意程序可能会监听不寻常的端口,netstat -a 可以帮助你发现系统上潜在的安全隐患。例如,如果你看到一个未授权的服务在某个端口上监听,可以进一步调查和处理。

  4. 诊断网络问题
    如果你无法连接到某个服务,可以使用 netstat -a 检查是否正确地建立了连接。如果发现目标端口没有出现在监听状态中,可能是防火墙阻止了连接,或者该服务没有正确启动。

  5. 监控网络活动
    netstat -a 提供的连接状态信息帮助管理员监控和分析网络活动,了解系统的网络流量是否正常,是否有异常连接。

netstat -a 输出的状态说明

netstat -a 输出中,State 字段非常重要,它指示连接的当前状态。常见的状态有:

  • LISTENING: 端口正在等待来自远程计算机的连接。
  • ESTABLISHED: 连接已经建立,可以传输数据。
  • TIME_WAIT: 连接已经关闭,但仍然保持一段时间,以确保远程系统确认连接关闭。
  • CLOSE_WAIT: 本地系统正在等待关闭连接的指令。
  • SYN_SENT: 本地系统已发送连接请求,等待远程系统确认。
  • SYN_RECEIVED: 本地系统已收到连接请求,并正在等待最终确认。
  • FIN_WAIT_1: 本地系统已关闭连接的一半,等待对方确认。
  • FIN_WAIT_2: 本地系统等待远程系统关闭连接。

 

netstat -a 是一个强大的工具,广泛用于检查计算机的所有网络连接和监听端口。它可以帮助用户查看哪些服务正在监听哪些端口、哪些连接处于活动状态、以及诊断网络问题和安全隐患。

netstat -b

活动连接

  协议  本地地址          外部地址        状态

netstat -bnetstat 命令的一个扩展选项,用于显示与网络连接相关的应用程序的可执行文件(进程)信息。具体来说,它会列出与每个网络连接(TCP/UDP)或监听端口相关联的程序名和可执行文件路径。

netstat -b 的功能和用途

  1. 显示与每个连接关联的应用程序

    • 使用 netstat -b,你可以查看每个 TCP 或 UDP 连接背后是哪个应用程序或进程在使用该端口。它不仅会显示网络连接的本地和远程地址,还会列出为该连接提供服务的应用程序的名称。
    • 如果你看到某个端口正在监听,netstat -b 可以帮助你找到是哪个程序在监听这个端口。
  2. 诊断进程和网络连接之间的关系

    • 在一些情况下,可能需要知道哪些程序在占用某个特定的端口,尤其是在网络故障排除或安全审核中。netstat -b 可以提供这些信息,帮助你诊断哪些进程正在发送或接收数据。
  3. 查看系统上的所有网络活动及进程

    • 通过 netstat -b,你可以监控系统上的所有网络活动,包括哪些进程通过哪些端口进行通信。这对于追踪不明网络活动、审计和识别潜在的恶意程序非常有帮助。

netstat -b 输出示例

执行 netstat -b 时,输出会包含每个连接或监听端口对应的应用程序。以下是一个示例输出:

bashCopy Code
Proto  Local Address          Foreign Address        State           PID     Program name
TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       1234    apache2.exe
TCP    192.168.1.5:49152      192.168.1.10:80        ESTABLISHED     5678    chrome.exe
UDP    0.0.0.0:123            *:*                     LISTENING       2345    ntpd.exe
UDP    192.168.1.5:53         *:*                     LISTENING       3456    dns.exe

字段解释:

  • Proto: 协议类型(如 TCP 或 UDP)。
  • Local Address: 本地地址和端口,表示本地计算机上的 IP 地址和端口。
  • Foreign Address: 远程地址和端口,表示连接的远程计算机的 IP 地址和端口。
  • State: 连接的状态,例如 LISTENING 或 ESTABLISHED
  • PID: 进程 ID,表示正在使用该端口的进程的 ID。
  • Program name: 与该网络连接或端口关联的应用程序的名称(如 apache2.exechrome.exe 等)。

netstat -b 常见用途

  1. 查看占用特定端口的应用程序

    • 如果你想知道是哪个进程占用了某个端口(例如 80 或 443 端口),netstat -b 可以帮助你快速找到相关的应用程序或进程。对于开发者和系统管理员来说,这对排查冲突和资源管理非常重要。
  2. 诊断恶意软件或不明进程

    • 如果你怀疑某个恶意程序正在通过某个端口进行网络通信,netstat -b 可以帮助你识别这个程序。结合 PID 号,你还可以进一步查询系统上的进程,查看它是否为恶意软件或未经授权的程序。
  3. 分析网络流量来源

    • 当你需要了解哪个进程或应用程序在进行大量网络通信时,netstat -b 可以帮助你快速查看哪些进程通过网络连接传输数据。例如,你可以查看哪些浏览器、下载工具或服务器应用程序正在进行通信。
  4. 监控网络服务和监听端口

    • netstat -b 还可以帮助管理员监控哪些程序正在监听端口。例如,你可以确认是否有 web 服务器正在监听 80 端口,或数据库服务是否在监听 3306 端口。
  5. 安全审计和漏洞扫描

    • 通过查看 netstat -b 输出,你可以发现未经授权的网络服务或进程。例如,某些恶意软件可能会伪装成合法进程,使用某些端口进行不正当的网络活动。netstat -b 可以帮助你识别这些异常情况。

注意事项

  • 管理员权限: 由于 netstat -b 需要访问系统中的网络连接和进程信息,因此在大多数操作系统中,你需要以管理员身份(或 root 权限)运行该命令,才能显示所有进程信息。

    在 Windows 系统中,可以使用以下命令以管理员身份运行:

    bashCopy Code
    netstat -b

    在 Linux 或 macOS 系统中,可能需要使用 sudo

    bashCopy Code
    sudo netstat -b
  • 可能需要时间: 如果系统上有大量的网络连接,执行 netstat -b 可能会花费一定的时间,因为它需要查找并列出每个连接的进程信息。

 

netstat -b 是一个非常有用的工具,尤其在需要查看与网络连接相关的应用程序时。它可以帮助你:

  • 诊断占用特定端口的程序;
  • 检查哪些进程正在监听端口;
  • 监控和审计系统中的网络活动;
  • 识别异常的或恶意的网络通信。

通过结合进程 ID 和程序名,netstat -b 可以帮助你快速定位并解决与网络连接相关的各种问题。

netstat -e
Interface Statistics

                           Received            Sent

Bytes                    2269737158      1120521638
Unicast packets           107389554        87196314
Non-unicast packets          216030           23358
Discards                          0               0
Errors                            0               0
Unknown protocols                 0

netstat -e
接口统计

                           接收的            发送的

字节                      78049164        72062232
单播数据包              156360          203232
非单播数据包            5382            2868
丢弃                          0               0
错误                            0               0
未知协议                 0

 

netstat -e 是 Windows 和类 Unix 系统中常用的网络诊断命令之一。它主要用于显示网络接口的统计信息,尤其是与传输的数据包和字节数相关的详细数据。

netstat -e 的功能和用途

  1. 显示网络接口统计信息
    netstat -e 命令会显示以下与网络接口相关的统计信息:

    • 接收字节数 (Received Bytes):系统接收到的字节总数。
    • 发送字节数 (Sent Bytes):系统发送的字节总数。
    • 接收数据包数 (Received Packets):系统接收到的网络数据包的总数。
    • 发送数据包数 (Sent Packets):系统发送的网络数据包的总数。
    • 接收错误数 (Receive Errors):接收数据包时发生的错误数。
    • 发送错误数 (Send Errors):发送数据包时发生的错误数。
    • 接收丢包数 (Receive Discards):由于错误或缓冲区溢出等原因丢弃的接收数据包数。
    • 发送丢包数 (Send Discards):由于错误或其他原因丢弃的发送数据包数。
  2. 监控网络流量
    通过这些统计信息,你可以了解系统的网络流量情况。例如,过高的接收/发送错误数可能表明网络接口存在问题,而丢包数则可能表明网络连接不稳定或拥塞。

  3. 故障排除和性能监控
    netstat -e 可用于网络故障排除和性能监控。比如:

    • 如果你看到大量丢包,可能需要检查网络设备(如路由器、交换机等)或客户端设备的网络连接。
    • 过多的错误数据包可能表明有网络设备配置不当,或者网络接口的硬件问题。

netstat -e 示例输出

在 Windows 系统中,执行 netstat -e 命令的示例输出可能如下:

bashCopy Code
Interface Statistics

                       Received            Sent
Bytes                 123456789          987654321
Unicast packets        123456            789012
Non-unicast packets    34567              23456
Discards               0                  0
Errors                 0                  0
Unknown protocols      0                  0

字段解释:

  • Bytes: 接收和发送的字节数。
  • Unicast packets: 单播数据包的数量。
  • Non-unicast packets: 非单播数据包的数量(如广播或多播数据包)。
  • Discards: 丢弃的数据包数量。
  • Errors: 错误数据包的数量。
  • Unknown protocols: 未知协议的数据包数量。

注意事项

  • netstat -e 主要显示的是网络接口的总计信息,而不是与具体连接相关的信息。如果你需要查看与具体连接相关的统计数据,可以使用 netstat 或者更高级的网络工具如 netstat -an(显示所有端口和连接状态)或 ss(在类 Unix 系统中)。
  • 如果你想获得更详细的网络接口信息,可以使用 netstat -i 或 netstat -r 命令来查看接口表和路由表。

 

netstat -e 是一个非常有用的工具,主要用于查看计算机的网络接口统计信息。它帮助用户了解网络流量、诊断网络性能问题以及进行故障排除。

netstat -e 命令用于显示网络接口的统计信息,其中包括 非单播(Non-unicast)包 的数量。非单播包是指广播、组播以及目的地址不为单播的其他类型的包。具体来说,Non-unicast packets 包括:

  1. 广播包 (Broadcast):发送到网络上所有设备的包。
  2. 组播包 (Multicast):发送到特定组的多个设备的包。
  3. 错误包 (Error):由于错误或丢包导致的非单播数据包。

netstat -e 输出示例:

bashCopy Code
Interface Statistics
  Bytes Received          : 12345678
  Bytes Sent              : 87654321
  Non-unicast packets     : 12345
  Discards                : 0
  Errors                  : 0

Non-unicast packets 快速增长的可能原因:

  1. 广播或组播流量增加

    • 广播:如果网络上有大量的广播请求,或者应用程序(例如某些服务或协议)发送广播包(如 ARP 请求、DHCP 请求等),会导致 非单播包 数量的增加。
    • 组播:在使用组播协议(例如视频会议、流媒体、某些实时通信协议等)的环境中,组播包可能快速增长,尤其是在涉及大量设备或数据传输时。
  2. 网络服务的增加或故障

    • 某些服务可能会不断发送广播包,特别是如 ARP(地址解析协议)DHCP(动态主机配置协议) 或 WINS(Windows Internet Name Service) 等协议,这些协议在网络中会产生大量的非单播流量。
    • ARP 请求:如果存在大量的 IP 地址变化或设备连接到网络中,ARP 广播请求会增加,从而导致非单播包的快速增长。
  3. 网络环路或错误配置

    • 如果网络中存在环路(例如网络交换机配置错误),可能导致广播风暴,进而导致 非单播包 数量的急剧增加。
    • 交换机广播风暴:当网络交换机配置错误时,广播包可能在网络中循环发送,从而导致非单播包的迅速增加。
  4. 恶意活动

    • DDoS 攻击(分布式拒绝服务攻击)或其他网络攻击(如 ARP 欺骗)可能通过发送大量广播或组播包来干扰正常的网络操作,导致非单播包数量暴增。
  5. 网络拓扑变化

    • 网络设备(如路由器、交换机、计算机等)连接或断开时,可能会频繁发出广播包,尤其是在局域网(LAN)环境中。
  6. 设备故障或配置问题

    • 如果网络中的某个设备存在故障或配置不当,可能会导致它频繁发送非单播包(如广播包或错误包)。例如,设备可能持续发出 ARP 请求以寻找网络中的其他设备。

如何应对非单播包快速增长:

  1. 检查广播源

    • 使用网络监控工具(如 Wireshark、NetFlow 等)来分析网络流量,查看哪些设备或应用程序生成了大量的非单播包。
  2. 优化网络配置

    • 确保网络设备(如交换机、路由器等)正确配置,避免网络环路或广播风暴。
  3. 网络分段和VLAN配置

    • 将网络分段或使用 VLAN(虚拟局域网)技术可以限制广播的传播范围,减少非单播包的数量。
  4. 排查网络攻击

    • 检查是否存在网络攻击或异常活动。使用入侵检测系统(IDS)来监测和防止可能的攻击。
  5. 检查网络设备状态

    • 确认网络设备没有故障或错误配置,尤其是ARP表、路由表等网络参数。

Non-unicast packets 数量快速增长的原因可能是广播、组播流量的增加,或者由于网络配置错误、设备故障、网络环路或恶意攻击等原因导致的。在排查时,需要使用网络分析工具进行详细调查,找出根本原因,并采取适当的解决措施。

netstat -f

活动连接

  协议  本地地址          外部地址        状态

netstat -fnetstat 命令的一个选项,它的作用是 显示与网络连接相关的完整域名(Fully Qualified Domain Name,FQDN)。具体来说,-f 参数会让 netstat 显示网络连接的远程地址时,将 IP 地址解析为域名,而不是仅显示纯粹的 IP 地址。

netstat -f 的功能

  1. 解析远程 IP 地址为域名
    使用 netstat -f 时,命令会尝试解析网络连接的远程 IP 地址并显示其对应的域名。如果能够解析成功,它会显示完整的域名(FQDN),而不是仅仅显示 IP 地址。这样可以让你更直观地看到哪个主机或域名正在进行连接。

  2. 帮助辨识连接来源
    如果你在排查网络连接时,看到一个 IP 地址连接到你的服务器,你可能不确定这个 IP 地址是否属于某个合法的服务或应用。使用 netstat -f,你可以直接看到这个 IP 地址背后的域名,这样能帮助你判断它是否来自可信的来源。

netstat -f 的用途

  1. 查看域名而非 IP 地址
    对于一些管理员或者网络安全人员,知道连接的 IP 地址所属的域名可以帮助他们更好地识别外部连接。例如,连接来自 203.0.113.1 时,如果没有域名,你可能不清楚它属于哪个公司或服务。但使用 -f 选项后,netstat 会显示出域名(比如 example.com)。

  2. 增强网络监控的可读性
    当你在监控系统上的网络连接时,通过 netstat -f 可以帮助你识别是哪些域名正在连接到你的系统。这样可以更容易理解连接的源头,而不仅仅依赖于数字格式的 IP 地址。

  3. 检查网络连接是否来自可信域名
    如果你正在检查系统是否与某个特定服务(例如某个可信的外部服务器)建立连接,netstat -f 可以帮助你快速识别这些连接。如果某些连接的域名看起来不正常或不可信,就可以进一步排查。

  4. 网络故障排除和安全审计
    在进行安全审计或故障排除时,netstat -f 可以帮助你识别来自未知域名的连接,尤其是在你怀疑某些恶意活动时。如果连接的远程地址对应的域名不是你期望的域名,这可能是安全问题的线索。

netstat -f 输出示例

执行 netstat -f 后,输出将会显示连接的域名而非纯 IP 地址。例如:

bashCopy Code
Proto  Local Address          Foreign Address        State
TCP    192.168.1.5:443        example.com:443        ESTABLISHED
TCP    192.168.1.5:22         203.0.113.1:22         ESTABLISHED

在这个示例中:

  • 第一行表示本地地址 192.168.1.5 与 example.com 域名的 443 端口建立了连接。
  • 第二行表示本地地址 192.168.1.5 与 203.0.113.1(IP 地址)连接,但如果能解析出该 IP 对应的域名,也会显示出来。

注意事项

  1. 解析域名可能需要时间
    netstat -f 需要进行 DNS 查询以解析 IP 地址为域名,因此在连接较多时,可能会导致命令执行时间较长,尤其是在 DNS 服务器响应较慢的情况下。

  2. 需要适当的权限
    在某些操作系统中(特别是 Linux 和 macOS),运行 netstat -f 可能需要管理员权限。你可以使用 sudo 来获取这些权限:

    bashCopy Code
    sudo netstat -f
  3. 不一定总能解析域名
    如果某个 IP 地址没有有效的 DNS 记录,netstat -f 将无法将其解析为域名,并会显示原始的 IP 地址。

 

  • netstat -f 选项用于显示网络连接的远程地址,并将 IP 地址解析为完整的域名(FQDN)。
  • 它的主要用途是帮助用户识别连接的源头,尤其是在进行网络监控、故障排除和安全审计时。
  • 它可以增强 netstat 输出的可读性,帮助系统管理员或安全专家更直观地看到与哪些域名建立了网络连接。

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
===========================================================================
接口列表
  4...  ......Microsoft Wi-Fi Direct Virtual Adapter
 14...  ......Microsoft Wi-Fi Direct Virtual Adapter #2
 26...  ......Intel(R) Wi-Fi 6 AX200 160MHz
  6...  ......Bluetooth Device (Personal Area Network)
  1..... .....Software Loopback Interface 1
  5...  ......Generic Mobile Broadband Adapter
===========================================================================

IPv4 路由表
===========================================================================
活动路由:
网络目标        网络掩码          网关       接口   跃点数
          0.0.0.0          0.0.0.0      192.168.1.1     192.168.1.99    286
        127.0.0.0        255.0.0.0            在链路上         127.0.0.1    331
        127.0.0.1  255.255.255.255            在链路上         127.0.0.1    331
  127.255.255.255  255.255.255.255            在链路上         127.0.0.1    331
      192.168.1.0    255.255.255.0            在链路上      192.168.1.99    286
     192.168.1.99  255.255.255.255            在链路上      192.168.1.99    286
    192.168.1.255  255.255.255.255            在链路上      192.168.1.99    286
        224.0.0.0        240.0.0.0            在链路上         127.0.0.1    331
        224.0.0.0        240.0.0.0            在链路上      192.168.1.99    286
  255.255.255.255  255.255.255.255            在链路上         127.0.0.1    331
  255.255.255.255  255.255.255.255            在链路上      192.168.1.99    286
===========================================================================
永久路由:
  网络地址          网络掩码  网关地址  跃点数
          0.0.0.0          0.0.0.0      192.168.1.1     默认
===========================================================================

IPv6 路由表
===========================================================================
活动路由:
 接口跃点数网络目标                网关
 26    286 ::/0                     fe80::1
  1    331 ::1/128                  在链路上
 26    286  ::/64       在链路上
 26    286  /128
                                    在链路上
 26    286  /128
                                    在链路上
 26    286 fe80::/64                在链路上
 26    286  /128
                                    在链路上
  1    331 ff00::/8                 在链路上
 26    286 ff00::/8                 在链路上
===========================================================================
永久路由:
  无

netstat -s

IPv4 统计信息

  接收的数据包                   = 26367
  接收的标头错误             = 0
  接收的地址错误            = 0
  转发的数据报                = 0
  接收的未知协议         = 0
  丢弃的接收数据包         = 884
  传送的接收数据包         = 26786
  输出请求                    = 33820
  路由丢弃                   = 0
  丢弃的输出数据包           = 0
  输出数据包无路由             = 14
  需要重新组合                = 0
  重新组合成功              = 0
  重新组合失败                = 0
  数据报分段成功  = 0
  数据报分段失败    = 0
  分段已创建                  = 0

IPv6 统计信息

  接收的数据包                   = 4626
  接收的标头错误             = 0
  接收的地址错误            = 180
  转发的数据报                = 0
  接收的未知协议         = 0
  丢弃的接收数据包         = 83
  传送的接收数据包         = 4461
  输出请求                    = 4045
  路由丢弃                   = 0
  丢弃的输出数据包           = 0
  输出数据包无路由             = 0
  需要重新组合                = 0
  重新组合成功              = 0
  重新组合失败                = 0
  数据报分段成功  = 0
  数据报分段失败    = 0
  分段已创建                  = 0

ICMPv4 统计信息

                            已接收    已发送
  消息                  0           0
  错误                    0           0
  目标不可达   0           0
  超时             0           0
  参数问题        0           0
  源抑制           0           0
  重定向                 0           0
  回显回复              0           0
  回显                     0           0
  时间戳                0           0
  时间戳回复         0           0
  地址掩码             0           0
  地址掩码回复      0           0
  路由器请求      0           0
  路由器播发     0           0

ICMPv6 统计信息

                            已接收    已发送
  消息                  238         233
  错误                    0           0
  目标不可达   0           17
  数据包太大            0           0
  超时             0           0
  参数问题        0           0
  回显                     15          0
  回显回复              0           0
  MLD 查询               0           0
  MLD 报告               0           0
  MLD 已完成                 0           0
  路由器请求      0           1
  路由器播发     14          0
  邻居请求    169         43
  邻居播发   40          172
  重定向                 0           0
  路由器重新编号       0           0

IPv4 的 TCP 统计信息

  主动开放                        = 1108
  被动开放                       = 833
  失败的连接尝试          = 28
  重置连接                   = 49
  当前连接                 = 12
  接收的分段                   = 23213
  发送的分段                       = 19760
  重新传输的分段              = 132

IPv6 的 TCP 统计信息

  主动开放                        = 102
  被动开放                       = 0
  失败的连接尝试          = 12
  重置连接                   = 34
  当前连接                 = 0
  接收的分段                   = 3518
  发送的分段                       = 3051
  重新传输的分段              = 18

IPv4 的 UDP 统计信息

  接收的数据报    = 8958
  无端口              = 12
  接收错误        = 872
  发送的数据报        = 21493

IPv6 的 UDP 统计信息

  接收的数据报    = 602
  无端口              = 53
  接收错误        = 0
  发送的数据报        = 688

netstat -t

活动连接

  协议  本地地址          外部地址        状态           卸载状态

netstat -x

活动 NetworkDirect 连接、侦听器和共享端点

  模式   IfIndex 类型           本地地址          外部地址        PID

netstat -y

活动连接

  协议  本地地址          外部地址        状态           模板

netstat -s  命令 参数 


netstat -s是一个用于显示网络统计信息的命令。它会列出各种网络协议的统计数据,包括接收和发送的数据包数量、错误信息、连接状态等。通过查看这些统计信息,可以了解系统网络的运行情况,帮助诊断网络问题和优化网络性能。

这个命令的输出可以帮助管理员监控网络活动,识别潜在的问题,比如网络拥塞、连接异常、数据包丢失等。通过分析这些统计信息,可以及时采取措施来解决网络故障或改进网络性能。

使用netstat -s命令需要相应的权限,通常需要以管理员身份或root用户来运行。在处理网络问题时,这个命令可以提供有用的信息,但需要正确解读和分析结果,以便有效地解决网络相关的挑战。


以下是输出结果:

IPv4 Statistics

  Packets Received                   = 20292
  Received Header Errors             = 0
  Received Address Errors            = 232
  Datagrams Forwarded                = 0
  Unknown Protocols Received         = 0
  Received Packets Discarded         = 0
  Received Packets Delivered         = 20592
  Output Requests                    = 18140
  Routing Discards                   = 0
  Discarded Output Packets           = 0
  Output Packet No Route             = 0
  Reassembly Required                = 0
  Reassembly Successful              = 0
  Reassembly Failures                = 0
  Datagrams Successfully Fragmented  = 0
  Datagrams Failing Fragmentation    = 0
  Fragments Created                  = 0

IPv6 Statistics

  Packets Received                   = 26139
  Received Header Errors             = 0
  Received Address Errors            = 345
  Datagrams Forwarded                = 0
  Unknown Protocols Received         = 0
  Received Packets Discarded         = 52
  Received Packets Delivered         = 25784
  Output Requests                    = 21166
  Routing Discards                   = 0
  Discarded Output Packets           = 0
  Output Packet No Route             = 0
  Reassembly Required                = 0
  Reassembly Successful              = 0
  Reassembly Failures                = 0
  Datagrams Successfully Fragmented  = 0
  Datagrams Failing Fragmentation    = 0
  Fragments Created                  = 0

ICMPv4 Statistics

                            Received    Sent
  Messages                  0           0
  Errors                    0           0
  Destination Unreachable   0           0
  Time Exceeded             0           0
  Parameter Problems        0           0
  Source Quenches           0           0
  Redirects                 0           0
  Echo Replies              0           0
  Echos                     0           0
  Timestamps                0           0
  Timestamp Replies         0           0
  Address Masks             0           0
  Address Mask Replies      0           0
  Router Solicitations      0           0
  Router Advertisements     0           0

ICMPv6 Statistics

                            Received    Sent
  Messages                  70          70
  Errors                    0           0
  Destination Unreachable   0           17
  Packet Too Big            0           0
  Time Exceeded             0           0
  Parameter Problems        0           0
  Echos                     15          0
  Echo Replies              0           0
  MLD Queries               0           0
  MLD Reports               0           0
  MLD Dones                 0           0
  Router Solicitations      0           1
  Router Advertisements     7           0
  Neighbor Solicitations    36          14
  Neighbor Advertisements   12          38
  Redirects                 0           0
  Router Renumberings       0           0

TCP Statistics for IPv4

  Active Opens                        = 707
  Passive Opens                       = 100
  Failed Connection Attempts          = 479
  Reset Connections                   = 7
  Current Connections                 = 10
  Segments Received                   = 22119
  Segments Sent                       = 19555
  Segments Retransmitted              = 39

TCP Statistics for IPv6

  Active Opens                        = 168
  Passive Opens                       = 0
  Failed Connection Attempts          = 4
  Reset Connections                   = 21
  Current Connections                 = 4
  Segments Received                   = 24965
  Segments Sent                       = 20129
  Segments Retransmitted              = 79

UDP Statistics for IPv4

  Datagrams Received    = 127
  No Ports              = 0
  Receive Errors        = 0
  Datagrams Sent        = 150

UDP Statistics for IPv6

  Datagrams Received    = 760
  No Ports              = 22
  Receive Errors        = 0
  Datagrams Sent        = 768

IPv4统计信息

接收的数据包数                   = 20292
接收的头部错误                   = 0
接收的地址错误                   = 232
转发的数据报                     = 0
未知协议接收                     = 0
被丢弃的接收数据包               = 0
已交付的接收数据包               = 20592
输出请求                         = 18140
路由丢弃                         = 0
被丢弃的输出数据包               = 0
输出数据包无路由                 = 0
需要重新组装                     = 0
重新组装成功                     = 0
重新组装失败                     = 0
成功分片的数据报                 = 0
分片失败的数据报                 = 0
创建的片段数                     = 0

IPv6统计信息

接收的数据包数                   = 26139
接收的头部错误                   = 0
接收的地址错误                   = 345
转发的数据报                     = 0
未知协议接收                     = 0
被丢弃的接收数据包               = 52
已交付的接收数据包               = 25784
输出请求                         = 21166
路由丢弃                         = 0
被丢弃的输出数据包               = 0
输出数据包无路由                 = 0
需要重新组装                     = 0
重新组装成功                     = 0
重新组装失败                     = 0
成功分片的数据报                 = 0
分片失败的数据报                 = 0
创建的片段数                     = 0

ICMPv4统计信息

                        接收       发送
消息                      0           0
错误                      0           0
目的地不可达               0           0
超时                       0           0
参数问题                   0           0
源端抑制                   0           0
重定向                     0           0
回显应答                   0           0
回显                       0           0
时间戳                     0           0
时间戳应答                 0           0
地址掩码                   0           0
地址掩码应答               0           0
路由器请求                 0           0
路由器通告                 0           0

ICMPv6统计信息

                        接收       发送
消息                      70          70
错误                      0           0
目的地不可达               0           17
数据包太大                 0           0
超时                       0           0
参数问题                   0           0
回显                       15          0
回显应答                   0           0
MLD查询                    0           0
MLD报告                    0           0
MLD完成                    0           0
路由器请求                 0           1
路由器通告                 7           0
邻居请求                   36          14
邻居通告                   12          38
重定向                     0           0
路由器重新编号             0           0

IPv4的TCP统计信息

主动打开连接                    = 707
被动打开连接                    = 100
连接尝试失败                    = 479
重置连接                        = 7
当前连接数                      = 10
接收的数据段                    = 22119
发送的数据段                    = 19555
重传的数据段                    = 39

IPv6的TCP统计信息

主动打开连接                    = 168
被动打开连接                    = 0
连接尝试失败                    = 4
重置连接                        = 21
当前连接数                      = 4
接收的数据段                    = 24965
发送的数据段                    = 20129
重传的数据段                    = 79

IPv4的UDP统计信息

接收的数据报数                  = 127
无端口号数据报                  = 0
接收错误                        = 0
发送的数据报数                  = 150

IPv6的UDP统计信息

接收的数据报数                  = 760
无端口号数据报                  = 22
接收错误                        = 0
发送的数据报数                  = 768

 

Netstat命令是用于显示计算机网络连接信息的命令行工具。它提供了许多用于查看网络状态、连接信息和统计数据的选项。下面是Netstat命令的初级、中级和高级应用实例:

初级应用实例:

  1. 查看所有活动连接

    bashCopy Code
    netstat

    这将显示计算机上所有活动的网络连接。

  2. 查看TCP连接

    bashCopy Code
    netstat -t

    这将仅显示TCP连接的信息。

  3. 查看UDP连接

    bashCopy Code
    netstat -u

    这将仅显示UDP连接的信息。

  4. 查看监听端口

    bashCopy Code
    netstat -a

    这将显示计算机上所有正在监听的端口以及相应的协议。

中级应用实例:

  1. 查看指定端口的连接

    bashCopy Code
    netstat -an | find "端口号"

    这将显示指定端口的所有连接信息,例如 netstat -an | find "80" 可以查找所有连接到端口80的网络连接。

  2. 查看网络连接统计信息

    bashCopy Code
    netstat -s

    这将显示各种协议的网络统计信息,包括接收和发送的数据包数量、错误统计等。

高级应用实例:

  1. 查找指定IP的连接

    bashCopy Code
    netstat -an | find "IP地址"

    这将显示与指定IP地址相关联的所有连接信息。

  2. 查找特定进程的连接

    bashCopy Code
    netstat -ano | find "PID"

    这将显示与指定进程ID相关联的所有连接信息。可与任务管理器一起使用,以查看特定进程的网络活动。

  3. 检测网络安全漏洞

    bashCopy Code
    netstat -ab

    这将显示正在使用网络连接的每个进程的相关信息,包括进程名称、PID和本地地址等。通过分析这些信息,可以发现异常连接或潜在的安全威胁。

通过结合这些选项和参数,管理员可以根据实际情况灵活运用Netstat命令,从而更好地管理和监控计算机的网络连接。


Netstat命令与其他命令组合可以扩展其功能,提供更多有用的信息。下面是Netstat命令与其他一些命令组合的初级、中级和高级应用实例:

初级应用实例:

  1. 查看本地IP地址

    bashCopy Code
    ipconfig | findstr IPv4

    这将显示计算机的本地IPv4地址,然后可以使用此地址来过滤Netstat输出,以查看与该地址相关的连接。

  2. 查看活动连接和进程

    bashCopy Code
    netstat -ano

    结合Tasklist命令:

    bashCopy Code
    tasklist | findstr "PID"

    这将显示所有活动连接及其相关的进程ID(PID),然后使用Tasklist命令找到对应的进程名称。

中级应用实例:

  1. 查找指定端口的占用进程

    bashCopy Code
    netstat -ano | find "端口号"

    结合Tasklist命令:

    bashCopy Code
    tasklist | findstr "PID"

    这将显示占用指定端口的进程ID(PID),然后使用Tasklist命令找到对应的进程名称。

  2. 查看特定进程的网络连接

    bashCopy Code
    netstat -ano | find "PID"

    这将显示与指定进程ID相关联的所有连接信息。

高级应用实例:

  1. 查找指定进程的详细信息

    bashCopy Code
    wmic process where ProcessId="PID" get Caption,ProcessId,CommandLine

    这将显示指定进程的名称、进程ID和启动命令行参数。

  2. 查找指定进程的资源使用情况

    bashCopy Code
    wmic process where ProcessId="PID" get Caption,ProcessId,ThreadCount,WorkingSetSize,VirtualSize

    这将显示指定进程的名称、进程ID以及线程数、工作集大小和虚拟大小等资源使用情况。

通过这些组合,可以更深入地了解特定网络连接和进程的相关信息,帮助管理员进行网络监控、故障排除和安全审计等任务。


在 Windows 系统中,watch 命令是 Linux 和类 Unix 系统中使用的命令,并没有直接在 PowerShell 中可用。为了在 Windows 中模拟 watch 命令的功能,你可以使用 PowerShell 的 Start-ProcessGet-Command 来定期运行命令。以下是几种常见的替代方法。

方法 1:使用 Start-Sleep 在 PowerShell 中模拟 watch 命令

你可以编写一个简单的循环,使用 Start-Sleep 命令来每隔几秒钟执行一次 netstat 命令。例如,以下命令将每 2 秒执行一次 netstat -anop tcp

powershellCopy Code
while ($true) {
    netstat -anop tcp
    Start-Sleep -Seconds 2
}

此命令会不断显示 TCP 连接状态,每 2 秒刷新一次。

方法 2:使用 Get-Command 来实现定时输出

如果你希望在 PowerShell 中查看一个命令的输出,可以利用 Get-Command 来定期执行并显示。

powershellCopy Code
Get-Command "netstat -anop tcp" | ForEach-Object {
    & $_
    Start-Sleep -Seconds 2
}

方法 3:使用 Windows 原生命令

另外,Windows 自带的 timeout 命令也可以用来模拟定时执行:

powershellCopy Code
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 *`

示例:

  1. netstat -an 对应 PowerShell 命令

    powershellCopy Code
    Get-NetTCPConnection
  2. netstat -a 查看所有连接和监听端口

    powershellCopy Code
    Get-NetTCPConnection -State Listen
  3. netstat -b 查看与连接关联的应用程序: PowerShell 没有直接的命令来列出应用程序和进程,但可以通过:

    powershellCopy Code
    Get-NetTCPConnection | Select-Object -Property LocalAddress, LocalPort, State, OwningProcess

    然后通过 OwningProcess 获取对应的进程 ID (PID)。

  4. netstat -o 查看连接 PID

    powershellCopy Code
    Get-NetTCPConnection | Select-Object -Property LocalAddress, LocalPort, RemoteAddress, RemotePort, State, OwningProcess
  5. netstat -r 查看路由表

    powershellCopy Code
    Get-NetRoute

备注:

  • netstat 是一个命令行工具,默认情况下是与操作系统一起安装的。
  • PowerShell 的 Get-NetTCPConnectionGet-NetUDPEndpoint 等 cmdlet 提供了更现代、功能强大的接口来查看网络连接信息。
  • PowerShell 命令能更方便地与其他 cmdlet(如 Where-ObjectSelect-Object 等)结合使用进行更精确的过滤和处理。

通过 PowerShell,你不仅能执行基本的网络诊断,还可以轻松地对输出进行自定义和进一步处理。


 

posted @ 2024-03-27 08:28  suv789  阅读(1986)  评论(0)    收藏  举报