API рд╕рд╣ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рджрд╛рдЪреА рд╕рдВрдкреВрд░реНрдг рд╢рдХреНрддреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдбрд╕рд╣ рдПрдХрддреНрд░рд┐рддрдкрдгреЗ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рддреЗ рддреЗрд╡реНрд╣рд╛ рдкреНрд░рдХрдЯ рд╣реЛрддреЗ, рдЬреЗрд╡реНрд╣рд╛ API рдкреНрд░рддрд┐рд╕рд╛рджрд╛рдВрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА API рд╡рд┐рдирдВрддреНрдпрд╛ рдЖрдгрд┐ рд╕рд╛рдзрдиреЗ рдЧрддрд┐рд╢реАрд▓рдкрдгреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░рдгреЗ рд╢рдХреНрдп рд╣реЛрддреЗ. рдорд╛рддреНрд░, рддрд░реАрд╣реА рддреЗ рд▓рдХреНрд╖рд╛рдд рдпреЗрдд рдирд╛рд╣реА рдкрд╛рдпрдерди рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ рдХрд┐рдЯ (рдпрд╛рдкреБрдвреЗ Python SDK рдореНрд╣рдгреВрди рд╕рдВрджрд░реНрднрд┐рдд) рд╕рд╛рдареА рдкреЙрдЗрдВрдЯ рдореЕрдиреЗрдЬрдореЗрдВрдЯ API рддрдкрд╛рд╕рд╛, рдкрдг рд╡реНрдпрд░реНрде. рд╣реЗ рд╡рд┐рдХрд╛рд╕рдХ рдЖрдгрд┐ рдСрдЯреЛрдореЗрд╢рди рдЙрддреНрд╕рд╛рд╣реА рд▓реЛрдХрд╛рдВрдЪреЗ рдЬреАрд╡рди рд▓рдХреНрд╖рдгреАрдпрд░реАрддреНрдпрд╛ рд╕реБрд▓рдн рдХрд░рддреЗ. рдкрд╛рдпрдердирдиреЗ рдЕрд▓реАрдХрдбреЗ рдкреНрд░рдЪрдВрдб рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдорд┐рд│рд╡рд▓реА рдЖрд╣реЗ рдЖрдгрд┐ рдореА рдЕрдВрддрд░ рднрд░реВрди рдореБрдЦреНрдп рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдЪреЗ рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдХрд░рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛.
рдЪреЗрдХ рдкреЙрдЗрдВрдЯ рд╕рдХреНрд░рд┐рдпрдкрдгреЗ API рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдд рдЖрд╣реЗ рдЖрдгрд┐ рдпрд╛рдХреНрд╖рдгреА рдЦрд╛рд▓реАрд▓ рд░рд┐рд▓реАрдЭ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд:
рдкреЙрдЗрдВрдЯ рдореЕрдиреЗрдЬрдореЗрдВрдЯ API рддрдкрд╛рд╕рд╛ (рд╡рд░реНрддрдорд╛рди рдЖрд╡реГрддреНрддреА 1.6) тАФ API рджреНрд╡рд╛рд░реЗ рдХрдВрдЯреНрд░реЛрд▓ рд╕рд░реНрд╡реНрд╣рд░рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рд╛ (рдЖрдгрд┐ рдХрдВрдЯреНрд░реЛрд▓ рд╕рд░реНрд╡реНрд╣рд░рджреНрд╡рд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдЧреЗрдЯрд╡реЗрд╡рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛)рдЪреЗрдХ рдкреЙрдЗрдВрдЯ GAIA API (рд╡рд░реНрддрдорд╛рди рдЖрд╡реГрддреНрддреА 1.4) - рд╕реБрд░рдХреНрд╖рд╛ рдЧреЗрдЯрд╡реЗрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рд╛рдзреЛрдХрд╛ рдкреНрд░рддрд┐рдмрдВрдзрдХ API 1.0 тАФ рдЪреЗрдХ рдкреЙрдЗрдВрдЯ рдХреНрд▓рд╛рдЙрдбрдордзреНрдпреЗ рд╕рдБрдбрдмреЙрдХреНрд╕рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗрдУрд│рдЦ рдЬрд╛рдЧрд░реВрдХрддрд╛ API тАФ рдЧреЗрдЯрд╡реЗрд╡рд░ рдЖрдпрдбреЗрдВрдЯрд┐рдЯреА рдЕрд╡реЗрдЕрд░рдиреЗрд╕ рдмреНрд▓реЗрдбрд╕рд╣ рдХрд╛рдо рдХрд░рдгреЗрд╕реБрд░рдХреНрд╖рд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдкреЛрд░реНрдЯрд▓ API - SMB рдЧреЗрдЯрд╡реЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдкреЛрд░реНрдЯрд▓рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рд╛ (SMB рдЧреЗрдЯрд╡реЗ рдмрджреНрджрд▓ рдЕрдзрд┐рдХ )IoT API - IoT рдирд┐рдпрдВрддреНрд░рдХрд╛рдВрд╢реА рд╕рдВрд╡рд╛рджCloudGuard Connect API - рдЪреНрдпрд╛ рд╕реЛрдмрдд рдХрд╛рдо рдХрд░рддреЛрдХреНрд▓рд╛рдЙрдбрдЧрд╛рд░реНрдб рдХрдиреЗрдХреНрдЯ (SD-WAN рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдп)Dome9 API - рдЪреНрдпрд╛ рд╕реЛрдмрдд рдХрд╛рдо рдХрд░рддреЛрдШреБрдордЯ рейреп
Python SDK рд╕рдзреНрдпрд╛ рдлрдХреНрдд рдореЕрдиреЗрдЬрдореЗрдВрдЯ API рдЖрдгрд┐ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рджрд╛рд▓рд╛ рд╕рдорд░реНрдерди рджреЗрддреЗ Gaia API. рдЖрдкрдг рдпрд╛ рдореЙрдбреНрдпреВрд▓рдордзреАрд▓ рд╕рд░реНрд╡рд╛рдд рдорд╣рддреНрд╡рд╛рдЪреЗ рд╡рд░реНрдЧ, рдкрджреНрдзрддреА рдЖрдгрд┐ рдЪрд▓ рдкрд╛рд╣реВ.
рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдд рдЖрд╣реЗ
рдореЙрдбреНрдпреВрд▓ cpapi рдкрд╛рд╕реВрди рдЬрд▓рдж рдЖрдгрд┐ рд╕рд╣рдЬ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддреЗ
рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгреЗ
рдЖрдореНрд╣рд╛рд▓рд╛ cpapi рдореЙрдбреНрдпреВрд▓рдЪреНрдпрд╛ рдШрдЯрдХрд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣рд╛рд▓рд╛ рдореЙрдбреНрдпреВрд▓рдордзреВрди рдЖрдпрд╛рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ cpapi рдХрд┐рдорд╛рди рджреЛрди рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдЧ:
APIClient ╨╕ APIClientArgs
from cpapi import APIClient, APIClientArgs
рдХреНрд▓реЛрд╕реНрд╕ APIClientArgs API рд╕рд░реНрд╡реНрд╣рд░ рдЖрдгрд┐ рд╡рд░реНрдЧрд╛рд╢реА рдХрдиреЗрдХреНрд╢рди рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ рдЖрд╣реЗ APIClient API рд╕рд╣ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рджрд╛рд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ рдЖрд╣реЗ.
рдХрдиреЗрдХреНрд╢рди рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдгреЗ
API рд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд┐рд╡рд┐рдз рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд░реНрдЧрд╛рдЪрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ APIClientArgs. рддрддреНрд╡рддрдГ, рддреНрдпрд╛рдЪреЗ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЖрд╣реЗрдд рдЖрдгрд┐ рдирд┐рдпрдВрддреНрд░рдг рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд╛рд▓рд╡рддрд╛рдирд╛, рддреНрдпрд╛рдВрдирд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА.
client_args = APIClientArgs()
рдкрд░рдВрддреБ рддреГрддреАрдп-рдкрдХреНрд╖ рд╣реЛрд╕реНрдЯрд╡рд░ рдЪрд╛рд▓рдд рдЕрд╕рддрд╛рдирд╛, рддреБрдореНрд╣рд╛рд▓рд╛ API рд╕рд░реНрд╡реНрд╣рд░рдЪрд╛ рдХрд┐рдорд╛рди IP рдкрддреНрддрд╛ рдХрд┐рдВрд╡рд╛ рд╣реЛрд╕реНрдЯ рдирд╛рд╡ (рдЬреНрдпрд╛рд▓рд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд╕рд░реНрд╡реНрд╣рд░ рдЕрд╕реЗрд╣реА рдореНрд╣рдгрддрд╛рдд) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЦрд╛рд▓реАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдордзреНрдпреЗ, рдЖрдореНрд╣реА рд╕рд░реНрд╡реНрд╣рд░ рдХрдиреЗрдХреНрд╢рди рдкреЕрд░рд╛рдореАрдЯрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЛ рдЖрдгрд┐ рддреНрдпрд╛рд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореНрд╣рдгреВрди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд╕рд░реНрд╡реНрд╣рд░рдЪрд╛ IP рдкрддреНрддрд╛ рдирд┐рдпреБрдХреНрдд рдХрд░рддреЛ.
client_args = APIClientArgs(server='192.168.47.241')
рдЪрд▓рд╛ рд╕рд░реНрд╡ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреА рдбреАрдлреЙрд▓реНрдЯ рдореВрд▓реНрдпреЗ рдкрд╛рд╣реВ рдЬреА API рд╕рд░реНрд╡реНрд╣рд░рд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рддрд╛рдирд╛ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдК рд╢рдХрддрд╛рдд:
APIClientArgs рд╡рд░реНрдЧрд╛рдЪреНрдпрд╛ __init__ рдкрджреНрдзрддреАрдЪреЗ рд╡рд┐рддрд░реНрдХ
class APIClientArgs:
"""
This class provides arguments for APIClient configuration.
All the arguments are configured with their default values.
"""
# port is set to None by default, but it gets replaced with 443 if not specified
# context possible values - web_api (default) or gaia_api
def __init__(self, port=None, fingerprint=None, sid=None, server="127.0.0.1", http_debug_level=0,
api_calls=None, debug_file="", proxy_host=None, proxy_port=8080,
api_version=None, unsafe=False, unsafe_auto_accept=False, context="web_api"):
self.port = port
# management server fingerprint
self.fingerprint = fingerprint
# session-id.
self.sid = sid
# management server name or IP-address
self.server = server
# debug level
self.http_debug_level = http_debug_level
# an array with all the api calls (for debug purposes)
self.api_calls = api_calls if api_calls else []
# name of debug file. If left empty, debug data will not be saved to disk.
self.debug_file = debug_file
# HTTP proxy server address (without "http://")
self.proxy_host = proxy_host
# HTTP proxy port
self.proxy_port = proxy_port
# Management server's API version
self.api_version = api_version
# Indicates that the client should not check the server's certificate
self.unsafe = unsafe
# Indicates that the client should automatically accept and save the server's certificate
self.unsafe_auto_accept = unsafe_auto_accept
# The context of using the client - defaults to web_api
self.context = context
рдорд╛рдЭрд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЖрд╣реЗ рдХреА APIClientArgs рд╡рд░реНрдЧрд╛рдЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдВрдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрдгрд╛рд░реЗ рдпреБрдХреНрддрд┐рд╡рд╛рдж рдЪреЗрдХ рдкреЙрдЗрдВрдЯ рдкреНрд░рд╢рд╛рд╕рдХрд╛рдВрд╕рд╛рдареА рдЕрдВрддрд░реНрдЬреНрдЮрд╛рдиреА рдЖрд╣реЗрдд рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА.
APIClient рдЖрдгрд┐ рд╕рдВрджрд░реНрдн рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХрд╛рджреНрд╡рд╛рд░реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдд рдЖрд╣реЗ
рдХреНрд▓реЛрд╕реНрд╕ APIClient рддреЗ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рд╕рд░реНрд╡рд╛рдд рд╕реЛрдпреАрд╕реНрдХрд░ рдорд╛рд░реНрдЧ рдореНрд╣рдгрдЬреЗ рд╕рдВрджрд░реНрдн рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХрд╛рджреНрд╡рд╛рд░реЗ. APIClient рдХреНрд▓рд╛рд╕рдЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рд╡рд░ рдкрд╛рд╕ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рддреЗ рдХрдиреЗрдХреНрд╢рди рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдЖрд╣реЗрдд рдЬреЗ рдорд╛рдЧреАрд▓ рдЪрд░рдгрд╛рдд рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗ рд╣реЛрддреЗ.
with APIClient(client_args) as client:
рд╕рдВрджрд░реНрдн рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ API рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рд▓реЙрдЧрд┐рди рдХреЙрд▓ рдХрд░рдгрд╛рд░ рдирд╛рд╣реА, рдкрд░рдВрддреБ рддреЗ рдмрд╛рд╣реЗрд░ рдкрдбрддрд╛рдирд╛ рд▓реЙрдЧрдЖрдЙрдЯ рдХреЙрд▓ рдХрд░реЗрд▓. API рдХреЙрд▓рд╕рд╣ рдХрд╛рд░реНрдп рдкреВрд░реНрдг рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рдХрд╛рд╣реА рдХрд╛рд░рдгрд╛рд╕реНрддрд╡ рд▓реЙрдЧрдЖрдЙрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдирд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рдВрджрд░реНрдн рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рди рд╡рд╛рдкрд░рддрд╛ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:
client = APIClient(clieng_args)
рдХрдиреЗрдХреНрд╢рди рдЪрд╛рдЪрдгреА
рдХрдиреЗрдХреНрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдкреВрд░реНрдг рдХрд░рддреЗ рдХреА рдирд╛рд╣реА рд╣реЗ рддрдкрд╛рд╕рдгреНрдпрд╛рдЪрд╛ рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкрд╛ рдорд╛рд░реНрдЧ рдореНрд╣рдгрдЬреЗ рдкрджреНрдзрдд рд╡рд╛рдкрд░рдгреЗ рддрдкрд╛рд╕рд╛_рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ. рд╕рд░реНрд╡реНрд╣рд░ API рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдЪреНрдпрд╛ рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯрд╕рд╛рдареА sha1 рд╣реЕрд╢ рд╕рдордЪреА рдкрдбрддрд╛рд│рдгреА рдЕрдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реНрдпрд╛рд╕ (рдкрджреНрдзрдд рдкрд░рдд рдЖрд▓реА рдЦреЛрдЯреЗ), рддрд░ рд╣реЗ рд╕рд╣рд╕рд╛ рдХрдиреЗрдХреНрд╢рди рд╕рдорд╕реНрдпрд╛рдВрдореБрд│реЗ рд╣реЛрддреЗ рдЖрдгрд┐ рдЖрдореНрд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдордЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдерд╛рдВрдмрд╡реВ рд╢рдХрддреЛ (рдХрд┐рдВрд╡рд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ рдХрдиреЗрдХреНрд╢рди рдбреЗрдЯрд╛ рджреБрд░реБрд╕реНрдд рдХрд░рдгреНрдпрд╛рдЪреА рд╕рдВрдзреА рджреЗрдК рд╢рдХрддреЛ):
if client.check_fingerprint() is False:
print("Could not get the server's fingerprint - Check connectivity with the server.")
exit(1)
рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рднрд╡рд┐рд╖реНрдпрд╛рдд рд╡рд░реНрдЧ APIClient рдкреНрд░рддреНрдпреЗрдХ API рдХреЙрд▓ рддрдкрд╛рд╕реЗрд▓ (рдкрджреНрдзрддреА api_call ╨╕ api_query, рдЖрдореНрд╣реА рддреНрдпрд╛рдВрдЪреНрдпрд╛рдмрджреНрджрд▓ рдереЛрдбреЗ рдкреБрдвреЗ рдмреЛрд▓реВ) API рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ sha1 рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░. рдкрд░рдВрддреБ, API рд╕рд░реНрд╡реНрд╣рд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╛рдЪреЗ sha1 рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рддрдкрд╛рд╕рддрд╛рдирд╛, рддреНрд░реБрдЯреА рдЖрдврд│рд▓реНрдпрд╛рд╕ (рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЕрдЬреНрдЮрд╛рдд рдЖрд╣реЗ рдХрд┐рдВрд╡рд╛ рдмрджрд▓рд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ), рдкрджреНрдзрдд рддрдкрд╛рд╕рд╛_рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рд╕реНрдерд╛рдирд┐рдХ рдорд╢реАрдирд╡рд░ рдЖрдкреЛрдЖрдк рдорд╛рд╣рд┐рддреА рдЬреЛрдбрдгреНрдпрд╛рдЪреА/рдмрджрд▓рдгреНрдпрд╛рдЪреА рд╕рдВрдзреА рдкреНрд░рджрд╛рди рдХрд░реЗрд▓. рд╣реА рддрдкрд╛рд╕рдгреА рдкреВрд░реНрдгрдкрдгреЗ рдЕрдХреНрд╖рдо рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ (рдкрд░рдВрддреБ APIClientArgs рдпреБрдХреНрддрд┐рд╡рд╛рдж рд╡рд╛рдкрд░реВрди, 127.0.0.1 рд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рддрд╛рдирд╛, API рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд╛рд▓рд╡рд▓реНрдпрд╛ рдЧреЗрд▓реНрдпрд╛ рдЕрд╕рддреАрд▓ рддрд░рдЪ рдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ - unsafe_auto_accept ("рдХрдиреЗрдХреНрд╢рди рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреЗ" рдордзреНрдпреЗ APIClientArgs рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рдкрд╣рд╛).
client_args = APIClientArgs(unsafe_auto_accept=True)
API рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рд▓реЙрдЧ рдЗрди рдХрд░рд╛
╨г APIClient API рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рд▓реЙрдЧ рдЗрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддрдмреНрдмрд▓ 3 рдкрджреНрдзрддреА рдЖрд╣реЗрдд рдЖрдгрд┐ рддреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХрд╛рдЪрд╛ рдЕрд░реНрде рд╕рдордЬрддреЛ sid(рд╕рддреНрд░-рдЖрдпрдбреА), рдЬреЗ рд╢реАрд░реНрд╖рд▓реЗрдЦрд╛рддреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рддреНрдпрд╛рдирдВрддрд░рдЪреНрдпрд╛ API рдХреЙрд▓рдордзреНрдпреЗ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ (рдпрд╛ рдкреЕрд░рд╛рдореАрдЯрд░рдЪреНрдпрд╛ рд╢реАрд░реНрд╖рд▓реЗрдЦрд╛рддреАрд▓ рдирд╛рд╡ рдЖрд╣реЗ X-chkp-sid), рддреНрдпрд╛рдореБрд│реЗ рдпрд╛ рдкреЕрд░рд╛рдореАрдЯрд░рд╡рд░ рдкреБрдвреАрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА.
рд▓реЙрдЧрд┐рди рдкрджреНрдзрдд
рд▓реЙрдЧрд┐рди рдЖрдгрд┐ рдкрд╛рд╕рд╡рд░реНрдб рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдкрд░реНрдпрд╛рдп (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╡рд╛рдкрд░рдХрд░реНрддрд╛рдирд╛рд╡ рдкреНрд░рд╢рд╛рд╕рдХ рдЖрдгрд┐ рд╕рдВрдХреЗрддрд╢рдмреНрдж 1q2w3e рд╕реНрдерд╛рдирд╛рддреНрдордХ рдпреБрдХреНрддрд┐рд╡рд╛рдж рдореНрд╣рдгреВрди рдкрд╛рд╕ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд):
login = client.login('admin', '1q2w3e')
рд▓реЙрдЧрд┐рди рдкрджреНрдзрддреАрдордзреНрдпреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░реНрдпрд╛рдпреА рдорд╛рдкрджрдВрдб рджреЗрдЦреАрд▓ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд; рдпреЗрдереЗ рддреНрдпрд╛рдВрдЪреА рдирд╛рд╡реЗ рдЖрдгрд┐ рдбреАрдлреЙрд▓реНрдЯ рдореВрд▓реНрдпреЗ рдЖрд╣реЗрдд:
continue_last_session=False, domain=None, read_only=False, payload=None
рд▓реЙрдЧрд┐рди_with_api_key рдкрджреНрдзрддреА
api рдХреА рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдкрд░реНрдпрд╛рдп (рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЖрд╡реГрддреНрддреА R80.40/Management API v1.6 рдкрд╛рд╕реВрди рдкреНрд░рд╛рд░рдВрдн рдХрд░реВрди рд╕рдорд░реНрдерд┐рдд, "3TsbPJ8ZKjaJGvFyoFqHFA==" рд╣реЗ API рдХреА рдЕрдзрд┐рдХреГрддрддрд╛ рдкрджреНрдзрддреАрд╕рд╣ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реАрд▓ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдкреИрдХреА рдПрдХрд╛рд╕рд╛рдареА API рдХреА рдореВрд▓реНрдп рдЖрд╣реЗ:
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
рдкрджреНрдзрддреАрдиреЗ login_with_api_key рдкрджреНрдзрддреАрдкреНрд░рдорд╛рдгреЗрдЪ рдкрд░реНрдпрд╛рдпреА рдорд╛рдкрджрдВрдб рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд рд▓реЙрдЧрд┐рди.
login_as_root рдкрджреНрдзрдд
API рд╕рд░реНрд╡реНрд╣рд░рд╕рд╣ рд╕реНрдерд╛рдирд┐рдХ рдорд╢реАрдирд╡рд░ рд▓реЙрдЧ рдЗрди рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкрд░реНрдпрд╛рдп:
login = client.login_as_root()
рдпрд╛ рдкрджреНрдзрддреАрд╕рд╛рдареА рдлрдХреНрдд рджреЛрди рдкрд░реНрдпрд╛рдпреА рдорд╛рдкрджрдВрдб рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд:
domain=None, payload=None
рдЖрдгрд┐ рд╢реЗрд╡рдЯреА API рд╕реНрд╡рддрдГрд▓рд╛ рдХреЙрд▓ рдХрд░рддрд╛рдд
рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдкрджреНрдзрддреАрдВрджреНрд╡рд╛рд░реЗ API рдХреЙрд▓ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рджреЛрди рдкрд░реНрдпрд╛рдп рдЖрд╣реЗрдд api_call ╨╕ api_query. рдЪрд▓рд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдд рдХрд╛рдп рдлрд░рдХ рдЖрд╣реЗ рддреЗ рд╢реЛрдзреВрдпрд╛.
api_call
рд╣реА рдкрджреНрдзрдд рдХреЛрдгрддреНрдпрд╛рд╣реА рдХреЙрд▓рд╕рд╛рдареА рд▓рд╛рдЧреВ рдЖрд╣реЗ. рдЖрдореНрд╣рд╛рд▓рд╛ рдПрдкреАрдЖрдп рдХреЙрд▓рд╕рд╛рдареА рд╢реЗрд╡рдЯрдЪрд╛ рднрд╛рдЧ рдкрд╛рд╕ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рд╕ рд╡рд┐рдирдВрддреА рдореБрдЦреНрдп рднрд╛рдЧрд╛рдордзреНрдпреЗ рдкреЗрд▓реЛрдб рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдкреЗрд▓реЛрдб рд░рд┐рдХреНрдд рдЕрд╕рд▓реНрдпрд╛рд╕, рддреЗ рдЕрдЬрд┐рдмрд╛рдд рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА:
api_versions = client.api_call('show-api-versions')
рдХрдЯ рдЦрд╛рд▓реА рдпрд╛ рд╡рд┐рдирдВрддреАрд╕рд╛рдареА рдЖрдЙрдЯрдкреБрдЯ:
In [23]: api_versions
Out[23]:
APIResponse({
"data": {
"current-version": "1.6",
"supported-versions": [
"1",
"1.1",
"1.2",
"1.3",
"1.4",
"1.5",
"1.6"
]
},
"res_obj": {
"data": {
"current-version": "1.6",
"supported-versions": [
"1",
"1.1",
"1.2",
"1.3",
"1.4",
"1.5",
"1.6"
]
},
"status_code": 200
},
"status_code": 200,
"success": true
})
show_host = client.api_call('show-host', {'name' : 'h_8.8.8.8'})
рдХрдЯ рдЦрд╛рд▓реА рдпрд╛ рд╡рд┐рдирдВрддреАрд╕рд╛рдареА рдЖрдЙрдЯрдкреБрдЯ:
In [25]: show_host
Out[25]:
APIResponse({
"data": {
"color": "black",
"comments": "",
"domain": {
"domain-type": "domain",
"name": "SMC User",
"uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
},
"groups": [],
"icon": "Objects/host",
"interfaces": [],
"ipv4-address": "8.8.8.8",
"meta-info": {
"creation-time": {
"iso-8601": "2020-05-01T21:49+0300",
"posix": 1588358973517
},
"creator": "admin",
"last-modifier": "admin",
"last-modify-time": {
"iso-8601": "2020-05-01T21:49+0300",
"posix": 1588358973517
},
"lock": "unlocked",
"validation-state": "ok"
},
"name": "h_8.8.8.8",
"nat-settings": {
"auto-rule": false
},
"read-only": false,
"tags": [],
"type": "host",
"uid": "c210af07-1939-49d3-a351-953a9c471d9e"
},
"res_obj": {
"data": {
"color": "black",
"comments": "",
"domain": {
"domain-type": "domain",
"name": "SMC User",
"uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
},
"groups": [],
"icon": "Objects/host",
"interfaces": [],
"ipv4-address": "8.8.8.8",
"meta-info": {
"creation-time": {
"iso-8601": "2020-05-01T21:49+0300",
"posix": 1588358973517
},
"creator": "admin",
"last-modifier": "admin",
"last-modify-time": {
"iso-8601": "2020-05-01T21:49+0300",
"posix": 1588358973517
},
"lock": "unlocked",
"validation-state": "ok"
},
"name": "h_8.8.8.8",
"nat-settings": {
"auto-rule": false
},
"read-only": false,
"tags": [],
"type": "host",
"uid": "c210af07-1939-49d3-a351-953a9c471d9e"
},
"status_code": 200
},
"status_code": 200,
"success": true
})
api_query
рдореА рд▓рдЧреЗрдЪ рдЖрд░рдХреНрд╖рдг рдХрд░рддреЛ рдХреА рд╣реА рдкрджреНрдзрдд рдлрдХреНрдд рдЕрд╢рд╛ рдХреЙрд▓рд╕рд╛рдареА рд▓рд╛рдЧреВ рдЖрд╣реЗ рдЬреНрдпрд╛рдВрдЪреНрдпрд╛ рдЖрдЙрдЯрдкреБрдЯрдордзреНрдпреЗ рдСрдлрд╕реЗрдЯрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЖрд╣реЗ. рдЕрд╕реЗ рдЕрдиреБрдорд╛рди рддреЗрд╡реНрд╣рд╛ рдЙрджреНрднрд╡рддреЗ рдЬреЗрд╡реНрд╣рд╛ рддреНрдпрд╛рдд рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдорд╛рд╣рд┐рддреА рдЕрд╕рддреЗ рдХрд┐рдВрд╡рд╛ рдЕрд╕реВ рд╢рдХрддреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдореЕрдиреЗрдЬрдореЗрдВрдЯ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рд░реНрд╡ рд╣реЛрд╕реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдЪреНрдпрд╛ рд╕реВрдЪреАрд╕рд╛рдареА рд╣реА рд╡рд┐рдирдВрддреА рдЕрд╕реВ рд╢рдХрддреЗ. рдЕрд╢рд╛ рд╡рд┐рдирдВрддреНрдпрд╛рдВрд╕рд╛рдареА, API рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░ 50 рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдЪреА рд╕реВрдЪреА рджреЗрддреЗ (рдЖрдкрдг рдкреНрд░рддрд┐рд╕рд╛рджрд╛рдд 500 рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдЪреА рдорд░реНрдпрд╛рджрд╛ рд╡рд╛рдврд╡реВ рд╢рдХрддрд╛). рдЖрдгрд┐ рдПрдкреАрдЖрдп рд╡рд┐рдирдВрддреАрдордзреНрдпреЗ рдСрдлрд╕реЗрдЯ рдкреЕрд░рд╛рдореАрдЯрд░ рдмрджрд▓реВрди, рдорд╛рд╣рд┐рддреА рдЕрдиреЗрдХ рд╡реЗрд│рд╛ рдЦреЗрдЪреВ рдирдпреЗ рдореНрд╣рдгреВрди, рдПрдХ api_query рдкрджреНрдзрдд рдЖрд╣реЗ рдЬреА рд╣реЗ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ. рдпрд╛ рдкрджреНрдзрддреАрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдХреЙрд▓рдЪреА рдЙрджрд╛рд╣рд░рдгреЗ: рд╢реЛ-рд╕рддреНрд░, рд╢реЛ-рд╣реЛрд╕реНрдЯ, рд╢реЛ-рдиреЗрдЯрд╡рд░реНрдХ, рд╢реЛ-рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб, рд╢реЛ-рдЧреНрд░реБрдк, рд╢реЛ-рдкрддреНрддрд╛-рд╢реНрд░реЗрдгреА, рд╢реЛ-рд╕рд┐рдВрдкрд▓-рдЧреЗрдЯрд╡реЗ, рд╢реЛ-рд╕рд┐рдВрдкрд▓-рдХреНрд▓рд╕реНрдЯрд░, рд╢реЛ-рдЕреЕрдХреНрд╕реЗрд╕-рднреВрдорд┐рдХрд╛, рд╢реЛ-рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп-рдХреНрд▓рд╛рдпрдВрдЯ, рдкреЕрдХреЗрдЬреЗрд╕ рджрд╛рдЦрд╡рд╛. рдЦрд░рдВ рддрд░, рдЖрдореНрд╣реА рдпрд╛ API рдХреЙрд▓реНрд╕рдЪреНрдпрд╛ рдирд╛рд╡рд╛рдд рдЕрдиреЗрдХрд╡рдЪрдиреА рд╢рдмреНрдж рдкрд╛рд╣рддреЛ, рддреНрдпрд╛рдореБрд│реЗ рд╣реЗ рдХреЙрд▓ рд╣рд╛рддрд╛рд│рдгреЗ рд╕реЛрдкреЗ рд╣реЛрдИрд▓ api_query
show_hosts = client.api_query('show-hosts')
рдХрдЯ рдЦрд╛рд▓реА рдпрд╛ рд╡рд┐рдирдВрддреАрд╕рд╛рдареА рдЖрдЙрдЯрдкреБрдЯ:
In [21]: show_hosts
Out[21]:
APIResponse({
"data": [
{
"domain": {
"domain-type": "domain",
"name": "SMC User",
"uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
},
"ipv4-address": "192.168.47.1",
"name": "h_192.168.47.1",
"type": "host",
"uid": "5d7d7086-d70b-4995-971a-0583b15a2bfc"
},
{
"domain": {
"domain-type": "domain",
"name": "SMC User",
"uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
},
"ipv4-address": "8.8.8.8",
"name": "h_8.8.8.8",
"type": "host",
"uid": "c210af07-1939-49d3-a351-953a9c471d9e"
}
],
"res_obj": {
"data": {
"from": 1,
"objects": [
{
"domain": {
"domain-type": "domain",
"name": "SMC User",
"uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
},
"ipv4-address": "192.168.47.1",
"name": "h_192.168.47.1",
"type": "host",
"uid": "5d7d7086-d70b-4995-971a-0583b15a2bfc"
},
{
"domain": {
"domain-type": "domain",
"name": "SMC User",
"uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
},
"ipv4-address": "8.8.8.8",
"name": "h_8.8.8.8",
"type": "host",
"uid": "c210af07-1939-49d3-a351-953a9c471d9e"
}
],
"to": 2,
"total": 2
},
"status_code": 200
},
"status_code": 200,
"success": true
})
API рдХреЙрд▓рдЪреНрдпрд╛ рдкрд░рд┐рдгрд╛рдорд╛рдВрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдд рдЖрд╣реЗ
рдпрд╛рдирдВрддрд░ рддреБрдореНрд╣реА рдХреНрд▓рд╛рд╕рдЪреЗ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдЖрдгрд┐ рдкрджреНрдзрддреА рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛ API рдкреНрд░рддрд┐рд╕рд╛рдж(рд╕рдВрджрд░реНрдн рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХрд╛рдЪреНрдпрд╛ рдЖрдд рдЖрдгрд┐ рдмрд╛рд╣реЗрд░ рджреЛрдиреНрд╣реА). рд╡рд░реНрдЧрд╛рдд API рдкреНрд░рддрд┐рд╕рд╛рдж 4 рдкрджреНрдзрддреА рдЖрдгрд┐ 5 рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЖрд╣реЗрдд; рдЖрдореНрд╣реА рд╕рд░реНрд╡рд╛рдд рдорд╣рддреНрд╡рд╛рдЪреНрдпрд╛ рдЧреЛрд╖реНрдЯреАрдВрд╡рд░ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВ.
рдпрд╢
рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛, API рдХреЙрд▓ рдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓рд╛ рдЖрдгрд┐ рдкрд░рд┐рдгрд╛рдо рдкрд░рдд рдЖрд▓рд╛ рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рдгреЗ рдЪрд╛рдВрдЧрд▓реА рдХрд▓реНрдкрдирд╛ рдЕрд╕реЗрд▓. рдпрд╛рд╕рд╛рдареА рдПрдХ рдкрджреНрдзрдд рдЖрд╣реЗ рдпрд╢:
In [49]: api_versions.success
Out[49]: True
API рдХреЙрд▓ рдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реНрдпрд╛рд╕ рд╕рддреНрдп (рдкреНрд░рддрд┐рд╕рд╛рдж рдХреЛрдб - 200) рдЖрдгрд┐ рдпрд╢рд╕реНрд╡реА рди рдЭрд╛рд▓реНрдпрд╛рд╕ рдЕрд╕рддреНрдп (рдЗрддрд░ рдХреЛрдгрддрд╛рд╣реА рдкреНрд░рддрд┐рд╕рд╛рдж рдХреЛрдб) рдкрд░рдд рдХрд░рддреЛ. рдкреНрд░рддрд┐рд╕рд╛рдж рдХреЛрдбрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рднрд┐рдиреНрди рдорд╛рд╣рд┐рддреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА API рдХреЙрд▓рдирдВрддрд░ рд▓рдЧреЗрдЪ рд╡рд╛рдкрд░рдгреЗ рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗ.
if api_ver.success:
print(api_versions.data)
else:
print(api_versions.err_message)
рд╕реНрдерд┐рддреА рдХреЛрдб
API рдХреЙрд▓ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рдкреНрд░рддрд┐рд╕рд╛рдж рдХреЛрдб рдкрд░рдд рдХрд░рддреЗ.
In [62]: api_versions.status_code
Out[62]: 400
рд╕рдВрднрд╛рд╡реНрдп рдкреНрд░рддрд┐рд╕рд╛рдж рдХреЛрдб: 200,400,401,403,404,409,500,501.
set_success_status
рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдпрд╢рд╛рдЪреНрдпрд╛ рд╕реНрдерд┐рддреАрдЪреЗ рдореВрд▓реНрдп рдмрджрд▓рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕реВ рд╢рдХрддреЗ. рддрд╛рдВрддреНрд░рд┐рдХрджреГрд╖реНрдЯреНрдпрд╛, рддреБрдореНрд╣реА рддреЗрдереЗ рдХрд╛рд╣реАрд╣реА рдареЗрд╡реВ рд╢рдХрддрд╛, рдЕрдЧрджреА рдирд┐рдпрдорд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрдЦреАрд▓. рдкрд░рдВрддреБ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рд╣реЗ рдкреЕрд░рд╛рдореАрдЯрд░ рдХрд╛рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╕реНрдерд┐рддреАрдВрдордзреНрдпреЗ рдЕрд╕рддреНрдп рд╡рд░ рд░реАрд╕реЗрдЯ рдХрд░рдгреЗ рдЖрд╣реЗ. рдЦрд╛рд▓реА, рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдХрд╛рд░реНрдп рдЪрд╛рд▓реВ рдЕрд╕рддрд╛рдирд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдХрдбреЗ рд▓рдХреНрд╖ рджреНрдпрд╛, рдкрд░рдВрддреБ рдЖрдореНрд╣реА рд╣реА рд╡рд┐рдирдВрддреА рдЕрдпрд╢рд╕реНрд╡реА рдорд╛рдиреВ (рдЖрдореНрд╣реА рдпрд╢ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рд╕реЗрдЯ рдХрд░реВ рдЦреЛрдЯреЗ, API рдХреЙрд▓ рдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓рд╛ рдЖрдгрд┐ рдХреЛрдб 200 рдкрд░рдд рдЖрд▓рд╛ рд╣реЗ рдЕрд╕реВрдирд╣реА).
for task in task_result.data["tasks"]:
if task["status"] == "failed" or task["status"] == "partially succeeded":
task_result.set_success_status(False)
break
рдкреНрд░рддрд┐рд╕рд╛рдж()
рдкреНрд░рддрд┐рд╕рд╛рдж рдкрджреНрдзрдд рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рдХреЛрдб (status_code) рдЖрдгрд┐ рдкреНрд░рддрд┐рд╕рд╛рдж рдореБрдЦреНрдп рднрд╛рдЧ (рдмреЙрдбреА) рд╕рд╣ рд╢рдмреНрджрдХреЛрд╢ рдкрд╛рд╣рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ.
In [94]: api_versions.response()
Out[94]:
{'status_code': 200,
'data': {'current-version': '1.6',
'supported-versions': ['1', '1.1', '1.2', '1.3', '1.4', '1.5', '1.6']}}
рдбреЗрдЯрд╛
рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдорд╛рд╣рд┐рддреАрд╢рд┐рд╡рд╛рдп рдлрдХреНрдд рдкреНрд░рддрд┐рд╕рд╛рджрд╛рдЪреЗ рдореБрдЦреНрдп рднрд╛рдЧ (рд╢рд░реАрд░) рдкрд╛рд╣рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ.
In [93]: api_versions.data
Out[93]:
{'current-version': '1.6',
'supported-versions': ['1', '1.1', '1.2', '1.3', '1.4', '1.5', '1.6']}
рддреНрд░реБрдЯреА_рд╕рдВрджреЗрд╢
API рд╡рд┐рдирдВрддреАрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛рдирд╛ рддреНрд░реБрдЯреА рдЖрд▓реА рддреЗрд╡реНрд╣рд╛рдЪ рд╣реА рдорд╛рд╣рд┐рддреА рдЙрдкрд▓рдмреНрдз рд╣реЛрддреЗ (рдкреНрд░рддрд┐рд╕рд╛рдж рдХреЛрдб рдирд╛рд╣реА 200). рдЙрджрд╛рд╣рд░рдг рдЖрдЙрдЯрдкреБрдЯ
In [107]: api_versions.error_message
Out[107]: 'code: generic_err_invalid_parameter_namenmessage: Unrecognized parameter [1]n'
рдЙрдкрдпреБрдХреНрдд рдЙрджрд╛рд╣рд░рдгреЗ
рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди API 1.6 рдордзреНрдпреЗ рдЬреЛрдбрд▓реЗрд▓реЗ API рдХреЙрд▓ рд╡рд╛рдкрд░рдгрд╛рд░реА рдЙрджрд╛рд╣рд░рдгреЗ рдЦрд╛рд▓реАрд▓ рдЖрд╣реЗрдд.
рдкреНрд░рдердо, рдХреЙрд▓ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд рддреЗ рдкрд╛рд╣реВ рдНрдб-рд╣реЛрд╕реНрдЯ ╨╕ рдЬреЛрдбрд╛-рдкрддреНрддрд╛-рд╢реНрд░реЗрдгреА. рд╕рдордЬрд╛ рдХреА рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╕рдмрдиреЗрдЯ 192.168.0.0/24 рдЪреЗ рд╕рд░реНрд╡ IP рдкрддреНрддреЗ рддрдпрд╛рд░ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧрддреАрд▓, рдЬреНрдпрд╛рддреАрд▓ рд╢реЗрд╡рдЯрдЪрд╛ рдСрдХреНрдЯреЗрдЯ 5 рдЖрд╣реЗ, рд╣реЛрд╕реНрдЯ рдкреНрд░рдХрд╛рд░рд╛рдЪреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореНрд╣рдгреВрди, рдЖрдгрд┐ рдЗрддрд░ рд╕рд░реНрд╡ IP рдкрддреНрддреЗ рдЕреЕрдбреНрд░реЗрд╕ рд░реЗрдВрдЬ рдкреНрд░рдХрд╛рд░рд╛рдЪреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореНрд╣рдгреВрди рд▓рд┐рд╣рд╛. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рд╕рдмрдиреЗрдЯ рдкрддреНрддрд╛ рдЖрдгрд┐ рдкреНрд░рд╕рд╛рд░рдг рдкрддреНрддрд╛ рд╡рдЧрд│рд╛.
рддрд░, рдЦрд╛рд▓реА рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрд╣реЗ рдЬреА рдпрд╛ рд╕рдорд╕реНрдпреЗрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рддреЗ рдЖрдгрд┐ рд╣реЛрд╕реНрдЯ рдкреНрд░рдХрд╛рд░рд╛рдЪреЗ 50 рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЖрдгрд┐ рдЕреЕрдбреНрд░реЗрд╕ рд░реЗрдВрдЬ рдкреНрд░рдХрд╛рд░рд╛рдЪреЗ 51 рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рддрдпрд╛рд░ рдХрд░рддреЗ. рд╕рдорд╕реНрдпреЗрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, 101 API рдХреЙрд▓ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗрдд (рдЕрдВрддрд┐рдо рдкреНрд░рдХрд╛рд╢рди рдХреЙрд▓ рдореЛрдЬрдд рдирд╛рд╣реА). рддрд╕реЗрдЪ, timeit рдореЙрдбреНрдпреВрд▓ рд╡рд╛рдкрд░реВрди, рдмрджрд▓ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрдИрдкрд░реНрдпрдВрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд▓рд╛рдЧрдгрд╛рд░рд╛ рд╡реЗрд│ рдЖрдореНрд╣реА рдореЛрдЬрддреЛ.
рдНрдб-рд╣реЛрд╕реНрдЯ рдЖрдгрд┐ рдНрдб-рдкрддреНрддрд╛-рд╢реНрд░реЗрдгреА рд╡рд╛рдкрд░реВрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ
import timeit
from cpapi import APIClient, APIClientArgs
start = timeit.default_timer()
first_ip = 1
last_ip = 4
client_args = APIClientArgs(server="192.168.47.240")
with APIClient(client_args) as client:
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
for ip in range(5,255,5):
add_host = client.api_call("add-host", {"name" : f"h_192.168.0.{ip}", "ip-address": f'192.168.0.{ip}'})
while last_ip < 255:
add_range = client.api_call("add-address-range", {"name": f"r_192.168.0.{first_ip}-{last_ip}", "ip-address-first": f"192.168.0.{first_ip}", "ip-address-last": f"192.168.0.{last_ip}"})
first_ip+=5
last_ip+=5
stop = timeit.default_timer()
publish = client.api_call("publish")
print(f'Time to execute batch request: {stop - start} seconds')
рдорд╛рдЭреНрдпрд╛ рдкреНрд░рдпреЛрдЧрд╢рд╛рд│реЗрдЪреНрдпрд╛ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд, рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реАрд▓ рд▓реЛрдбрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди, рдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд▓рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА 30 рддреЗ 50 рд╕реЗрдХрдВрдж рд▓рд╛рдЧрддрд╛рдд.
рдЖрддрд╛ API рдХреЙрд▓ рд╡рд╛рдкрд░реВрди рд╣реАрдЪ рд╕рдорд╕реНрдпрд╛ рдХрд╢реА рд╕реЛрдбрд╡рд╛рдпрдЪреА рддреЗ рдкрд╛рд╣реВ рдЕреЕрдб-рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕-рдмреЕрдЪ, рд╕рдорд░реНрдерди рдЬреНрдпрд╛рд╕рд╛рдареА API рдЖрд╡реГрддреНрддреА 1.6 рдордзреНрдпреЗ рдЬреЛрдбрд▓реЗ рд╣реЛрддреЗ. рд╣рд╛ рдХреЙрд▓ рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдХрд╛ API рд╡рд┐рдирдВрддреАрд╡рд░ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдЕрдиреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ. рд╢рд┐рд╡рд╛рдп, рдпрд╛ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рд╡рд╕реНрддреВ рдЕрд╕реВ рд╢рдХрддрд╛рдд (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╣реЛрд╕реНрдЯ, рд╕рдмрдиреЗрдЯ рдЖрдгрд┐ рдкрддреНрддрд╛ рд╢реНрд░реЗрдгреА). рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рдЖрдордЪреЗ рдХрд╛рд░реНрдп рдПрдХрд╛ API рдХреЙрд▓рдЪреНрдпрд╛ рдЪреМрдХрдЯреАрдд рд╕реЛрдбрд╡рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.
рдЕреЕрдб-рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕-рдмреЕрдЪ рд╡рд╛рдкрд░реВрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ
import timeit
from cpapi import APIClient, APIClientArgs
start = timeit.default_timer()
client_args = APIClientArgs(server="192.168.47.240")
objects_list_ip = []
objects_list_range = []
for ip in range(5,255,5):
data = {"name": f'h_192.168.0.{ip}', "ip-address": f'192.168.0.{ip}'}
objects_list_ip.append(data)
first_ip = 1
last_ip = 4
while last_ip < 255:
data = {"name": f"r_192.168.0.{first_ip}-{last_ip}", "ip-address-first": f"192.168.0.{first_ip}", "ip-address-last": f"192.168.0.{last_ip}"}
objects_list_range.append(data)
first_ip+=5
last_ip+=5
data_for_batch = {
"objects" : [ {
"type" : "host",
"list" : objects_list_ip
}, {
"type" : "address-range",
"list" : objects_list_range
}]
}
with APIClient(client_args) as client:
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
add_objects_batch = client.api_call("add-objects-batch", data_for_batch)
stop = timeit.default_timer()
publish = client.api_call("publish")
print(f'Time to execute batch request: {stop - start} seconds')
рдЖрдгрд┐ рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд╛рдЭреНрдпрд╛ рд▓реЕрдм рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рдЪрд╛рд▓рд╡рд╛рдпрд▓рд╛ 3 рддреЗ 7 рд╕реЗрдХрдВрдж рд▓рд╛рдЧрддрд╛рдд, рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реАрд▓ рд▓реЛрдбрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди. рдореНрд╣рдгрдЬреЗрдЪ, рд╕рд░рд╛рд╕рд░реА, 101 API рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рд╡рд░, рдмреЕрдЪ рдкреНрд░рдХрд╛рд░ рдХреЙрд▓ 10 рдкрдЯ рд╡реЗрдЧрд╛рдиреЗ рдЪрд╛рд▓рддреЛ. рдореЛрдареНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдиреЗ рд╡рд╕реНрддреВрдВрд╡рд░ рдлрд░рдХ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рд╣реЛрдИрд▓.
рдЖрддрд╛ рд╕реЛрдмрдд рдХрд╕реЗ рдХрд╛рдо рдХрд░рд╛рдпрдЪреЗ рддреЗ рдкрд╛рд╣реВ рд╕реЗрдЯ-рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕-рдмреЕрдЪ. рдпрд╛ API рдХреЙрд▓рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди, рдЖрдореНрд╣реА рдХреЛрдгрддреЗрд╣реА рдкреЕрд░рд╛рдореАрдЯрд░ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдмрджрд▓реВ рд╢рдХрддреЛ. рдЖрдзреАрдЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рд╡рд░реВрди рдкрддреНрддреНрдпрд╛рдВрдЪрд╛ рдкрд╣рд┐рд▓рд╛ рдЕрд░реНрдзрд╛ рднрд╛рдЧ (.резреирек рд╣реЛрд╕реНрдЯреНрд╕рдкрд░реНрдпрдВрдд рдЖрдгрд┐ рд░реЗрдВрдЬрд╣реА) рдХрд▓рд░ рд╕рд┐рдПрдирд╛ рд╡рд░ рд╕реЗрдЯ рдХрд░реВ рдЖрдгрд┐ рдкрддреНрддреНрдпрд╛рдВрдЪреНрдпрд╛ рджреБрд╕рд▒реНрдпрд╛ рдЕрд░реНрдзреНрдпрд╛ рднрд╛рдЧрд╛рд▓рд╛ рд░рдВрдЧ рдЦрд╛рдХреА рджреЗрдК.
рдорд╛рдЧреАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдордзреНрдпреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡рд╕реНрддреВрдВрдЪрд╛ рд░рдВрдЧ рдмрджрд▓рдгреЗ
from cpapi import APIClient, APIClientArgs
client_args = APIClientArgs(server="192.168.47.240")
objects_list_ip_first = []
objects_list_range_first = []
objects_list_ip_second = []
objects_list_range_second = []
for ip in range(5,125,5):
data = {"name": f'h_192.168.0.{ip}', "color": "sienna"}
objects_list_ip_first.append(data)
for ip in range(125,255,5):
data = {"name": f'h_192.168.0.{ip}', "color": "khaki"}
objects_list_ip_second.append(data)
first_ip = 1
last_ip = 4
while last_ip < 125:
data = {"name": f"r_192.168.0.{first_ip}-{last_ip}", "color": "sienna"}
objects_list_range_first.append(data)
first_ip+=5
last_ip+=5
while last_ip < 255:
data = {"name": f"r_192.168.0.{first_ip}-{last_ip}", "color": "khaki"}
objects_list_range_second.append(data)
first_ip+=5
last_ip+=5
data_for_batch_first = {
"objects" : [ {
"type" : "host",
"list" : objects_list_ip_first
}, {
"type" : "address-range",
"list" : objects_list_range_first
}]
}
data_for_batch_second = {
"objects" : [ {
"type" : "host",
"list" : objects_list_ip_second
}, {
"type" : "address-range",
"list" : objects_list_range_second
}]
}
with APIClient(client_args) as client:
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
set_objects_batch_first = client.api_call("set-objects-batch", data_for_batch_first)
set_objects_batch_second = client.api_call("set-objects-batch", data_for_batch_second)
publish = client.api_call("publish")
рддреБрдореНрд╣реА рд╡рд╛рдкрд░реВрди рдПрдХрд╛ API рдХреЙрд▓рдордзреНтАНрдпреЗ рдПрдХрд╛рдзрд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣рдЯрд╡реВ рд╢рдХрддрд╛ рдбрд┐рд▓реАрдЯ-рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕-рдмреЕрдЪ. рдЖрддрд╛ рдХреЛрдбрдЪреЗ рдЙрджрд╛рд╣рд░рдг рдкрд╛рд╣реВ рдЬреЗ рдкреВрд░реНрд╡реА рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ рд╕рд░реНрд╡ рд╣реЛрд╕реНрдЯ рд╣рдЯрд╡рддреЗ рдЕреЕрдб-рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕-рдмреЕрдЪ.
рдбрд┐рд▓реАрдЯ-рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕-рдмреЕрдЪ рд╡рд╛рдкрд░реВрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╣рдЯрд╡рдгреЗ
from cpapi import APIClient, APIClientArgs
client_args = APIClientArgs(server="192.168.47.240")
objects_list_ip = []
objects_list_range = []
for ip in range(5,255,5):
data = {"name": f'h_192.168.0.{ip}'}
objects_list_ip.append(data)
first_ip = 1
last_ip = 4
while last_ip < 255:
data = {"name": f"r_192.168.0.{first_ip}-{last_ip}"}
objects_list_range.append(data)
first_ip+=5
last_ip+=5
data_for_batch = {
"objects" : [ {
"type" : "host",
"list" : objects_list_ip
}, {
"type" : "address-range",
"list" : objects_list_range
}]
}
with APIClient(client_args) as client:
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
delete_objects_batch = client.api_call("delete-objects-batch", data_for_batch)
publish = client.api_call("publish")
print(delete_objects_batch.data)
рдЪреЗрдХ рдкреЙрдЗрдВрдЯ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░рдЪреНрдпрд╛ рдирд╡реАрди рд░рд┐рд▓реАрдЭрдордзреНрдпреЗ рджрд┐рд╕рдгрд╛рд░реА рд╕рд░реНрд╡ рдлрдВрдХреНрд╢рдиреНрд╕ рддрд╛рдмрдбрддреЛрдм API рдХреЙрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛рдд. рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, R80.40 рдордзреНрдпреЗ рд░рд┐рд╡реНрд╣рд░реНрдЯ рдЯреВ рд░рд┐рд╡реНрд╣рд┐рдЬрди рдЖрдгрд┐ рд╕реНрдорд╛рд░реНрдЯ рдЯрд╛рд╕реНрдХ рд╕рд╛рд░рдЦреА тАЬрд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗтАЭ рджрд┐рд╕реВ рд▓рд╛рдЧрд▓реА рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рд╕рдВрдмрдВрдзрд┐рдд API рдХреЙрд▓ рддреНрд╡рд░рд┐рдд рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ. рд╢рд┐рд╡рд╛рдп, рд▓реЗрдЧрд╕реА рдХрдиреНрд╕реЛрд▓рд╡рд░реВрди рдпреБрдирд┐рдлрд╛рдЗрдб рдкреЙрд▓рд┐рд╕реА рдореЛрдбрдордзреНрдпреЗ рдЬрд╛рддрд╛рдирд╛ рд╕рд░реНрд╡ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рджреЗрдЦреАрд▓ API рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдЖрд╡реГрддреНрддреА R80.40 рдордзреАрд▓ рджреАрд░реНрдШ-рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдЕрдкрдбреЗрдЯ рдореНрд╣рдгрдЬреЗ HTTPS рддрдкрд╛рд╕рдгреА рдзреЛрд░рдгрд╛рдЪреА рд▓реЗрдЧрд╕реА рдореЛрдбрдордзреВрди рдпреБрдирд┐рдлрд╛рдЗрдб рдкреЙрд▓рд┐рд╕реА рдореЛрдбрдордзреНрдпреЗ рд╣рд▓рд╡рдгреЗ рдЖрдгрд┐ рдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрд▓рд╛ рддреНрд╡рд░рд┐рдд API рдХреЙрд▓ рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗ. рд╣реЗ рдХреЛрдбрдЪреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЖрд╣реЗ рдЬреЗ HTTPS рддрдкрд╛рд╕рдгреА рдзреЛрд░рдгрд╛рдЪреНрдпрд╛ рд╢реАрд░реНрд╖ рд╕реНрдерд╛рдирд╛рд╡рд░ рдПрдХ рдирд┐рдпрдо рдЬреЛрдбрддреЗ рдЬреЗ рддрдкрд╛рд╕рдгреАрдордзреВрди 3 рд╢реНрд░реЗрдгреА рд╡рдЧрд│рддреЗ (рдЖрд░реЛрдЧреНрдп, рд╡рд┐рддреНрдд, рд╕рд░рдХрд╛рд░реА рд╕реЗрд╡рд╛), рдЬреНрдпрд╛рдВрдирд╛ рдЕрдиреЗрдХ рджреЗрд╢рд╛рдВрдордзреАрд▓ рдХрд╛рдпрджреНрдпрд╛рдиреБрд╕рд╛рд░ рддрдкрд╛рд╕рдгреА рдХрд░рдгреНрдпрд╛рд╕ рдордирд╛рдИ рдЖрд╣реЗ.
HTTPS рддрдкрд╛рд╕рдгреА рдзреЛрд░рдгрд╛рдордзреНрдпреЗ рдирд┐рдпрдо рдЬреЛрдбрд╛
from cpapi import APIClient, APIClientArgs
client_args = APIClientArgs(server="192.168.47.240")
data = {
"layer" : "Default Layer",
"position" : "top",
"name" : "Legal Requirements",
"action": "bypass",
"site-category": ["Health", "Government / Military", "Financial Services"]
}
with APIClient(client_args) as client:
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
add_https_rule = client.api_call("add-https-rule", data)
publish = client.api_call("publish")
рдЪреЗрдХ рдкреЙрдЗрдВрдЯ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд╛рд▓рд╡рдгреЗ
рд╕рд░реНрд╡ рдХрд╛рд╣реА рддрд╕реЗрдЪ рдЖрд╣реЗ
рд╕рд┐рдХреНрдпреБрд░рд┐рдЯреА рдЪреЗрдХрдЕрдкрдЪреНрдпрд╛ рджреНрд░реБрдд рд╕реЗрдЯрдЕрдкрд╕рд╛рдареА рд╕реНрдХреНрд░рд┐рдкреНрдЯ
from __future__ import print_function
import getpass
import sys, os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from cpapi import APIClient, APIClientArgs
def main():
with APIClient() as client:
# if client.check_fingerprint() is False:
# print("Could not get the server's fingerprint - Check connectivity with the server.")
# exit(1)
login_res = client.login_as_root()
if login_res.success is False:
print("Login failed:n{}".format(login_res.error_message))
exit(1)
gw_name = raw_input("Enter the gateway name:")
gw_ip = raw_input("Enter the gateway IP address:")
if sys.stdin.isatty():
sic = getpass.getpass("Enter one-time password for the gateway(SIC): ")
else:
print("Attention! Your password will be shown on the screen!")
sic = raw_input("Enter one-time password for the gateway(SIC): ")
version = raw_input("Enter the gateway version(like RXX.YY):")
add_gw = client.api_call("add-simple-gateway", {'name' : gw_name, 'ipv4-address' : gw_ip, 'one-time-password' : sic, 'version': version.capitalize(), 'application-control' : 'true', 'url-filtering' : 'true', 'ips' : 'true', 'anti-bot' : 'true', 'anti-virus' : 'true', 'threat-emulation' : 'true'})
if add_gw.success and add_gw.data['sic-state'] != "communicating":
print("Secure connection with the gateway hasn't established!")
exit(1)
elif add_gw.success:
print("The gateway was added successfully.")
gw_uid = add_gw.data['uid']
gw_name = add_gw.data['name']
else:
print("Failed to add the gateway - {}".format(add_gw.error_message))
exit(1)
change_policy = client.api_call("set-access-layer", {"name" : "Network", "applications-and-url-filtering": "true", "content-awareness": "true"})
if change_policy.success:
print("The policy has been changed successfully")
else:
print("Failed to change the policy- {}".format(change_policy.error_message))
change_rule = client.api_call("set-access-rule", {"name" : "Cleanup rule", "layer" : "Network", "action": "Accept", "track": {"type": "Detailed Log", "accounting": "true"}})
if change_rule.success:
print("The cleanup rule has been changed successfully")
else:
print("Failed to change the cleanup rule- {}".format(change_rule.error_message))
# publish the result
publish_res = client.api_call("publish", {})
if publish_res.success:
print("The changes were published successfully.")
else:
print("Failed to publish the changes - {}".format(install_tp_policy.error_message))
install_access_policy = client.api_call("install-policy", {"policy-package" : "Standard", "access" : 'true', "threat-prevention" : 'false', "targets" : gw_uid})
if install_access_policy.success:
print("The access policy has been installed")
else:
print("Failed to install access policy - {}".format(install_tp_policy.error_message))
install_tp_policy = client.api_call("install-policy", {"policy-package" : "Standard", "access" : 'false', "threat-prevention" : 'true', "targets" : gw_uid})
if install_tp_policy.success:
print("The threat prevention policy has been installed")
else:
print("Failed to install threat prevention policy - {}".format(install_tp_policy.error_message))
# add passwords and passphrases to dictionary
with open('additional_pass.conf') as f:
line_num = 0
for line in f:
line_num += 1
add_password_dictionary = client.api_call("run-script", {"script-name" : "Add passwords and passphrases", "script" : "printf "{}" >> $FWDIR/conf/additional_pass.conf".format(line), "targets" : gw_name})
if add_password_dictionary.success:
print("The password dictionary line {} was added successfully".format(line_num))
else:
print("Failed to add the dictionary - {}".format(add_password_dictionary.error_message))
main()
рдЕрддрд┐рд░рд┐рдХреНрдд_pass.conf рд╢рдмреНрджрдХреЛрд╖рд╛рд╕рд╣ рдЙрджрд╛рд╣рд░рдг рдлрд╛рдЗрд▓
{
"passwords" : ["malware","malicious","infected","Infected"],
"phrases" : ["password","Password","Pass","pass","codigo","key","pwd","╨┐╨░╤А╨╛╨╗╤М","╨Я╨░╤А╨╛╨╗╤М","╨Ъ╨╗╤О╤З","╨║╨╗╤О╤З","╤И╨╕╤Д╤А","╨и╨╕╤Д╤А"]
}
рдирд┐рд╖реНрдХрд░реНрд╖
рд╣рд╛ рд▓реЗрдЦ рдХрд╛рдорд╛рдЪреНрдпрд╛ рдХреЗрд╡рд│ рдореВрд▓рднреВрдд рд╢рдХреНрдпрддрд╛рдВрдЪрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рддреЛ рдкрд╛рдпрдерди рдПрд╕рдбреАрдХреЗ рдЖрдгрд┐ рдореЙрдбреНрдпреВрд▓ cpapi(рддреБрдореНрд╣реА рдЕрдВрджрд╛рдЬ рд▓рд╛рд╡рд▓рд╛ рдЕрд╕реЗрд▓, рд╣реЗ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рд╕рдорд╛рдирд╛рд░реНрдереА рд╢рдмреНрдж рдЖрд╣реЗрдд), рдЖрдгрд┐ рдпрд╛ рдореЙрдбреНрдпреВрд▓рдордзреАрд▓ рдХреЛрдбрдЪрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░реВрди рддреБрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛рд╕реЛрдмрдд рдХрд╛рдо рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЖрдгрдЦреА рд╕рдВрдзреА рд╕рд╛рдкрдбрддреАрд▓. рд╣реЗ рд╢рдХреНрдп рдЖрд╣реЗ рдХреА рддреБрдореНрд╣рд╛рд▓рд╛ рддреЗ рддреБрдордЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рд╡рд░реНрдЧ, рдХрд╛рд░реНрдпреЗ, рдкрджреНрдзрддреА рдЖрдгрд┐ рдЪрд▓рд╛рдВрд╕рд╣ рдкреВрд░рдХ рдХрд░рд╛рдпрдЪреЗ рдЕрд╕реЗрд▓. рддреБрдореНрд╣реА рддреБрдордЪреЗ рдХрд╛рдо рдиреЗрд╣рдореА рд╢реЗрдЕрд░ рдХрд░реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рд╡рд┐рднрд╛рдЧрд╛рддреАрд▓ рдЪреЗрдХ рдкреЙрдЗрдВрдЯрд╕рд╛рдареА рдЗрддрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╛рд╣реВ рд╢рдХрддрд╛
рдЖрдирдВрджреА рдХреЛрдбрд┐рдВрдЧ рдЖрдгрд┐ рд╢реЗрд╡рдЯрдкрд░реНрдпрдВрдд рд╡рд╛рдЪрд▓реНрдпрд╛рдмрджреНрджрд▓ рдзрдиреНрдпрд╡рд╛рдж!
рд╕реНрддреНрд░реЛрдд: www.habr.com