zoukankan      html  css  js  c++  java
  • 用 程序 解决 windows防火墙 的 弹窗 问题

           今天用户反馈了一个问题,运行程序弹了个框

            

          这个只有程序第一次运行会出来,之后就不会了。

          当然改个程序名字,又会弹出来。

          强烈怀疑是写到了注册表,果然被我找到了。

         “HKEY_LOCAL_MACHINESYSTEMControlSet002servicesSharedAccessParametersFirewallPolicyFirewallRules”里面有详细信息

         (每个人可能不一样,cmd打开regedit,ctrl+f,搜程序路径即可)

          我模仿着加了一条。(改了程序名字和路径),结果没鸟用。

          找了一下午之后,终于找到了解决方法

          netsh advfirewall firewall 这个可以

    netsh advfirewall firewall add rule ?

    用法: add rule name=<string>
    dir=in|out
    action=allow|block|bypass
    [program=<program path>]
    [service=<service short name>|any]
    [description=<string>]
    [enable=yes|no (default=yes)]
    [profile=public|private|domain|any[,...]]
    [localip=any|<IPv4 address>|<IPv6 address>|<subnet>|<range>|<list>]
    [remoteip=any|localsubnet|dns|dhcp|wins|defaultgateway|
    <IPv4 address>|<IPv6 address>|<subnet>|<range>|<list>]
    [localport=0-65535|<port range>[,...]|RPC|RPC-EPMap|IPHTTPS|any (default=a
    ny)]
    [remoteport=0-65535|<port range>[,...]|any (default=any)]
    [protocol=0-255|icmpv4|icmpv6|icmpv4:type,code|icmpv6:type,code|
    tcp|udp|any (default=any)]
    [interfacetype=wireless|lan|ras|any]
    [rmtcomputergrp=<SDDL string>]
    [rmtusrgrp=<SDDL string>]
    [edge=yes|deferapp|deferuser|no (default=no)]
    [security=authenticate|authenc|authdynenc|authnoencap|notrequired
    (default=notrequired)]

    备注:

    - 将新的入站或出站规则添加到防火墙策略。
    - 规则名称应该是唯一的,且不能为 "all"。
    - 如果已指定远程计算机或用户组,则 security 必须为
    authenticate、authenc、authdynenc 或 authnoencap。
    - 为 authdynenc 设置安全性可允许系统动态协商为匹配
    给定 Windows 防火墙规则的通信使用加密。
    根据现有连接安全规则属性协商加密。
    选择此选项后,只要入站 IPSec 连接已设置安全保护,
    但未使用 IPSec 进行加密,计算机就能够接收该入站连接的第一个 TCP 或
    UDP 包。
    一旦处理了第一个数据包,服务器将重新协商连接并对其进行升级,以便所
    有后续通信都完全加密。
    - 如果 action=bypass,则 dir=in 时必须指定远程计算机组。
    - 如果 service=any,则规则仅应用到服务。
    - ICMP 类型或代码可以为 "any"。
    - Edge 只能为入站规则指定。
    - AuthEnc 和 authnoencap 不能同时使用。
    - Authdynenc 仅当 dir=in 时有效。
    - 设置 authnoencap 后,security=authenticate 选项就变成可选参数。

    示例:

    为不具有封装的 messenger.exe 添加入站规则:
    netsh advfirewall firewall add rule name="allow messenger"
    dir=in program="c:programfilesmessengermsmsgs.exe"
    security=authnoencap action=allow

    为端口 80 添加出站规则:
    netsh advfirewall firewall add rule name="allow80"
    protocol=TCP dir=out localport=80 action=block

    为 TCP 端口 80 通信添加需要安全和加密的入站规则:
    netsh advfirewall firewall add rule
    name="Require Encryption for Inbound TCP/80"
    protocol=TCP dir=in localport=80 security=authdynenc
    action=allow

    为 messenger.exe 添加需要安全的入站规则:
    netsh advfirewall firewall add rule name="allow messenger"
    dir=in program="c:program filesmessengermsmsgs.exe"
    security=authenticate action=allow

    为 SDDL 字符串标识的组 acmedomainscanners 添

        最后,我写的脚本如下:

     netsh advfirewall firewall add rule name="test" dir=in program="E:项目相关代码kuashengin est12.exe" security=authnoencap action=allow

     郁闷,a.bat

    set exename=%1
    set exename=%exename:"=%
    set exepath=%2
    set exepath=%exepath:"=%
    set mycmd="netsh advfirewall firewall show rule name=%1"

    for /f "delims=" %%a in ('%mycmd%') do (
    echo %%a | findstr /c:"%exename%" && goto finish || goto job
    )

    :job
    echo not exist
    netsh advfirewall firewall add rule name="%exename%" dir=in program="%exepath%" security=authnoencap action=allow
    :finish
    pause

    执行WinExec("a.bat test E:/项目相关/代码/kuasheng/bin/test12.exe",SW_SHOW);

    报错 包含无效的字符或长度

    netsh advfirewall firewall add rule name="test" dir=in program="E:/项目相关/代码/kuasheng/bin/test12.exe" security=authnoencap action=allow 

    正常,原因不明。。郁闷。

    另外win10 需要提升脚本权限


    @echo off
    title 获取管理员权限
    mode con cols=100 lines=20
    color 3f

    :: 开始获取管理员权限
    setlocal
    set uac=~uac_permission_tmp_%random%
    md "%SystemRoot%system32\%uac%" 2>nul
    if %errorlevel%==0 ( rd "%SystemRoot%system32\%uac%" >nul 2>nul ) else (
    echo set uac = CreateObject^("Shell.Application"^)>"%temp%\%uac%.vbs"
    echo uac.ShellExecute "%~s0","","","runas",1 >>"%temp%\%uac%.vbs"
    echo WScript.Quit >>"%temp%\%uac%.vbs"
    "%temp%\%uac%.vbs" /f
    del /f /q "%temp%\%uac%.vbs" & exit )
    endlocal
    :: 完成获取,下面可以开始写你自己的代码了

    echo.
    echo 原理:先尝试在系统目录下临时新建一个文件夹,若已获取管理员权限或是运行在XP等不需要管理员权限的
    echo 老系统时,是可以新建成功的,此时只需删除这个临时新建的文件夹就好了,否则通过创建一个临时
    echo vbs脚本获取管理员权限,然后再删除这个临时vbs脚本文件。
    echo.
    echo 提示:当获取管理员目录后,你的批处理运行目录会发生变化,为保证目录准确,
    echo 可通过 cd 切换目录,例“cd /d %%~dp0”切换回批处理所在目录
    echo.
    echo 当前运行目录: %cd%
    echo 批处理所在目录:%~dp0
    echo.
    echo 例:切换回批处理所在目录
    echo cd /d %%~dp0
    echo.

    cd /d %~dp0

    REM 把你需要运行的脚本放到下面就可以了

  • 相关阅读:
    JSON 使用
    JSON 语法
    JSON 简介
    什么是 JSON ?
    PHP 数组排序
    PHP 数组
    swan.after
    Page.after
    App.after
    AOP说明
  • 原文地址:https://www.cnblogs.com/xuhuajie/p/11245147.html
Copyright © 2011-2022 走看看