import pythoncom
import win32com
class rule:
items = {}# 中英文转换items_name = { "Action":'操作', "ApplicationName":'程序', "Description":'形容', "Direction":'进站/出站', "EdgeTraversal":'边缘穿梭', "EdgeTraversalOptions":'边缘穿梭选项', "Enabled":'已启用', "Grouping":'组', "IcmpTypesAndCodes":'ICMP设置', "InterfaceTypes":'接口类型', "Interfaces":'接口', "LocalAddresses":'本地地址', "LocalAppPackageId":'利用程序包', "LocalPorts":'本地端口', "LocalUserAuthorizedList":'受权的本地计算机', "LocalUserOwner":'本地用户所有者', "Name":'名称', "Profiles":'配置文件', "Protocol":'协定', "RemoteAddresses":'近程地址', "RemoteMachineAuthorizedList":'受权的近程计算机', "RemotePorts":'近程端口', "RemoteUserAuthorizedList":'受权的近程用户', "SecureFlags":'平安', "serviceName":'服务名'}items_shell = { "Action": 'action', "ApplicationName": 'program', "Description": 'description', "Direction": 'dir', "EdgeTraversal": 'edge', "EdgeTraversalOptions": '边缘穿梭选项', "Enabled": 'enable', "Grouping": '组', "IcmpTypesAndCodes": 'ICMP设置', "InterfaceTypes": 'interfacetype', "Interfaces": '接口', "LocalAddresses": 'localip', "LocalAppPackageId": '利用程序包', "LocalPorts": 'localport', "LocalUserAuthorizedList": '受权的本地计算机', "LocalUserOwner": '本地用户所有者', "Name": 'name', "Profiles": 'profile', "Protocol": 'protocol', "RemoteAddresses": 'remoteip', "RemoteMachineAuthorizedList": 'rmtcomputergrp', "RemotePorts": 'remoteport', "RemoteUserAuthorizedList": 'rmtusrgrp', "SecureFlags": 'security', "serviceName": 'service'}def __init__(self,index): self.index = index for i in self.items_name.keys(): self.items[i] = ''def init_by_app(self, app_in): for key in self.items_name.keys(): self.items[key] = " " + str(eval("app_in."+key)) print(self.items[key] )def init_by_dict(self,dirc_con): flag = False for item_key in self.items_name.keys(): if self.items_name[item_key] in dirc_con.keys(): flag = True self.items[item_key] = dirc_con[self.items_name[item_key]] if not flag: for key in dirc_con.keys(): self.items[key] = dirc_con[key]def create_rule(self): app = win32com.client.Dispatch('HNetCfg.FwRule') res = [] # 留神赋值程序 app.Action = int(self.items["Action"]) app.Description = self.items["Description"] app.Direction = int(self.items["Direction"]) app.EdgeTraversal = self.items["EdgeTraversal"] app.EdgeTraversalOptions = self.items["EdgeTraversalOptions"] app.Enabled = self.items["Enabled"] app.Grouping = self.items["Grouping"] ## app.IcmpTypesAndCodes = self.items["IcmpTypesAndCodes"] app.InterfaceTypes = self.items["InterfaceTypes"] ## app.Interfaces = self.items["Interfaces"] app.LocalAddresses = self.items["LocalAddresses"] app.LocalAppPackageId = self.items["LocalAppPackageId"] ## app.LocalPorts = str(self.items["LocalPorts"]), ## app.LocalUserAuthorizedList = self.items["LocalUserAuthorizedList"] app.LocalUserOwner = self.items["LocalUserOwner"] app.Name = self.items["Name"] app.Profiles = self.items["Profiles"] app.Protocol = self.items["Protocol"] app.RemoteAddresses = self.items["RemoteAddresses"] ## app.RemoteMachineAuthorizedList = self.items["RemoteMachineAuthorizedList"] app.RemotePorts = self.items["RemotePorts"] app.LocalPorts = self.items['LocalPorts'] ## app.RemoteUserAuthorizedList = '' app.SecureFlags = self.items["SecureFlags"] # app.serviceName = "null" # app.ApplicationName = "null" return appdef __str__(self): result =[金融期货](https://www.gendan5.com/futures/ff.html) "="*10 + '\n序号 : ' + str(self.index) + '\n' for key in self.items_name.keys(): result += self.items_name[key] + " : " + str(self.items[key]) +"\n" return result
def add_rule(dict_value):
fw = win32com.client.gencache.EnsureDispatch('HNetCfg.FwPolicy2', 0)apps = fw.Rulesprint(apps.Count)# app = win32com.client.Dispatch('HNetCfg.FwRule3')rule_obj = rule(-1)rule_obj.init_by_dict(dict_value)app = rule_obj.create_rule()apps.Add(app)
def del_rule(dict_value):
fw = win32com.client.gencache.EnsureDispatch('HNetCfg.FwPolicy2', 0)apps = fw.Rulesprint("before :", apps.Count)rule_obj = rule(-1)rule_obj.init_by_dict(dict_value)for app in apps: print(rule_obj.items['Name'] , str(app.Name)) print(rule_obj.items['LocalPorts'] , str(app.LocalPorts)) print(rule_obj.items['RemoteAddresses'] , str(app.RemoteAddresses)) if rule_obj.items['Name'] == str(app.Name) and rule_obj.items['LocalPorts'] == str(app.LocalPorts) and rule_obj.items['RemoteAddresses'] == str(app.RemoteAddresses): # 只能依据Name删除,大略是个傻子哟 apps.Remove(str(app.Name)) # breakprint("after :", apps.Count)
if name == '__main__':
my_dict = {'序号' : '2','操作' : '0','程序' : '','形容' : '','进站/出站' : '1','边缘穿梭' : 'False','边缘穿梭选项' : '0','已启用' : 'True','组' : '','ICMP设置' : '','接口类型' : 'All','接口' : 'None','本地地址' : '*','利用程序包' : '','本地端口' : '9876','受权的本地计算机' : '','本地用户所有者' : '','名称' : 'test_cmd','配置文件' : '2','协定' : '6','近程地址' : '114.115.250.41/255.255.255.255','受权的近程计算机' : '','近程端口' : '*','受权的近程用户' : '','平安' : '0','服务名' : ''}add_rule(my_dict)del_rule(my_dict)