windows bat脚本,使用命令行增加/删除防火墙:入站-出站,规则

常常手动设置防火墙的入站或出站规则,比较麻烦,其实可以用命令行搞定。
下面是禁用BCompare.exe连接网络的例子:

@ECHO OFF&(PUSHD "%~DP0")&(REG QUERY "HKU\S-1-5-19">NUL 2>&1)||(powershell -Command "Start-Process '%~dpnx0' -Verb RunAs"&&EXIT)


rem %~sdpnx0 use short names
rem @ECHO OFF&(PUSHD "%~DP0")&(REG QUERY "HKU\S-1-5-19">NUL 2>&1)||(powershell -Command "Start-Process '%~sdpnx0' -Verb RunAs"&&EXIT)
rem %~dpnx0 use long names
rem @ECHO OFF&(PUSHD "%~DP0")&(REG QUERY "HKU\S-1-5-19">NUL 2>&1)||(powershell -Command "Start-Process '%~dpnx0' -Verb RunAs"&&EXIT)

rem 获取当前脚本文件的完整路径,并切换到BCompare.exe程序所在的目录
set current_path=%~dp0
rem echo current_path=%current_path%

rem 设置变量“xpath”的值为BCompare.exe程序的绝对路径
set xpath="%current_path%BCompare.exe"
rem echo xpath="%current_path%BCompare.exe"

rem 删除之前可能存在的防火墙规则,并忽略错误信息
echo "删除-BCompare禁止联网-出站"
@netsh advfirewall firewall delete rule name="BCompare禁止联网-出站"
echo "删除-BCompare禁止联网-入站"
@netsh advfirewall firewall delete rule name="BCompare禁止联网-入站"

rem 添加新的防火墙规则,禁止BCompare.exe程序的出站和入站网络流量
echo "添加,BCompare禁止联网-出站 规则"
netsh advfirewall firewall add rule name="BCompare禁止联网-出站" dir=out action=block profile=any program=%xpath% enable=yes
echo "添加,BCompare禁止联网-入站 规则"
netsh advfirewall firewall add rule name="BCompare禁止联网-入站" dir=in  action=block profile=any program=%xpath% enable=yes
pause

命令add rule 解析

创建的规则类型
netsh advfirewall firewall add rule 接如下参数:

  • dir=in: 还可选out,in是入站(inbound)的。只适用于从外部网络向本地计算机发送的数据流量,也就是别人访问你的计算机的情况;out 只适用于出站(outbound)的网络流量,也就是从本地计算机向外部网络发送的数据。
  • program="C:\xxx.exe"
  • protocol=tcp: 还可选0-255|icmpv4|icmpv6|icmpv4:type,code|icmpv6:type,code|tcp|udp|any (default=any)
  • localip=any:还可选||||
  • localport=0-65535:其他还有[,...]|RPC|RPC-EPMap|IPHTTPS|any (default=any)
  • action=allow:还可选block|bypass。规则允许(allow)这种网络流量通过防火墙,或阻止(block)或绕过(bypass)它。
  • profile=any:还可选public|private|domain|any[,...],所有(any)的防火墙配置文件,包括域(domain)、私有(private)和公共(public)。
  • enable=yes:还可选no,(default=yes)表示这个规则yes启用(enable)的,而不是no禁用的。平时可以不写这一项。

例子:

添加,BCompare禁止联网-出站 规则
netsh advfirewall firewall add rule name="BCompare禁止联网-出站" dir=out action=block profile=any program=%xpath% enable=yes
添加,BCompare禁止联网-入站 规则
netsh advfirewall firewall add rule name="BCompare禁止联网-入站" dir=in  action=block profile=any program=%xpath% enable=yes

入站规则
netsh advfirewall firewall add rule name="My Application" dir=in action=allow program="C:\MyApp\MyApp.exe" enable=yes
出站规则
netsh advfirewall firewall add rule name="Remote PortNumber" dir=out action=allow protocol=TCP localport=1234

使用管理员方式运行bat

rem %~sdpnx0 use short names
@ECHO OFF&(PUSHD "%~DP0")&(REG QUERY "HKU\S-1-5-19">NUL 2>&1)||(powershell -Command "Start-Process '%~sdpnx0' -Verb RunAs"&&EXIT)

rem %~dpnx0 use long names
@ECHO OFF&(PUSHD "%~DP0")&(REG QUERY "HKU\S-1-5-19">NUL 2>&1)||(powershell -Command "Start-Process '%~dpnx0' -Verb RunAs"&&EXIT)

命令是用来检测当前用户是否具有管理员权限,如果没有,就以管理员身份重新运行该脚本。具体的解释如下:

  • @ECHO OFF表示关闭回显功能,不显示命令本身。
  • (PUSHD "%~DP0")表示将当前目录切换到批处理文件所在的目录,%~DP0是一个参数扩展,表示批处理文件的驱动器和路径。
  • (REG QUERY "HKU\S-1-5-19">NUL 2>&1)表示查询注册表中的一个键值,这个键值是系统默认的管理员账户的SID。如果查询成功,说明当前用户具有管理员权限。>NUL 2>&1表示将标准输出和错误输出都重定向到空设备,即不显示任何信息。
  • ||(powershell -Command "Start-Process '%~sdpnx0' -Verb RunAs"&&EXIT)表示如果前面的命令失败,即当前用户不具有管理员权限,就执行后面的命令。后面的命令是用powershell来启动一个新的进程,这个进程就是当前的批处理文件,但是用短文件名代替长文件名,%~sdpnx0是一个参数扩展,表示批处理文件的完整路径,但用短文件名格式。-Verb RunAs表示以管理员身份运行这个进程。&&EXIT表示如果成功启动了新的进程,就退出当前的进程。

想要修改这个脚本命令为长路径的几种办法,有几种可能的方法:

  • 可以不使用短文件名格式,而直接使用长文件名格式。这样就可以把%~sdpnx0改为%~dpnx0
  • 可以不使用powershell来启动新的进程,而使用runas命令。这样就可以把(powershell -Command "Start-Process '%~sdpnx0' -Verb RunAs")改为(runas /user:administrator "%~sdpnx0")。但是这种方法需要输入管理员账户的密码。
  • 可以不使用reg query来检测管理员权限,而使用net session或者whoami命令。这样就可以把(REG QUERY "HKU\S-1-5-19">NUL 2>&1)改为(NET SESSION>NUL 2>&1)或者(WHOAMI /GROUPS | FINDSTR /C:\"S-1-5-32-544\">NUL 2>&1)

(1) 批处理实战篇—修改文件变量、参数_bat 修改变量的值_BetaGarf的博客-CSDN博客. https://blog.csdn.net/Joker_N/article/details/90375203.
(2) .bat批处理命令常用操作大全 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/446337414.
(3) BAT批处理基本命令总结 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/54572985.

你可能感兴趣的:(windows,防火墙,入站出站,bat)