gpt4 book ai didi

python - Windows 防火墙异常(exception)仅在应用以提升的权限运行时才有效

转载 作者:行者123 更新时间:2023-12-04 13:52:36 25 4
gpt4 key购买 nike

我的应用程序使用 Python socket所以我必须添加一个防火墙异常(exception)才能通过套接字接收数据。我已经使用 PyInstaller 卡住了该应用程序,以便能够将其分发给 Windows 计算机。要添加防火墙异常(exception),我使用以下代码:

command1 = f'netsh advfirewall firewall add rule name="{rule_name}" profile=any protocol=any enable=yes DIR=In program="{app_path}" Action=Allow'
command2 = f'netsh advfirewall firewall add rule name="{rule_name}" profile=any protocol=any enable=yes DIR=Out program="{app_path}" Action=Allow'
subprocess.run(command1, shell=False, stdout=DEVNULL, stderr=DEVNULL)
subprocess.run(command2, shell=False, stdout=DEVNULL, stderr=DEVNULL)
为了添加此异常,我使用此代码来获得提升的权限:
try:
isAdmin = ctypes.windll.shell32.IsUserAnAdmin()
except AttributeError:
isAdmin = False
if not isAdmin:
ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
系统会提示用户提升确认窗口,如果他接受,则防火墙异常(exception)已正确创建并且应用程序运行正常。但是,如果应用程序关闭并再次运行,我会检查防火墙规则是否存在,如果存在,我不会再次请求提升权限。
我的问题是,如果没有提升的权限,应用程序无法打开到远程主机的套接字,相反,如果用户以提升的权限运行应用程序或者应用程序要求它,它就会工作。
我应该怎么做才能让应用程序在没有提升权限的情况下工作(第一次创建防火墙异常(exception)时除外)?
编辑
我使用这些参数来创建和连接套接字:
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.connect((192.168.x.x, 80xx))
编辑 2
我刚刚注意到我能够接受传入的连接并发送数据(服务器模式),但我 不能建立外部连接并接收数据(客户端模式)。

最佳答案

Windows 防火墙规则可能定义了具有管理员权限的用户,因此您还应该检查为防火墙规则定义的“本地主体”。

关于python - Windows 防火墙异常(exception)仅在应用以提升的权限运行时才有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67971397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com