netsh(Network Shell)是一个windows系统本身提供的功能强大的网络配置命令行工具,可用来修改windows的ip、网关、dns等信息。
netsh是一个上下文命令,它有很多子命令,这些子命令各自又有各自的子命令,这样反复嵌套下来一共可以有4层命令或参数,例如【netsh interface ipv4 dump】。
如果进入了上下文环境,执行命令【exit】、【exit /b】可直接退出所有层级的上下文环境。
执行命令【netsh /?】,显示帮助信息
C:\WINDOWS\system32>netsh /?
用法: netsh [-a AliasFile] [-c Context] [-r RemoteMachine] [-u [DomainName\]UserName] [-p Password | *]
[Command | -f ScriptFile]
下列指令有效:
此上下文中的命令:
? - 显示命令列表。
add - 在项目列表上添加一个配置项目。
advfirewall - 更改到 `netsh advfirewall' 上下文。
branchcache - 更改到 `netsh branchcache' 上下文。
bridge - 更改到 `netsh bridge' 上下文。
delete - 在项目列表上删除一个配置项目。
dhcpclient - 更改到 `netsh dhcpclient' 上下文。
dnsclient - 更改到 `netsh dnsclient' 上下文。
dump - 显示一个配置脚本。
exec - 运行一个脚本文件。
firewall - 更改到 `netsh firewall' 上下文。
help - 显示命令列表。
http - 更改到 `netsh http' 上下文。
interface - 更改到 `netsh interface' 上下文。
ipsec - 更改到 `netsh ipsec' 上下文。
lan - 更改到 `netsh lan' 上下文。
mbn - 更改到 `netsh mbn' 上下文。
namespace - 更改到 `netsh namespace' 上下文。
netio - 更改到 `netsh netio' 上下文。
p2p - 更改到 `netsh p2p' 上下文。
ras - 更改到 `netsh ras' 上下文。
rpc - 更改到 `netsh rpc' 上下文。
set - 更新配置设置。
show - 显示信息。
trace - 更改到 `netsh trace' 上下文。
wcn - 更改到 `netsh wcn' 上下文。
wfp - 更改到 `netsh wfp' 上下文。
winhttp - 更改到 `netsh winhttp' 上下文。
winsock - 更改到 `netsh winsock' 上下文。
wlan - 更改到 `netsh wlan' 上下文。
下列的子上下文可用:
advfirewall branchcache bridge dhcpclient dnsclient firewall http interface ipsec lan mbn namespace netio p2p ras rpc trace wcn wfp winhttp winsock wlan
若需要命令的更多帮助信息,请键入命令,接着是空格,
后面跟 ?。
由于netsh命令是一个上下文命令,因此当直接执行netsh时,会进入netsh环境;而进一步使用诸如dump、delete这些命令时,效果和不先进入上下文环境而直接执行【netsh dump】、【netsh delete】的完全一样。
然而!!!
对于命令后带有「更改到 ' xxx ' 上下文」注释信息的命令本身(不带子命令或参数),就必须在netsh上下文环境中执行。
比如说interface命令后就有这种注释信息,因此如果要进入netsh interface上下文,必须先执行【netsh】进入netsh上下文。
再执行【interface】命令(或简写的int)进一步进入netsh interface上下文。
而再进一步执行【ip】或【ipv4】,就可进入netsh interface ipv4上下文;或者执行【ipv6】,进入netsh interface ipv6上下文。
(1)不在上下文中打印的帮助信息
打印帮助信息不管是不是处于上下文环境都可以;下面以netsh——>interface——>ipv4——>dump这个4层深度的命令链为例,讲述该链经过了netsh命令树的哪些“枝干”。
如果不是处于上下文环境,直接执行【netsh interface】,就会显示netsh interface上下文的子命令或参数。
C:\WINDOWS\system32>netsh interface
下列指令有效:
此上下文中的命令:
6to4 - 更改到 `netsh interface 6to4' 上下文。
? - 显示命令列表。
dump - 显示一个配置脚本。
help - 显示命令列表。
httpstunnel - 更改到 `netsh interface httpstunnel' 上下文。
ipv4 - 更改到 `netsh interface ipv4' 上下文。
ipv6 - 更改到 `netsh interface ipv6' 上下文。
isatap - 更改到 `netsh interface isatap' 上下文。
portproxy - 更改到 `netsh interface portproxy' 上下文。
set - 设置配置信息。
show - 显示信息。
tcp - 更改到 `netsh interface tcp' 上下文。
teredo - 更改到 `netsh interface teredo' 上下文。
udp - 更改到 `netsh interface udp' 上下文。
下列的子上下文可用:
6to4 httpstunnel ipv4 ipv6 isatap portproxy tcp teredo udp
若需要命令的更多帮助信息,请键入命令,接着是空格,
后面跟 ?。
同理,直接执行【netsh interface ipv4】会显示netsh interface ipv4上下文的子命令或参数。
C:\WINDOWS\system32>netsh interface ipv4
下列指令有效:
此上下文中的命令:
? - 显示命令列表。
add - 在一个表格中添加一个配置项。
delete - 从一个表格中删除一个配置项。
dump - 显示一个配置脚本。
help - 显示命令列表。
install - 安装 IP 协议。
reset - 重置 IP 配置。
set - 设置配置信息。
show - 显示信息。
uninstall - 卸载 IP 协议。
若需要命令的更多帮助信息,请键入命令,接着是空格,
后面跟 ?。
(2)在上下文中打印帮助信息,会包括继承部分
另外一点,我们也可以发现,当我们进入netsh的子命令的上下文后,再执行【?】,就会把自父命令(netsh)继承下来的命令也给打印出来。
netsh interface>?
下列指令有效:
命令从 netsh 上下文继承:
.. - 移到上一层上下文级。
abort - 丢弃在脱机模式下所做的更改。
add - 在项目列表上添加一个配置项目。
advfirewall - 更改到 `netsh advfirewall' 上下文。
alias - 添加一个别名
branchcache - 更改到 `netsh branchcache' 上下文。
bridge - 更改到 `netsh bridge' 上下文。
bye - 退出程序。
commit - 提交在脱机模式中所做的更改。
delete - 在项目列表上删除一个配置项目。
dhcpclient - 更改到 `netsh dhcpclient' 上下文。
dnsclient - 更改到 `netsh dnsclient' 上下文。
exit - 退出程序。
firewall - 更改到 `netsh firewall' 上下文。
http - 更改到 `netsh http' 上下文。
interface - 更改到 `netsh interface' 上下文。
ipsec - 更改到 `netsh ipsec' 上下文。
lan - 更改到 `netsh lan' 上下文。
mbn - 更改到 `netsh mbn' 上下文。
namespace - 更改到 `netsh namespace' 上下文。
netio - 更改到 `netsh netio' 上下文。
offline - 将当前模式设置成脱机。
online - 将当前模式设置成联机。
p2p - 更改到 `netsh p2p' 上下文。
popd - 从堆栈上打开一个上下文。
pushd - 将当前上下文放入堆栈。
quit - 退出程序。
ras - 更改到 `netsh ras' 上下文。
rpc - 更改到 `netsh rpc' 上下文。
set - 更新配置设置。
show - 显示信息。
trace - 更改到 `netsh trace' 上下文。
unalias - 删除一个别名。
wcn - 更改到 `netsh wcn' 上下文。
wfp - 更改到 `netsh wfp' 上下文。
winhttp - 更改到 `netsh winhttp' 上下文。
winsock - 更改到 `netsh winsock' 上下文。
wlan - 更改到 `netsh wlan' 上下文。
此上下文中的命令:
6to4 - 更改到 `netsh interface 6to4' 上下文。
? - 显示命令列表。
dump - 显示一个配置脚本。
help - 显示命令列表。
httpstunnel - 更改到 `netsh interface httpstunnel' 上下文。
ipv4 - 更改到 `netsh interface ipv4' 上下文。
ipv6 - 更改到 `netsh interface ipv6' 上下文。
isatap - 更改到 `netsh interface isatap' 上下文。
portproxy - 更改到 `netsh interface portproxy' 上下文。
set - 设置配置信息。
show - 显示信息。
tcp - 更改到 `netsh interface tcp' 上下文。
teredo - 更改到 `netsh interface teredo' 上下文。
udp - 更改到 `netsh interface udp' 上下文。
下列的子上下文可用:
6to4 httpstunnel ipv4 ipv6 isatap portproxy tcp teredo udp
若需要命令的更多帮助信息,请键入命令,接着是空格,
后面跟 ?。
而我们在执行【ip】进入netsh interface ipv4上下文后,用命令【?】得到的帮助信息中,不仅对最顶层的netsh命令进行了继承,也对二层的netsh interface命令进行了继承。
netsh interface ipv4>?
下列指令有效:
命令从 netsh 上下文继承:
.. - 移到上一层上下文级。
abort - 丢弃在脱机模式下所做的更改。
add - 在项目列表上添加一个配置项目。
advfirewall - 更改到 `netsh advfirewall' 上下文。
alias - 添加一个别名
branchcache - 更改到 `netsh branchcache' 上下文。
bridge - 更改到 `netsh bridge' 上下文。
bye - 退出程序。
commit - 提交在脱机模式中所做的更改。
delete - 在项目列表上删除一个配置项目。
dhcpclient - 更改到 `netsh dhcpclient' 上下文。
dnsclient - 更改到 `netsh dnsclient' 上下文。
exit - 退出程序。
firewall - 更改到 `netsh firewall' 上下文。
http - 更改到 `netsh http' 上下文。
interface - 更改到 `netsh interface' 上下文。
ipsec - 更改到 `netsh ipsec' 上下文。
lan - 更改到 `netsh lan' 上下文。
mbn - 更改到 `netsh mbn' 上下文。
namespace - 更改到 `netsh namespace' 上下文。
netio - 更改到 `netsh netio' 上下文。
offline - 将当前模式设置成脱机。
online - 将当前模式设置成联机。
p2p - 更改到 `netsh p2p' 上下文。
popd - 从堆栈上打开一个上下文。
pushd - 将当前上下文放入堆栈。
quit - 退出程序。
ras - 更改到 `netsh ras' 上下文。
rpc - 更改到 `netsh rpc' 上下文。
set - 更新配置设置。
show - 显示信息。
trace - 更改到 `netsh trace' 上下文。
unalias - 删除一个别名。
wcn - 更改到 `netsh wcn' 上下文。
wfp - 更改到 `netsh wfp' 上下文。
winhttp - 更改到 `netsh winhttp' 上下文。
winsock - 更改到 `netsh winsock' 上下文。
wlan - 更改到 `netsh wlan' 上下文。
命令从 netsh interface 上下文继承:
6to4 - 更改到 `netsh interface 6to4' 上下文。
httpstunnel - 更改到 `netsh interface httpstunnel' 上下文。
ipv4 - 更改到 `netsh interface ipv4' 上下文。
ipv6 - 更改到 `netsh interface ipv6' 上下文。
isatap - 更改到 `netsh interface isatap' 上下文。
portproxy - 更改到 `netsh interface portproxy' 上下文。
set - 设置配置信息。
show - 显示信息。
tcp - 更改到 `netsh interface tcp' 上下文。
teredo - 更改到 `netsh interface teredo' 上下文。
udp - 更改到 `netsh interface udp' 上下文。
此上下文中的命令:
? - 显示命令列表。
add - 在一个表格中添加一个配置项。
delete - 从一个表格中删除一个配置项。
dump - 显示一个配置脚本。
help - 显示命令列表。
install - 安装 IP 协议。
reset - 重置 IP 配置。
set - 设置配置信息。
show - 显示信息。
uninstall - 卸载 IP 协议。
若需要命令的更多帮助信息,请键入命令,接着是空格,
后面跟 ?。
(1)不进入上下文环境,直接执行
对于并非上下文环境的命令,比如【netsh interface】就是上下文命令,而【netsh dump】不是上下文命令,可以不用在上下文环境中执行。
再比如【netsh interface ipv4】是上下文命令,而【netsh interface ipv4 dump】不是,就可以直接执行。
(2)进入上下文环境,再执行
还是以上面的【netsh dump】为例,要实现相同的效果,除了直接执行外,还可以先通过【netsh】进入netsh上下文再执行【dump】。
执行命令【netsh dump /?】,即可显示帮助信息。
C:\WINDOWS\system32>netsh dump /?
用法: dump
说明:
创建一个包含当前配置的脚本文件。如果保存到
文件,此脚本可以用来还原更改的配置设置。
既然可以显示所有配置信息,那么将配置信息重定向至文本文件,也就实现了将所有网络配置信息导出至本地。
执行命令【netsh dump】,显示所有配置信息
执行命令【netsh dump>D:\D-desktop\net_config.txt】,即可将上面这么多行的配置信息全导入至txt文件中。
C:\WINDOWS\system32>netsh int /?
下列指令有效:
此上下文中的命令:
6to4 - 更改到 `netsh interface 6to4' 上下文。
? - 显示命令列表。
dump - 显示一个配置脚本。
help - 显示命令列表。
httpstunnel - 更改到 `netsh interface httpstunnel' 上下文。
ipv4 - 更改到 `netsh interface ipv4' 上下文。
ipv6 - 更改到 `netsh interface ipv6' 上下文。
isatap - 更改到 `netsh interface isatap' 上下文。
portproxy - 更改到 `netsh interface portproxy' 上下文。
set - 设置配置信息。
show - 显示信息。
tcp - 更改到 `netsh interface tcp' 上下文。
teredo - 更改到 `netsh interface teredo' 上下文。
udp - 更改到 `netsh interface udp' 上下文。
下列的子上下文可用:
6to4 httpstunnel ipv4 ipv6 isatap portproxy tcp teredo udp
若需要命令的更多帮助信息,请键入命令,接着是空格,
后面跟 ?。
因为nterface命令是需要在上下文环境中执行的;必须先执行【netsh】进入上下文。
而后再执行【interface】,即可进入netsh interface的上下文,而再进一步执行【ip】或【ipv4】才可进入netsh interface ipv4上下文。
当然也可在进入netsh上下文后,直接用【int ip】、【int ipv4】、【interface ip】、【interface ipv4】这4个命令之一进入netsh interface ipv4上下文。
进入到ipv4上下文,有什么意义?
这时候,执行命令【dump】,只会显示与ipv4相关的配置信息(截取全部的一部分)。
netsh interface ipv4>dump
#========================
# IPv4 配置
#========================
pushd interface ipv4
reset
set global taskoffload=enabled
set interface interface="以太网(内核调试器)" forwarding=enabled advertise=enabled nud=enabled ignoredefaultroutes=disabled
set interface interface="本地连接* 1" forwarding=enabled advertise=enabled nud=enabled ignoredefaultroutes=disabled
set interface interface="本地连接* 2" forwarding=enabled advertise=enabled nud=enabled ignoredefaultroutes=disabled
set interface interface="本地连接* 11" forwarding=enabled advertise=enabled nud=enabled ignoredefaultroutes=disabled
set interface interface="本地连接* 14" forwarding=enabled advertise=enabled nud=enabled ignoredefaultroutes=disabled
popd
# IPv4 配置结束
由于现在大部分的网络都已经升级成了IPv6,所以很可能你不会在ipv4接口环境中找到你想要的网络配置信息。
比如我的这台机器上网实际上用的是wlan 2,但是在ipv4接口环境下却输出不出来。
当我进入ipv6环境后,再输出所有配置信息,里面就包括了wlan 2。
而非常诡异的是,虽然是ipv6,但是也可以在ipv4的接口环境中设置IP地址(详见下面的5.3)。
在进入了netsh上下文后,如果在ipv4接口环境中,执行命令【set addr /?】,显示帮助
netsh interface ipv4>set addr /?
用法: set address [name=]<字符串>
[[source=]dhcp|static]
[[address=][/<整数>] [[mask=]]
[[gateway=]|none [gwmetric=]<整数>]
[[type=]unicast|anycast]
[[subinterface=]<字符串>]
[[store=]active|persistent]
参数:
标记 值
name - 接口名称或索引。
source - 下列值之一:
dhcp: 启用 DHCP,以便为指定的接口
配置 IP 地址。
static: 禁用 DHCP,以便为指定的接口
配置 IP 地址。如果配置了
地址或网关,则必须指定
该值。
address - 要添加或修改的 IPv4 地址,
后边也可以加上子网前缀长度。
mask - 指定的 IP 地址的 IP 子网掩码。
gateway - 下列值之一:
: 正在设置的静态 IP 地址的
特定默认网关。
none: 未设置任何默认网关。此为默认值。
gwmetric - 默认网关的跃点数。仅在指定了网关时
才应设置该字段。
type - 下列值之一:
unicast: 将地址标记为单播地址。
此为默认值。
anycast: 将地址标记为任意广播地址。
subinterface - 默认网关存在于其上的子接口的 LUID。
此参数仅用于带有
多个子接口的接口。
store - 下列值之一:
active: 设置仅持续到下一次启动。
persistent: 设置永久有效。此为默认值。
备注: 用来启用或禁用 IP 地址配置的 DHCP。
同时删除所有以前的静态 IP 地址和默认网关,
并可以添加新的静态 IP 地址和默认网关。
示例:
set address name="Wired Ethernet Connection" source=dhcp
set address "Wired Ethernet Connection" static 10.0.0.9 255.0.0.0 10.0.0.1 1
在进入了netsh上下文后,如果在ipv6接口环境中,执行命令【set addr /?】,显示帮助
netsh interface ipv6>set addr /?
用法: set address [interface=] [address=]
[[type=]unicast|anycast]
[[validlifetime=]|infinite]
[[preferredlifetime=]|infinite]
[[store=]active|persistent]
参数:
标记 值
interface - 接口名称或索引。
address - 要修改的 IPv6 地址。
type - 下列其中一个值:
unicast: 将地址标记为 unicast 地址。
此为默认值。
anycast: 将地址标记为 anycast 地址。
validlifetime - 有效地址的生存时间。
默认值是无限。
preferredlifetime - 首选地址生存时间。
默认值是无限。
store - 下列其中一个值:
active: 设置仅持续到下一次启动。
persistent: 设置永久有效(默认值)。
说明: 修改给定接口上的 IPv6 地址。时间值可以为天、小时、分钟和秒,
例如 1d2h3m4s。
示例:
set address "Private" fe80::2 anycast
从5.1打印出来的帮助信息也可知道,如果是设置ipv4的地址。
在进入netsh interface ipv4上下文后,执行下面的命令可以设置静态地址。
set address name=xx source=static addr=xx mask=xx
在进入netsh interface ipv4上下文后,执行下面的命令可以设置动态地址。
set address name=xx source=dhcp
而如果是设置ipv6的地址,本文暂时不涉及,抱歉了!
首先,我们可以看到WLAN 2的IP地址是自动获取的。
为了将其调整成静态获取地址,并且手动为其制定IP地址和子网掩码,我们可以执行命令【set address name="WLAN 2" source=static addr=192.168.2.133 mask=255.255.255.0】
效果如下,修改后能不能正常上网我不知道,反正我是知道修改成功了。
由于网络和共享中心里,修改成静态地址后,显示无法连接到网络,所以我想改回动态地址。
在ipv4接口环境下,执行命令【set address name="WLAN 2" source=dhcp】
碎碎念的自动获取地址,又回来啦!
查看一下winsock命令的帮助信息,执行命令【netsh winsock /?】,可得
C:\Users\Administrator>netsh winsock /?
下列指令有效:
此上下文中的命令:
? - 显示命令列表。
audit - 显示已经安装和删除的 Winsock LSP 列表。
dump - 显示一个配置脚本。
help - 显示命令列表。
remove - 从系统中删除 Winsock LSP。
reset - 重置 Winsock 目录为清除状态。
set - 设置 Winsock 选项。
show - 显示信息。
若需要命令的更多帮助信息,请键入命令,接着是空格,
后面跟 ?。
如果计算机Winsock协议配置有问题的话将会导致网络连接等问题,通过重置Winsock目录、初始化网络环境借以恢复网络,可解决由于“软件冲突”、“病毒原因”造成的参数错误问题,可以用命令【netsh winsock reset】。
如果我们要重置TCP/IP协议,卸载并重新安装TCP/IP协议,使其恢复到初次安装操作系统时的状态,并且将重置过程日志信息输出到本地,可以用命令【netsh int ip reset>c:\ip_reset_log.txt】。
我们先不着急讲如何通过命令行管理防火墙,因为大多数人恐怕更喜欢用图形界面窗口去进行配置!
在运行窗口或CMD窗口中执行【firewall.cpl】,即可打开「Windows Defender 防火墙」窗口。
而后在高级设置里,窗口名为「高级安全Vindows Defender防火墙」,我们可以添加各种规则来细化地设置防火墙。
执行【netsh firewall /?】,即可大致获得旧防火墙命令的子命令。
C:\WINDOWS\system32>netsh firewall /?
下列指令有效:
此上下文中的命令:
? - 显示命令列表。
add - 添加防火墙配置。
delete - 删除防火墙配置。
dump - 显示一个配置脚本。
help - 显示命令列表。
set - 设置防火墙配置。
show - 显示防火墙配置。
若需要命令的更多帮助信息,请键入命令,接着是空格,
后面跟 ?。
而后我们再看看子命令怎么用?
以set子命令为例!我们执行【netsh firewall set /?】,发现没有帮助信息,从这个方面我们也可看出微软公司已经停止了对该命令的维护。
但是,惊奇的是,我们执行【netsh firewall set portopening /?】 却能打印出set命令的子命令portopenning的帮助信息。
C:\WINDOWS\system32>netsh firewall set portopening /?
set portopening
[ protocol = ] TCP|UDP|ALL
[ port = ] 1-65535
[ [ name = ] name
[ mode = ] ENABLE|DISABLE
[ scope = ] ALL|SUBNET|CUSTOM
[ addresses = ] addresses
[ profile = ] CURRENT|DOMAIN|STANDARD|ALL
设置防火墙端口配置。
参数:
protocol - 端口协议。
TCP - 传输控制协议(TCP)。
UDP - 用户数据报协议(UDP)。
ALL - 所有协议。
port - 端口号。
name - 端口名(可选)。
mode - 端口模式(可选)。
ENABLE - 允许通过防火墙(默认值)。
DISABLE - 不允许通过防火墙。
scope - 端口范围(可选)。
ALL - 允许所有流量通过防火墙(默认值)。
SUBNET - 只允许本地网络(子网)流量通过防火墙。
CUSTOM - 只允许指定的流量通过防火墙。
addresses - 自定义范围地址(可选)。
这个范围可以包含 IPv4 地址、
IPv6 地址、子网、范围或关键字 LocalSubnet,用逗号分隔。
profile - 配置文件(可选)。
CURRENT - 适用于活动配置文件。活动配置文件可以是域、
标准(即专用),或公用(默认)。
DOMAIN - 适用于域配置文件。
STANDARD - 适用于标准(即专用)配置文件。
ALL - 适用于域和标准(即专用)配置文件。
不适用于公用配置文件。
注释: "scope" 必须是 "CUSTOM" 才能指定 "addresses"。
"addresses" 不能包含未指定的或环回地址。
示例:
set portopening TCP 80 "My Web Port"
set portopening UDP 500 IKE ENABLE ALL
set portopening ALL 53 DNS ENABLE CUSTOM
157.60.0.1,172.16.0.0/16,10.0.0.0/255.0.0.0,
12AB:0000:0000:CD30::/60,LocalSubnet
set portopening protocol=ALL port=53 name=DNS mode=ENABLE scope=CUSTOM
addresses=157.60.0.1,172.16.0.0/16,10.0.0.0/255.0.0.0,
12AB:0000:0000:CD30::/60,LocalSubnet
重要信息: "netsh firewall" 已弃用;
请改用 "netsh advfirewall firewall"。
有关使用 "netsh advfirewall firewall" 命令
而非 "netsh firewall" 的详细信息,请参阅
https://go.microsoft.com/fwlink/?linkid=121488 上的 KB 文章 947709。
我们从帮助信息的最后几行可以看到「重要信息」,也即netsh firewall已经被弃用;但是其中有些命令在win10的系统中还是能用的。
因此我们还是稍微讲讲,(让大家念念旧),哈哈哈。
执行命令【netsh firewall set portopening TCP 445 ENABLE】,结果如下
而后,我们可以在本文的7.1小节中提到的「高级安全Vindows Defender防火墙」窗口中,找到上面设置的这个端口规则。
最后,我们把这个端口过滤规则关掉,毕竟俺就是想测试一下打不打得开总归要关得万一遇到坏人呢。
执行命令【netsh firewall set portopening TCP 445 DISABLE】,果然就找不到那个netlogon服务了。
执行命令【netsh firewall set opmode /?】,获得相关帮助信息
C:\WINDOWS\system32>netsh firewall set opmode /?
set opmode
[ mode = ] ENABLE|DISABLE
[ [ exceptions = ] ENABLE|DISABLE
[ profile = ] CURRENT|DOMAIN|STANDARD|ALL
设置防火墙操作配置。
参数:
mode - 操作模式。
ENABLE - 启用防火墙。
DISABLE - 禁用防火墙。
exceptions - 例外模式(可选)。
ENABLE - 允许通过防火墙(默认值)。
DISABLE - 不允许通过防火墙。
profile - 配置文件(可选)。
CURRENT - 适用于活动配置文件。活动配置文件可以是域、
标准(即专用),或公用(默认)。
DOMAIN - 适用于域配置文件。
STANDARD - 适用于标准(即专用)配置文件。
ALL - 适用于域和标准(即专用)配置文件。
不适用于公用配置文件。
示例:
set opmode ENABLE
set opmode mode=ENABLE exceptions=DISABLE
重要信息:"netsh firewall" 已弃用;
请改用 "netsh advfirewall firewall"。
有关使用 "netsh advfirewall firewall" 命令
而非 "netsh firewall" 的详细信息,请参阅
https://go.microsoft.com/fwlink/?linkid=121488 上的 KB 文章 947709。
在执行下面的命令前,我们看一下当前防火墙的状态
再执行【netsh firewall set opmode mode=enable】,即打开和启用防火墙
最后执行命令【netsh firewall set opmode mode=disable】,即关闭防火墙
执行完后,弹出下面的警示框,也侧面说明成功关闭。
执行命令【netsh advfirewall firewall】,得到最外层命令的子命令列表
C:\WINDOWS\system32>netsh advfirewall firewall
下列指令有效:
此上下文中的命令:
? - 显示命令列表。
add - 添加新入站或出站防火墙规则。
delete - 删除所有匹配的防火墙规则。
dump - 显示一个配置脚本。
help - 显示命令列表。
set - 为现有规则的属性设置新值。
show - 显示指定的防火墙规则。
若需要命令的更多帮助信息,请键入命令,接着是空格,
后面跟 ?。
接着以子命令set为例,执行【netsh advfirewall firewall set ?】,得到如下帮助信息
C:\WINDOWS\system32>netsh advfirewall firewall set ?
下列指令有效:
此上下文中的命令:
set rule - 为现有规则的属性设置新值。
而后,再执行【netsh advfirewall firewall set rule ?】,得到如下帮助信息 。其中的group字段和name字段表示对规则进行命名,;而dir字段表示规则是入站规则还是出站规则;profile字段表示配置文件,应用于公有网络还是专有网络,还是特定IP。
C:\WINDOWS\system32>netsh advfirewall firewall set rule ?
用法: set rule
group= | name=
[dir=in|out]
[profile=public|private|domain|any[,...]]
[program=]
[service=service short name|any]
[localip=any|||||]
[remoteip=any|localsubnet|dns|dhcp|wins|defaultgateway|
||||]
[localport=0-65535|[,...]|RPC|RPC-EPMap|IPHTTPS|any]
[remoteport=0-65535|[,...]|any]
[protocol=0-255|icmpv4|icmpv6|icmpv4:type,code|icmpv6:type,code|
tcp|udp|any]
new
[name=]
[dir=in|out]
[program=
[service=|any]
[action=allow|block|bypass]
[description=]
[enable=yes|no]
[profile=public|private|domain|any[,...]]
[localip=any|||||]
[remoteip=any|localsubnet|dns|dhcp|wins|defaultgateway|
||||]
[localport=0-65535|RPC|RPC-EPMap|any[,...]]
[remoteport=0-65535|any[,...]]
[protocol=0-255|icmpv4|icmpv6|icmpv4:type,code|icmpv6:type,code|
tcp|udp|any]
[interfacetype=wireless|lan|ras|any]
[rmtcomputergrp=]
[rmtusrgrp=]
[edge=yes|deferapp|deferuser|no (default=no)]
[security=authenticate|authenc|authdynenc|notrequired]
备注:
- 为已识别的规则设置新的参数值。如果规则不存在,
则该命令失败。若要创建规则,请使用添加命令。
- 会更新规则中 new 关键字后的值。如果
没有值,或缺少关键字 new,则没有任何更改。
- 一组规则只能被启用或禁用。
- 如果多个规则与条件匹配,则会
更新所有匹配规则。
- 规则名称应该是唯一的,并且不能是 "all"。
- 如果指定远程计算机或用户组,security 必须
为 authenticate、authenc 或 authdynenc。
- 为 authdynenc 设置安全性可允许系统动态协商为匹配
给定 Windows Defender 防火墙规则的通信使用加密。
根据现有连接安全规则属性协商加密。
选择此选项后,只要入站 IPsec 连接已设置安全保护,
但未使用 IPsec 进行加密,计算机就能够接收该入站连接的第一个 TCP
或 UDP 包。
一旦处理了第一个数据包,服务器将重新协商连接并对其进行升级,以便
所有后续通信都完全加密。
- Authdynenc 仅当 dir=in 时有效。
- 如果 action=bypass,则当 dir=in 时必须指定远程计算机组。
- 如果 service=any,则规则只适用于服务。
- ICMP 类型或代码可以是 "any"。
- 只能为入站规则指定边缘。
示例:
根据名称为 "allow80" 的规则更改远程 IP 地址:
netsh advfirewall firewall set rule name="allow80" new
remoteip=192.168.0.2
启用带有分组字符串 "Remote Desktop" 的组:
netsh advfirewall firewall set rule group="remote desktop" new
enable=yes
为 udp- 更改规则 "Allow port range" 上的本地端口
Set rule name="Allow port range" dir=out protocol=udp localport=5000-5020 action=allow
如果我们要开启端口3389,协议限定为TCP,规则为入站规则。
执行命令【netsh advfirewall firewall add rule name=sansanbajiu dir=in
action=allow protocol=TCP localport=3389】
成功后,我们在「高级安全Vindows Defender防火墙」中也可以看出来这个名为sansanbajiu的入站规则被开启了。
删除规则就没有构建规则那么复杂,因为同名规则只有一个,因此删除规则直接指定名称即可。
执行命令【netsh advfirewall firewall delete rule name=sansanbajiu】
如果您想更精确一些,删除的时候无需指定action字段,其他的端口字段、协议字段都可以添加,以进一步精确地指定欲删除的规则。
执行命令【netsh advfirewall firewall delete rule name=sansanbajiu protocol=TCP localport=3389】
C:\WINDOWS\system32>netsh wlan /?
下列指令有效:
此上下文中的命令:
? - 显示命令列表。
add - 在一个表格中添加一个配置项。
connect - 连接到无线网络。
delete - 从一个表格中删除一个配置项。
disconnect - 从无线网络断开连接。
dump - 显示一个配置脚本。
export - 将 WLAN 配置文件保存为 XML 文件。
help - 显示命令列表。
IHV - 用于 IHV 记录的命令。
refresh - 刷新承载网络设置。
reportissues - 生成 WLAN 智能跟踪报告。
set - 设置配置信息。
show - 显示信息。
start - 启动承载网络。
stop - 停止承载网络。
若需要命令的更多帮助信息,请键入命令,接着是空格,
后面跟 ?。
以show子命令为例,查询show子命令怎么用。执行命令【netsh wlan show /?】
C:\WINDOWS\system32>netsh wlan show /?
下列指令有效:
此上下文中的命令:
show all - 显示完整的无线设备和网络信息。
show allowexplicitcreds - 显示允许共享用户凭据设置。
show autoconfig - 显示是否启用或禁用自动配置逻辑。
show blockednetworks - 显示阻止的网络显示设置。
show createalluserprofile - 显示是否允许所有人创建所有
用户配置文件。
show drivers - 显示系统上无线 LAN 驱动程序的属性。
show filters - 显示允许和阻止的网络列表。
show hostednetwork - 显示承载网络的属性和状态。
show interfaces - 显示系统上的无线局域网接口
的列表。
show networks - 显示计算机上可见的网络列表。
show onlyUseGPProfilesforAllowedNetworks - 显示在配置 GP 的网络设置上仅使用 GP 配置文件。
show profiles - 显示计算机上配置的配置文件列表。
show randomization - 显示 MAC 随机化是已启用还是
已禁用。
show settings - 显示无线 LAN 的全局设置。
show tracing - 显示是否启用或禁用无线局域网跟踪。
show wirelesscapabilities - 显示系统的无线功能
show wlanreport - 生成一个报告,显示最新的无线会话信息。
再以Profiles为例,进一步想知道show profiles的用法,执行命令【netsh wlan show profiles /?】
C:\WINDOWS\system32>netsh wlan show profiles /?
用法: show profiles [[name=]] [interface=] [key=]
参数:
标记 值
name - 所要显示配置文件的名称。
interface - 已配置此配置文件的接口的名称。
key - 以纯文件显示密钥,设置密钥=clear。
注释:
显示配置文件数据或列出系统上的配置文件。
参数 name 和 interface 都是可选的。
如果已给定配置文件名称,则将会显示配置文件的内容。否则,将仅列出配置文件
名称和描述。
如果已给定接口名称,则将仅列出给定接口上的指定配置文件。否则,将列出
系统中给定名称的所有配置文件。
如果将密钥设置为 "clear",且呼叫方为本地管理员,
则该密钥将以纯文本显示。
组策略配置文件为只读,而用户配置文件是
可读写的,而且,首选顺序也可以更改。
示例:
show profiles name="profile 1" interface="Wireless Network Connection"
show profiles name="profile 2"
show profiles name="profile 3" key=clear
show profiles
这时候显然就是走到头了,已经不能再深挖了。
(1)查看所有接口上已经保存的WIFI网络
执行命令【netsh wlan show profiles】,查看当前系统已经保存的网络
C:\WINDOWS\system32>netsh wlan show profile
接口 WLAN 上的配置文件:
组策略配置文件(只读)
---------------------------------
<无>
用户配置文件
-------------
所有用户配置文件 : 醉生梦死
所有用户配置文件 : @PHICOMM_06_5G
所有用户配置文件 : @PHICOMM_32
接口 WLAN 2 上的配置文件:
组策略配置文件(只读)
---------------------------------
<无>
用户配置文件
-------------
所有用户配置文件 : @PHICOMM_32
所有用户配置文件 : @PHICOMM_06_5G
所有用户配置文件 : 醉生梦死
(2)查看指定接口上的已保存的WIFI网络
执行命令【netsh wlan show profile interface="WLAN 2"】
假如我们要显示WLAN接口下保存的「@PHICOMM_32」的密码,可以执行命令【netsh wlan show profile name="@PHICOMM_32" key=clear】
C:\WINDOWS\system32>netsh wlan show profile name="@PHICOMM_32" key=clear
接口 WLAN 上的配置文件 @PHICOMM_32:
=======================================================================
已应用: 所有用户配置文件
配置文件信息
-------------------
版本 : 1
类型 : 无线局域网
名称 : @PHICOMM_32
控制选项 :
连接模式 : 自动连接
网络广播 : 只在网络广播时连接
AutoSwitch : 请勿切换到其他网络
MAC 随机化: 禁用
连接设置
---------------------
SSID 数目 : 1
SSID 名称 :“@PHICOMM_32”
网络类型 : 结构
无线电类型 : [ 任何无线电类型 ]
供应商扩展名 : 不存在
安全设置
-----------------
身份验证 : WPA2 - 个人
密码 : CCMP
身份验证 : WPA2 - 个人
密码 : GCMP
安全密钥 : 存在
关键内容 : as69865069847
费用设置
-------------
费用 : 无限制
阻塞 : 否
接近数据限制 : 否
过量数据限制 : 否
漫游 : 否
费用来源 : 默认
接口 WLAN 2 上的配置文件 @PHICOMM_32:
=======================================================================
已应用: 所有用户配置文件
配置文件信息
-------------------
版本 : 1
类型 : 无线局域网
名称 : @PHICOMM_32
控制选项 :
连接模式 : 自动连接
网络广播 : 只在网络广播时连接
AutoSwitch : 请勿切换到其他网络
MAC 随机化: 禁用
连接设置
---------------------
SSID 数目 : 1
SSID 名称 :“@PHICOMM_32”
网络类型 : 结构
无线电类型 : [ 任何无线电类型 ]
供应商扩展名 : 不存在
安全设置
-----------------
身份验证 : WPA2 - 个人
密码 : CCMP
身份验证 : WPA2 - 个人
密码 : GCMP
安全密钥 : 存在
费用设置
-------------
费用 : 无限制
阻塞 : 否
接近数据限制 : 否
过量数据限制 : 否
漫游 : 否
费用来源 : 默认
十、Netsh命令操作防火墙