import requests
import json
import re

gongdanhao = input("输入工单号IT-003-22xxxx-xxxx:")
Src_IP = input("输入源地址:")
Dst_IP = input("输入目的地址:")
protocol_tcpudp = input("输入服务端口TCPxx/UDPxx:")
# time_youxiaoqi =input("输入时间:")

server_ip ='https://IP地址:443/rest/api/'  ##服务器ip地址
#—————————————————1、token部分(token值默认有效期10分钟)----------------
url = '{0}login'.format(server_ip)
data=json.dumps({ "lang":"zh_CN", "password":"xxxxxxxx", "userName":"xxxxxx"}) ##账号密码Base64转换
response = requests.post(url,  data=data,verify=False)
token=response.json().get('result')[0].get('token')

#---------------2、策略部分,策略头部---------------------------------------------
cookies = {'token': token,'username': 'Huawei@1234','vsysId': '0','role': 'admin','fromrootvsys': 'true',}
headers = {'X-API-Language': 'en', 'Content-Type': 'application/json',}
policy_url='{0}policy'.format(server_ip)

##———————————————2.1 策略名称,一般为工单号-------------------------------
# gongdanhao ="IT-003-22xxxx-xxx" # 工单号一般作为策略名称

##———————————————2.2 策略取ID值-------------------------------
response = requests.get(url=policy_url, headers=headers, cookies=cookies,verify=False)
l=[]
for i in response.json().get('result'):l.append(i.get('id'))
policy_id = str(int(max(l))+1) ##取到当前策略最大的ID号+1= 下次策略的ID号

##———————————————2.3 策略ip,可做源ip,也可做目的ip-------------------------------
#2.3.1 一段地址:10.1.1.1-10.1.1.9,做源地址时k为src_range,做目的地址时k为dst_range
# IP_range_k="src_range"
# IP_range_v = { "min" : "10.1.1.1", "max" : "10.1.1.9"}
#
# #2.3.2 一个主机位,或者掩码位:10.1.1.1/32,或者10.2.2.2/24,做源地址时k为src_subnet,做目的地址时k为dst_subnet
# IP_subnet_k ="src_subnet"
# IP_subnet_v =[{"ip": "10.1.1.1","netmask": "32"}]  #10.1.1.1/32
# ########IP_subnet_v =[{"ip": "10.2.2.2","netmask": "24"}]  #示例10.2.2.2/24
#
# #2.3.3 域名:www.baidu.com,做源地址时k为src_host,做目的地址时k为dst_host
# IP_domain_k ="src_host"
# IP_domain_v =[{"host": "www.baidu.com","is_ipv6": "0"}] #www.baidu.com
#
# #2.3.4 全部地址,0.0.0.0/0或者any,做源地址时k为src_addr,做目的地址时k为dst_addr
# IP_any_k ="src_addr"
# IP_any_v =[{"member": "Any","type": "0"}]

#-----------源地址----------------------
if re.findall(re.compile(r'[A-Za-z]', re.S), Src_IP):
    SIP_K = "src_host"
    SIP_V = {"host": Src_IP,"is_ipv6": "0"}

elif Src_IP.find('-') > 0:
    qishi_ip = Src_IP.split('-')[0]
    jieshu_ip = qishi_ip.rsplit('.', 1)[0] + "." + Src_IP.split('-')[1]
    SIP_K = "src_range"
    SIP_V = {"min": qishi_ip, "max": jieshu_ip}
elif Src_IP.find('/') > 0:
    qishi_ip = Src_IP[0:Src_IP.find('/')]
    jieshu_ip = Src_IP[Src_IP.find('/') + 1:]
    SIP_K = "src_subnet"
    SIP_V = {"ip": qishi_ip, "netmask": jieshu_ip}

elif  Src_IP[Src_IP.find('/') + 1:] == '0' or Src_IP[0:Src_IP.find('/')] == '0.0.0.0':
    SIP_K = "src_addr"
    SIP_V = {"member": "Any","type": "0"}
elif len(Src_IP.split('.')) == 4:
    ip_list = Src_IP.split(".")  # 将字符串按点分割成列表
    for num in ip_list:
        if len(ip_list) == 4 and num.isdigit() and 0 <= int(num) <= 255:
            SIP_K = "src_subnet"
            SIP_V = {"ip": Src_IP, "netmask": "32"}
        else:
            SIP_K = "src_addr"
            SIP_V = {"member": "Any", "type": "0"}

#-----------目的地址----------------------
if re.findall(re.compile(r'[A-Za-z]', re.S), Dst_IP):
    DIP_K = "dst_host"
    DIP_V = {"host": Dst_IP,"is_ipv6": "0"}

elif Dst_IP.find('-') > 0:
    qishi_ip = Dst_IP.split('-')[0]
    jieshu_ip = qishi_ip.rsplit('.', 1)[0] + "." + Dst_IP.split('-')[1]
    DIP_K = "dst_range"
    DIP_V = {"min": qishi_ip, "max": jieshu_ip}
elif Dst_IP.find('/') > 0:
    qishi_ip = Dst_IP[0:Dst_IP.find('/')]
    jieshu_ip = Dst_IP[Dst_IP.find('/') + 1:]
    DIP_K = "dst_subnet"
    DIP_V = {"ip": qishi_ip, "netmask": jieshu_ip}

elif  Dst_IP[Dst_IP.find('/') + 1:] == '0' or Dst_IP[0:Dst_IP.find('/')] == '0.0.0.0':
    DIP_K = "dst_addr"
    DIP_V = {"member": "Any","type": "0"}
elif len(Dst_IP.split('.')) == 4:
    ip_list = Dst_IP.split(".")  # 将字符串按点分割成列表
    for num in ip_list:
        if len(ip_list) == 4 and num.isdigit() and 0 <= int(num) <= 255:
            DIP_K = "dst_subnet"
            DIP_V = {"ip": Dst_IP, "netmask": "32"}
        else:
            DIP_K = "dst_addr"
            DIP_V = {"member": "Any", "type": "0"}

#———————————————————3、服务端口TCP:XXX---------------------
# protocol_url='{0}servicebook'.format(server_ip)
# protocol_data =[{"name" : "TCP80",  ##协议名称,一般以TCPxxx或者UDPxx
#         "type" : "0",
#         "row" : [{"protocol" : "6", #6表示TCP,17表示UDP
#                 "sp_low" : "0",     #源端口从0-65535,不变
#                 "sp_high" : "65535",#源端口从0-65535,不变
#                 "dp_low" : "80",    #目的端口起始
#                 "dp_high" : "80", }]   #目的端口结束
#                 }]
# response = requests.post(url=protocol_url, headers=headers, cookies=cookies, data=json.dumps(protocol_data),verify=False)
# print(response.json())
if protocol_tcpudp.startswith('T') or  protocol_tcpudp.startswith('t'):
    protocol_id= 6
elif protocol_tcpudp.startswith('U') or  protocol_tcpudp.startswith('u'):
    protocol_id = 17
pro = protocol_tcpudp.split('P')[1] or protocol_tcpudp.split('p')[1] or protocol_tcpudp.split('U')[1] or protocol_tcpudp.split('u')[1]
protocol_url='{0}servicebook'.format(server_ip)
protocol_data =[{"name" : protocol_tcpudp,  ##协议名称,一般以TCPxxx或者UDPxx
        "type" : "0",
        "row" : [{"protocol" : protocol_id, #6表示TCP,17表示UDP
                "sp_low" : "0",     #源端口从0-65535,不变
                "sp_high" : "65535",#源端口从0-65535,不变
                "dp_low" : pro,    #目的端口起始
                "dp_high" : pro, }]   #目的端口结束
                }]
response = requests.post(url=protocol_url, headers=headers, cookies=cookies, data=json.dumps(protocol_data),verify=False)

#———————————————————4、时间参数---------------------
# time_url='{0}schedule'.format(server_ip)
# time_data=[{"name": gongdanhao,  #时间名称 ,一般为工单号
#             "schedule_absolute":
#             {"start_time_mask": 1,
#             "start_year": 2022,    #起始年
#             "start_month": 11,      #起始月
#             "start_day": 23,       #起始日
#             "start_hour": 0,       #起始时
#             "start_minutes": 0,    #起始分
#             "start_second": 0,     #起始秒
#             "end_time_mask": 1,
#             "end_year": 2022,      #结束年
#             "end_month": 11,        #结束月
#             "end_day": 30,         #结束日
#             "end_hour": 23,        #结束时
#             "end_minutes": 59,     #结束分
#             "end_second": 59       #结束秒
#              }}]
# response = requests.post(url=time_url, headers=headers, cookies=cookies, data=json.dumps(time_data),verify=False)
###### print(response.json())
######"schedname": [ { "name": "gongdanhao" } ], ##策略中使用time参数,一般为工单号

#----------------------------------------------------------------
policy_data = [{ "name" : { "name" : gongdanhao},
       "id":policy_id,
       "enable" : 1,
       "src_zone" : { "name": "Any" },
       SIP_K : SIP_V,
       "dst_zone" : { "name": "Any" },
       DIP_K: DIP_V,
       "service" : [{"member": protocol_tcpudp,"type": "0"}],
       "action" : "2",
       "log_end": "1",
       "log_start": "1",
       "assistant_enable": "0",}] #可以利用assistant_enable参数进行时间替换
#"schedname": [ { "name": 时间名称 } ],                    #4、时间参数,时间有效期,没有的话注释掉,

response = requests.post(url=policy_url, headers=headers, cookies=cookies, data=json.dumps(policy_data),verify=False)
print(response.json())

#-------------------移动策略------------------------
move_policy_data=[{"id":policy_id,"location":"before",}]
response = requests.put(url=policy_url, headers=headers, cookies=cookies, data=json.dumps(move_policy_data),verify=False)

山石防火墙-api-安全组策略相关推荐

  1. 域控服务器怎么统一改策略,使用域组策略及脚本统一配置防火墙

    使用域组策略/脚本统一配置防火墙 目前企业内网多为域环境,部分企业应用例如***检测等需要客户端统一开放某一端口比如Ping,如果企业环境较大,客户端数千个逐个设置将是浪费工作效率且不灵活的方案:所以 ...

  2. 使用组策略配置Windows 7的高级防火墙

    示例:使用组策略配置Windows 7的高级防火墙 微软河北技术支持中心的培训部门的员工不允许访问FTP站点,其他出站的流量允许.现在你需要使用组策略中配置培训部门的计算机的高级防火墙,实现出站流量的 ...

  3. 计算机配置cpo,使用域组策略及脚本统一配置防火墙-20210421070355.docx-原创力文档...

    使用域组策略/脚本统一配置防火墙 目前企业内网多为域环境,部分企业应用例如入侵检测等需要客户端统一开放某一端口比如Ping,如果企业环境 较大,客户端数千个逐个设置将是浪费工作效率且不灵活的方案:所以 ...

  4. 使用组策略配置Windows防火墙设置和规则

    Windows防火墙允许限制特定应用程序,协议或TCP / IP端口的入站/出站网络流量.这是一种限制与用户工作站或服务器之间的网络访问的简便方法.您可以在每台计算机上分别配置Windows防火墙规则 ...

  5. Windows防火墙问题3--由于安全考虑,某些设置由组策略控制

    "常规"选项卡变虚了!由于安全考虑,某些设置由组策略控制 在运行里面输入gpedit.msc回车 然后找到计算机配置下的安全模板--网络--Windows防火墙--标准配置文件-- ...

  6. 利用配置组策略解决Chrome浏览器第三方扩展被停用的问题

    首先根据以下代码生成文件chrome.adm CLASS MACHINECATEGORY !!googleCATEGORY !!googlechromeKEYNAME "Software\P ...

  7. Windows 组策略(Group Policy Object)机制的漏洞分析

    Windows 组策略(Group Policy Object)机制的漏洞类大约有60个,专门针对策略更新步骤,允许域环境中的标准用户执行文件系统攻击,进而使恶意用户可以逃避反恶意软件解决方案,绕过安 ...

  8. 6425C-Lab6 实现组策略

    共有3个实验: 实验6A:组策略的实现 实验6B:管理组策略的作用域 实验6C:组策略应用的排错 ========== 实验6A:组策略的实现 共2个练习: 练习1:创建.编辑和链接GPO 练习2:使 ...

  9. Windows Server 2008组策略安全实践手册

    相信很多人都知道Windows Server 2008系统的安全功能非法强大,而它的强大之处不仅仅是新增加了一些安全功能,而且还表现在一些不起眼的传统功能上.这不,巧妙对Windows Server ...

最新文章

  1. R语言Box-Cox变换实战(Box-Cox Transformation):将非正态分布数据转换为正态分布数据、计算最佳λ、变换后构建模型
  2. 【机器学习】一文读懂层次聚类(Python代码)
  3. 窗口分析函数_5_计算累加乘
  4. 信息学奥赛一本通 1012:计算多项式的值 | OpenJudge NOI 1.3 07
  5. python万年历时钟_python实现万年历类calendar
  6. 俄罗斯议会预计2021年代币发行将激增
  7. 音视频开发-websocket教程
  8. 图(一):图的邻接表表示
  9. mybatis中的mapper代理的应用
  10. 15投影矩阵与Moore-Penrose逆(1)
  11. CTCS列控系统原理--详细学习笔记
  12. 谷歌浏览器如何截全屏长图(非常实用)
  13. A Neural Algorithm of Artistic Style : Neural Style Transfer with Eager Executon
  14. 厉害!他33岁破格晋升教授和博导,成果还打破国外技术垄断
  15. 安卓adb问题处理总结
  16. 【LaTex】解决:Origin导出pdf图片在latex中线条变粗
  17. matlab编写数学公式计算,关于MATLAB Function实现数学运算的相关介绍
  18. 什么是文件管理软件?你为什么需要它?
  19. 判断sign签名(json格式)
  20. 数字经济背景下的多元化转型,电信运营商如何突围?

热门文章

  1. 流媒体后视镜方案关键技术--失效模式控制
  2. Shopfa:有哪些果蔬生鲜电商平台?
  3. R语言解决package ‘MODIS’ is not available (for R version 3.6.3) 的问题
  4. 使用.reg文件操作注册编辑表
  5. 让阿根廷队“告吹”的三个球背后,2022 年世界杯暗藏哪些技术玄机?
  6. 桌面管理,Windows自带工具!很强!
  7. 大数据之Flume:Flume概述
  8. HDU 4950 Monster
  9. 机器人焊枪动作与编程实验_敲黑板 | 机器人是怎么完成任务的?这三种编程方式的区别你造吗...
  10. 深度|为什么一定要从DevOps走向BizDevOps?