Windows 命令详解(三):网络诊断与配置命令速查表

2026-08-02 Windows

网络问题的排查顺序基本固定:先看本机配了什么地址,再看能不能通到目标,通不到就看断在第几跳,能通但服务用不了就看端口和 DNS。这一篇按这个顺序把对应的命令列成表。

语法和参数名照旧全部取自微软官方 Windows Commands 参考,出处列在文末。文里的示例地址统一用文档保留段和私有地址段(192.0.2.x 是 RFC 5737 里的文档示例段,192.168.1.x 是私有段),你换成自己的实际地址即可。

一、能不能通到目标

命令 作用 基本写法 示例
ping 用 ICMP 回显请求/应答验证到另一台 TCP/IP 计算机的 IP 级连通性 ping [/t] [/a] [/n <count>] [/l <size>] [/w <timeout>] [/4] [/6] <targetname> ping /n 10 /l 1000 192.0.2.10
tracert 用逐步增加 TTL 的 ICMP 消息确定到目标经过的路径 tracert [/d] [/h <maximumhops>] [/w <timeout>] [/4] [/6] <targetname> tracert /d 192.0.2.10
pathping 统计到目标之间每一跳的延迟与丢包 pathping [/n] [/h <maximumhops>] [/p <Period>] [/q <numqueries>] [/w <timeout>] <targetname> pathping /n 192.0.2.10

ping 的常用开关:

开关 作用
/t 一直发回显请求,直到手动中断(Ctrl+C)
/a 对目标地址做反向名称解析
/n <count> 指定发送的回显请求个数
/l <size> 指定发送缓冲区(Data 字段)的长度,单位字节
/f 发送时设置「不分片」标志
/i <TTL> 指定存活时间
/v <TOS> 指定服务类型
/r <count> 记录路由(IPv4)
/s <count> 记录每跳的时间戳
/j <hostlist> / /k <hostlist> 松散源路由 / 严格源路由(仅 IPv4)
/w <timeout> 等待每次应答的超时时间(毫秒)
/R 用 IPv6 的路由头跟踪往返路径
/S <Srcaddr> 指定源地址
/4 / /6 强制用 IPv4 / IPv6

tracert 与 pathping 的关键区别:tracert 每个 TTL 只发少量探测包,快但不准;pathping 会对沿途每一台路由器发多个回显请求,跑得慢但能给出每一跳的丢包率。官方示例里就带着 computing statistics for 125 seconds... 这一行——这就是它在等统计采样,默认参数下等一两分钟是正常的,别以为卡死了。

两个判断上的坑:ping 通不代表端口通,ICMP 与 TCP/UDP 是各自独立的;反过来 ping 不通也不一定说明对方关机,可能是对方或中间设备禁了 ICMP,这种时候直接 tracert 看断在哪一跳,或者换端口检测手段验证。

二、本机到底配了什么

命令 作用 基本写法 示例
ipconfig 显示当前 TCP/IP 配置,并刷新 DHCP 与 DNS 设置 ipconfig [/all] [/renew [<adapter>]] [/release [<adapter>]] [/flushdns] [/displaydns] [/registerdns] ipconfig /all
getmac 返回所有网卡的 MAC 地址及其关联的协议列表 getmac [/s <computer>] [/fo {table | list | csv}] [/nh] [/v] getmac /fo table /nh /v
netsh interface 配置和管理网络接口 netsh interface <子上下文> netsh interface show interface

ipconfig 的参数表(官方收录的全部):

参数 作用
(不带参数) 只显示每个适配器的 IP 地址、子网掩码和默认网关
/all 显示所有适配器的完整 TCP/IP 配置
/allcompartments 显示所有隔离舱(compartment)的信息
/release [<adapter>] 向 DHCP 服务器发送 DHCPRELEASE,释放当前配置
/renew [<adapter>] 续订 DHCP 配置
/renew6 / /release6 对 IPv6 做续订 / 释放
/flushdns 清空并重置 DNS 客户端解析缓存
/displaydns 显示 DNS 客户端解析缓存的内容
/registerdns 手动发起 DNS 名称的动态注册
/showclassid <adapter> 显示指定适配器的 DHCP 类 ID
/setclassid <adapter> [<classID>] 设置适配器的 DHCP 类 ID

ipconfig /all 是最值钱的一条:它一次给出网卡描述、物理地址(MAC)、DHCP 是否启用、租约获取与过期时间、DNS 服务器、默认网关。看「是不是 DHCP 没拿到地址」(出现 169.254 开头就是自动专用地址,说明没联系上 DHCP)、「DNS 填的是谁」都靠它。

netsh interface 常用的三条:

写法 作用
netsh interface show interface 列出所有接口及其状态
netsh interface ipv4 show config name="以太网" 看指定接口的 IPv4 配置
netsh interface ipv4 set address name="以太网" source=dhcp 把该接口改回自动获取
netsh interface ipv4 set address name="以太网" source=static address=192.0.2.10 mask=255.255.255.0 gateway=192.0.2.1 store=persistent 设静态地址
netsh interface ipv4 set dnsservers name="以太网" source=static address=192.0.2.53 指定 DNS 服务器(source=dhcp 则改回自动获取)
netsh interface ipv4 reset 移除所有用户手工配置的 IPv4 设置(要重启电脑默认设置才生效)

name= 后面必须写和「网络连接」里一模一样的接口名(中文系统常见的是「以太网」「WLAN」,英文系统是 Ethernet、Wi-Fi),写错会直接报接口找不到。接口名拿不准就先跑 netsh interface show interface 看第一列。

三、路由表与邻居缓存

命令 作用 基本写法 示例
route print 显示完整路由表 route print [<destination>] route print 192.0.2.*
route add 添加路由 route add <destination> mask <netmask> <gateway> [metric <metric>] [if <interface>] route add 192.0.2.0 mask 255.255.255.0 192.168.1.1
route delete 删除路由 route delete <destination> route delete 192.0.2.0
route change 修改已有路由 route change <destination> ... route change 192.0.2.0 mask 255.255.255.0 metric 2
arp -a 显示 ARP 缓存里的当前条目 arp -a [inet_addr] [-N if_addr] [-v] arp -a
arp -d 删除指定 IP 的 ARP 条目 arp -d [inet_addr] [if_addr] arp -d 192.0.2.10
arp -s 添加静态 ARP 条目 arp -s [inet_addr] [eth_addr] [if_addr] arp -s 192.0.2.10 00-AA-00-4F-2A-9C
nbtstat 显示 NetBIOS over TCP/IP 统计、名称表与名称缓存 nbtstat [/a <remotename>] [/A <IPaddress>] [/c] [/n] [/r] [/RR] nbtstat -A 192.0.2.10
nbtstat -R 清除并重新加载名称缓存 nbtstat -R nbtstat -R

route 的两个开关要记:/f 会清掉路由表里所有非主机路由、非环回、非多播的条目(远程操作时很危险),/p 是与 add 一起用时把这条路由写成持久路由(重启后还在)。

route print 192.0.2.* 这种带通配的过滤写法在路由表很长时很好用。arp -a -N 192.0.2.99 可以只看指定网卡上的 ARP 表(-N 后面跟的是接口地址)。

arp -s 做静态绑定后,那条记录不会再被 ARP 应答刷新,排查「局域网里有两台设备用同一个 IP」这类冲突时常用;排查完记得 arp -d 删掉。

四、端口和连接

命令 作用 基本写法 示例
netstat 显示活动的 TCP 连接、监听端口、以太网统计、路由表、IPv4/IPv6 统计 netstat [-a] [-b] [-e] [-n] [-o] [-p <Protocol>] [-r] [-s] [<interval>] netstat -ano
参数 作用
-a 显示所有活动的 TCP 连接,以及 TCP/UDP 上正在监听的端口
-b 显示创建每个连接或监听端口所涉及的可执行程序(需要相应权限,且比较慢)
-e 显示以太网统计,如发送和接收的字节数、错误数
-n 以数字形式显示地址和端口号,不做名称解析
-o 显示活动连接时附带对应的进程 ID(PID)
-p <Protocol> 只显示指定协议的连接
-q 显示所有连接、监听端口和绑定的非监听 TCP 端口
-r 显示 IP 路由表(等同 route print)
-s 按协议显示统计信息
<interval> 每隔指定秒数重新显示一次

真正排「端口被谁占了」的流程是这两个命令配合:先 netstat -ano 拿到占用本地端口的连接的 PID(-o 那一列),再用 tasklist /fi "PID eq <那个PID>" 查出是哪个程序(tasklist 的过滤字段表在第二篇里)。官方示例里 netstat -o 5 表示每 5 秒刷新一次,做「连接数一直涨」这类观察时用它。

netstat -b 会直接给出程序名,比 -o 少走一步,但它要读每个连接对应的模块信息,速度慢且通常需要管理员权限,连接特别多时很拖。

五、域名解析

命令 作用 基本写法 示例
nslookup 诊断 DNS 基础设施、查询域名解析结果 nslookup [exit | help | ls | server | set] [options] nslookup example.com 192.0.2.53
ipconfig /displaydns 显示本机 DNS 解析缓存内容 ipconfig /displaydns ipconfig /displaydns
ipconfig /flushdns 清空 DNS 解析缓存 ipconfig /flushdns ipconfig /flushdns
netsh dnsclient 配置与查看 DNS 客户端设置 netsh dnsclient <子上下文> netsh dnsclient show global

nslookup example.com 192.0.2.53 里的第二个参数是指定用哪台 DNS 服务器查询,这是它最有用的地方:换一台 DNS 分别查同一个域名,就能判断「是我这边 DNS 服务器的问题还是域名本身配错了」。

直接 nslookup <域名> 不带服务器参数时,它用的是系统配置的 DNS。不带任何参数运行会进入交互模式,官方列出的子命令有 exit、finger、help、ls、lserver、root、server、set、view。交互模式里最常用的是 set type=,用来换查询的记录类型:

set type= 取值 查询内容
A 计算机的 IP 地址(默认)
ANY 该名称的全部可用记录
CNAME 别名的规范名称
MX 邮件交换器
NS 命名区域的 DNS 名称服务器
PTR 由 IP 反查计算机名
SOA 区域的授权开始记录
TXT 文本信息
HINFO 计算机的 CPU 与操作系统类型

查邮件记录就是 set type=MX 之后再敲域名;查反解就是 set type=PTR 后敲 IP。nslookup -debug example.com 会把查询与应答报文一并打出来,看 DNS 到底回了什么。

ipconfig /flushdns 是「域名解析改了但本机还是旧地址」的标准处置,改完 hosts 文件、切换 DNS 之后都值得跑一下。ipconfig /displaydns 出的内容很多,一般配合重定向存成文件再搜。

六、防火墙与无线(netsh 两条主线)

防火墙:netsh advfirewall

写法 作用
netsh advfirewall firewall add rule name="Allow8080" protocol=TCP dir=in localport=8080 action=allow 放行入站 TCP 8080
netsh advfirewall firewall add rule name="BlockOutIP" protocol=TCP dir=out remoteip=192.0.2.10 action=block 阻止出站到指定地址
netsh advfirewall firewall show rule name=all 列出所有规则
netsh advfirewall firewall show rule name="MyRuleName" verbose 详细查看某条规则
netsh advfirewall firewall delete rule name="MyRule" 删除规则
netsh advfirewall set allprofiles state on 打开所有配置文件的防火墙
netsh advfirewall export <路径文件名> 导出当前防火墙策略
netsh advfirewall import <路径文件名> 导入防火墙策略
netsh advfirewall reset [export <路径文件名>] 把防火墙策略恢复为默认
netsh advfirewall show allprofiles 查看各配置文件的防火墙状态

上面几条 add rule 的写法直接来自官方示例。dir=in/dir=out 是入站/出站,action=allow/action=block 是放行/阻止,protocol=、localport=、remoteip= 是匹配条件。改之前先 export 一份,reset 这种操作才敢敲。

无线:netsh wlan

写法 作用
netsh wlan show interfaces 查看无线网卡与当前连接状态
netsh wlan show profiles 列出本机保存过的 Wi-Fi 配置
netsh wlan export profile name="WiFiName" folder=D:\wlan key=clear 把某个配置(含明文密钥)导出成 XML
netsh wlan connect name="WiFiName" 连接指定配置
netsh wlan disconnect 断开当前无线连接
netsh wlan delete profile name="WiFiName" 删除保存的无线配置

export profile ... key=clear 会把无线密码以明文写在 XML 里,这个文件别随手丢在共享目录;它同时也是「换机后快速恢复无线配置」或用组策略批量下发配置的正常做法。

网络组件复位:netsh winsock / netsh interface

写法 作用
netsh winsock show catalog 显示 Winsock 目录里注册的 LSP 与命名空间提供程序
netsh winsock reset 把 Winsock 目录重置为干净状态,移除自定义 LSP
netsh winsock set autotuning on 打开 Winsock 发送自动调优
netsh interface ipv4 show interfaces 列出 IPv4 接口与索引
netsh interface ipv4 reset 移除全部用户配置的 IPv4 设置,重启后回到默认状态

netsh winsock reset 的官方说明是:把 Winsock 目录复位成干净状态、移除自定义 LSP,用来处理 Winsock 设置损坏导致的网络异常,它不影响 Winsock 命名空间提供程序条目。这类复位属于「其他手段都试过之后才动」的一招,做完一般要重启系统,而一些依赖 LSP 的软件(老式杀软的流量监控、部分国产安全软件)需要重装才能重新接管网络栈——所以它是排障手段,不是日常保养。

七、抓数据、传文件、连端口

命令 作用 基本写法 示例
ftp 与 FTP 服务器之间传文件,可交互也可批处理 ftp [-v] [-d] [-i] [-n] [-g] [-s:<filename>] [<host>] ftp -s:D:\script.txt 192.0.2.20
tftp 与 TFTP 服务之间传文件 tftp [-i] [<host>] [{get | put}] <source> [<destination>] tftp -i 192.0.2.20 get image.bin
telnet 与 telnet 服务器通信;不带参数就进入 telnet 上下文 telnet [/a] [/e <escapechar>] [/f <filename>] [/l <username>] [/t {vt100 | vt52 | ansi | vtnt}] [<host> [<port>]] telnet 192.0.2.30 25

telnet <主机> <端口> 是最省事的手工端口探测手段:能连上就说明那个端口开着(虽然连上后看到的服务标识不一定乐意被你看到)。注意官方页面上写着必须先安装 telnet 客户端软件才能运行这个命令——较新的 Windows 默认不带这个客户端,要在「可选功能」里单独装上;不想装的话,用 PowerShell 的 Test-NetConnection -Port 同样能验端口(第五篇里讲)。

ftp 的 -s:<文件名> 是用脚本文件跑批量的写法,-i 关掉多文件传输时的逐个确认,-n 表示不使用自动登录(配合脚本里的 user 命令指定账户)。tftp -i 是二进制模式,传固件、镜像这类文件必须加,不加就可能被当文本处理弄坏文件。

八、一条命令抓一份网络现场

下面两个脚本都是只读的:跑一遍 ping、路由表、ARP 表、端口列表、DNS 配置,结果写到桌面上的 txt。脚本里那两处示例地址换成你自己要测的目标再去跑。

PowerShell 版(存成 win-cmd-check-3.ps1):

# Windows 命令详解(三)自检脚本:只读采集网络现场
$target = '192.0.2.10'      # ← 换成你要测试的目标地址
$dns    = '192.0.2.53'      # ← 换成你要对比的 DNS 服务器
$log = Join-Path ([Environment]::GetFolderPath('Desktop')) 'win-cmd-check-3.txt'

Set-Content -Path $log -Value 'Windows 网络现场快照(三)'
Add-Content -Path $log -Value ('生成时间:' + (Get-Date).ToString('yyyy-MM-dd HH:mm:ss'))

function Run([string]$title, [string]$cmd) {
    Add-Content -Path $log -Value ''
    Add-Content -Path $log -Value ('===== ' + $title + ' =====')
    cmd /c $cmd 2>&1 | Add-Content -Path $log
}

Run '完整 IP 配置'      'ipconfig /all'
Run '网卡 MAC 地址'     'getmac /fo list /v'
Run '接口列表'          'netsh interface show interface'
Run '连通性(4 个包)'  ('ping /n 4 ' + $target)
Run '路径跟踪'          ('tracert /d /h 15 ' + $target)
Run '路由表'            'route print'
Run 'ARP 表'            'arp -a'
Run '监听端口与连接'    'netstat -ano'
Run 'DNS 解析对比(本机 DNS)' ('nslookup ' + $target)
Run 'DNS 解析对比(指定服务器)' ('nslookup example.com ' + $dns)
Run 'DNS 缓存条目数'    'ipconfig /displaydns'

Write-Host ('报告已写入:' + $log)

批处理版(存成 win-cmd-check-3.bat):

netstat -ano 在连接很多的机器上输出会很长(几千行不奇怪),批处理版里没做截断,跑完打开 txt 用编辑器搜关键词比翻页快。

九、这个系列的其它几篇

十、出处

下列页面均属于微软官方 Windows Commands 参考(https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/):

ping、tracert、pathping、ipconfig、getmac、netsh、netsh-interface、netsh-advfirewall、netsh-wlan、netsh-dnsclient、netsh-winsock、netstat、nslookup、nslookup-set-type、arp、route、nbtstat、ftp、tftp、telnet。

几条重点页面的完整地址: