рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреА рдкреВрд░реА рд╢рдХреНрддрд┐ рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдЬрдм рдПрдкреАрдЖрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЕрднреА рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ рдкрд╛рдпрдерди рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХрд┐рдЯ (рдЗрд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдкрд╛рдпрдерди рдПрд╕рдбреАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред рдЪреЗрдХ рдкреНрд╡рд╛рдЗрдВрдЯ рдкреНрд░рдмрдВрдзрди рдПрдкреАрдЖрдИ, рдкрд░рдиреНрддреБ рд╕рдлрд▓рддрд╛ рдирд╣реАрдВ рдорд┐рд▓реАред рдпрд╣ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рди рдЙрддреНрд╕рд╛рд╣реА рд▓реЛрдЧреЛрдВ рдХреЗ рдЬреАрд╡рди рдХреЛ рдХрд╛рдлреА рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдкрд╛рдпрдерди рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХрд╛рдлреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рд╣рд╛рд╕рд┐рд▓ рдХреА рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рднрд░рдиреЗ рдФрд░ рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИред
рдЪреЗрдХ рдкреНрд╡рд╛рдЗрдВрдЯ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдПрдкреАрдЖрдИ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдлрд┐рд▓рд╣рд╛рд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рд╣реИрдВ:
рдЪреЗрдХ рдкреНрд╡рд╛рдЗрдВрдЯ рдкреНрд░рдмрдВрдзрди рдПрдкреАрдЖрдИ (рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг 1.6) - рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ (рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдЧреЗрдЯрд╡реЗ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛)рдЪреЗрдХ рдкреНрд╡рд╛рдЗрдВрдЯ рдЬреАрдПрдЖрдИрдП рдПрдкреАрдЖрдИ (рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг 1.4) - рд╕реБрд░рдХреНрд╖рд╛ рдЧреЗрдЯрд╡реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЦрддрд░рд╛ рдирд┐рд╡рд╛рд░рдг рдПрдкреАрдЖрдИ 1.0 - рдЪреЗрдХ рдкреНрд╡рд╛рдЗрдВрдЯ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛рдкрд╣рдЪрд╛рди рдЬрд╛рдЧрд░реВрдХрддрд╛ рдПрдкреАрдЖрдИ - рдЧреЗрдЯрд╡реЗ рдкрд░ рдЖрдЗрдбреЗрдВрдЯрд┐рдЯреА рдЕрд╡реЗрдпрд░рдиреЗрд╕ рдмреНрд▓реЗрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рдмрдВрдзрди рдкреЛрд░реНрдЯрд▓ рдПрдкреАрдЖрдИ тАФ рдПрд╕рдПрдордмреА рдЧреЗрдЯрд╡реЗ рдкреНрд░рдмрдВрдзрди рдкреЛрд░реНрдЯрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ (рдПрд╕рдПрдордмреА рдЧреЗрдЯрд╡реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА )рдЖрдИрдУрдЯреА рдПрдкреАрдЖрдИ - IoT рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛рдХреНрд▓рд╛рдЙрдбрдЧрд╛рд░реНрдб рдХрдиреЗрдХреНрдЯ рдПрдкреАрдЖрдИ - рдХреЗ рд╕рд╛рде рдХрд╛рдордХреНрд▓рд╛рдЙрдбрдЧрд╛рд░реНрдб рдХрдиреЗрдХреНрдЯ (рдПрд╕рдбреА-рдбрдмреНрд▓реНрдпреВрдПрдПрди рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╛рдзрд╛рди)рдбреЛрдо9 рдПрдкреАрдЖрдИ - рдХреЗ рд╕рд╛рде рдХрд╛рдордбреЛрдореЗ9
рдкрд╛рдпрдерди рдПрд╕рдбреАрдХреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рдкреНрд░рдмрдВрдзрди рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдЧреИрдпрд╛ рдПрдкреАрдЖрдИ. рд╣рдо рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд░реНрдЧреЛрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЪрд░реЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред
рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд╛рдкрдирд╛
рдореЙрдбреНрдпреВрд▓ cpapi рд╕реЗ рдЬрд▓реНрджреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛
рд╕реАрдкреАрдПрдкреАрдЖрдИ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ cpapi рдХрдо рд╕реЗ рдХрдо рджреЛ рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдЧ:
рдПрдкреАрдЖрдИрдХреНрд▓рд╛рдЗрдВрдЯ ╨╕ APIClientArgs
from cpapi import APIClient, APIClientArgs
рд╡рд░реНрдЧ APIClientArgs рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдПрдкреАрдЖрдИрдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
рдХрдиреЗрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг
рдПрдкреАрдЖрдИ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ APIClientArgs. рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЗрд╕рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддреЗ рд╕рдордп, рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
client_args = APIClientArgs()
рд▓реЗрдХрд┐рди рддреГрддреАрдп-рдкрдХреНрд╖ рд╣реЛрд╕реНрдЯ рдкрд░ рдЪрд▓рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ (рдЬрд┐рд╕реЗ рдкреНрд░рдмрдВрдзрди рд╕рд░реНрд╡рд░ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХрд╛ рдХрдо рд╕реЗ рдХрдо рдЖрдИрдкреА рдкрддрд╛ рдпрд╛ рд╣реЛрд╕реНрдЯ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рд╕рд░реНрд╡рд░ рдХрдиреЗрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдмрдВрдзрди рд╕рд░реНрд╡рд░ рдХрд╛ рдЖрдИрдкреА рдкрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред
client_args = APIClientArgs(server='192.168.47.241')
рдЖрдЗрдП рдЙрди рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рдЙрдирдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
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 рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдЬрд┐рди рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╡реЗ рдЪреЗрдХ рдкреНрд╡рд╛рдЗрдВрдЯ рдкреНрд░рд╢рд╛рд╕рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣рдЬ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдПрдкреАрдЖрдИрдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛ рд░рд╣рд╛ рд╣реИ
рд╡рд░реНрдЧ рдПрдкреАрдЖрдИрдХреНрд▓рд╛рдЗрдВрдЯ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рд╣реИред рдПрдкреАрдЖрдИрдХреНрд▓рд╛рдЗрдВрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХрдиреЗрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ рдЬреЛ рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рдереЗред
with APIClient(client_args) as client:
рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдкрд░ рд▓реЙрдЧрд┐рди рдХреЙрд▓ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ рдпрд╣ рд▓реЙрдЧрдЖрдЙрдЯ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд▓реЙрдЧрдЖрдЙрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
client = APIClient(clieng_args)
рдХрдиреЗрдХреНрд╢рди рдкрд░реАрдХреНрд╖рдг
рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдХрд┐ рдХрдиреЗрдХреНрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ check_fingerprint. рдпрджрд┐ рд╕рд░реНрд╡рд░ рдПрдкреАрдЖрдИ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЗ рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рдХреЗ рд▓рд┐рдП sha1 рд╣реИрд╢ рд░рд╛рд╢рд┐ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рд╡рд┐рдзрд┐ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреА рд╣реИ рдЭреВрдард╛), рддреЛ рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдХрдиреЗрдХреНрд╢рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХрдиреЗрдХреНрд╢рди рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реА рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ):
if client.check_fingerprint() is False:
print("Could not get the server's fingerprint - Check connectivity with the server.")
exit(1)
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрдХреНрд╖рд╛ рдПрдкреАрдЖрдИрдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рддреНрдпреЗрдХ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ (рддрд░реАрдХреЗ рдПрдкреАрдЖрдИ_рдХреЙрд▓ ╨╕ api_query, рд╣рдо рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ) рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдкрд░ sha1 рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░ред рд▓реЗрдХрд┐рди рдЕрдЧрд░, рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЗ sha1 рдлрд╝рд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╕рдордп, рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ (рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЕрдЬреНрдЮрд╛рдд рд╣реИ рдпрд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рддреЛ рд╡рд┐рдзрд┐ check_fingerprint рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рдиреЗ/рдмрджрд▓рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред APIClientArgs рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдЪреЗрдХ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХреЗрд╡рд▓ рддрднреА рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдЬрдм 127.0.0.1 рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдкрд░ рд╣реА рдЪрд▓рддреА рд╣реИ) - рдЕрд╕реБрд░рдХреНрд╖рд┐рдд_рдСрдЯреЛ_рд╕реНрд╡реАрдХрд╛рд░ (рдкрд╣рд▓реЗ "рдХрдиреЗрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛" рдореЗрдВ APIClientArgs рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рджреЗрдЦреЗрдВ)ред
client_args = APIClientArgs(unsafe_auto_accept=True)
рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ
╨г рдПрдкреАрдЖрдИрдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо 3 рддрд░реАрдХреЗ рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдЕрд░реНрде рд╕рдордЭрддрд╛ рд╣реИ рд╕рд┐рдб(рд╕рддреНрд░-рдЖрдИрдбреА), рдЬреЛ рд╣реЗрдбрд░ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреЗ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╣реЗрдбрд░ рдореЗрдВ рдирд╛рдо рд╣реИ рдПрдХреНрд╕-рд╕реАрдПрдЪрдХреЗрдкреА-рд╕рд┐рдб), рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЖрдЧреЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд▓реЙрдЧрд┐рди рд╡рд┐рдзрд┐
рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк (рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб 1q2w3e рдХреЛ рд╕реНрдерд┐рддрд┐рдЧрдд рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ):
login = client.login('admin', '1q2w3e')
рдЕрддрд┐рд░рд┐рдХреНрдд рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рднреА рд▓реЙрдЧрд┐рди рд╡рд┐рдзрд┐ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ; рдпрд╣рд╛рдВ рдЙрдирдХреЗ рдирд╛рдо рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╣реИрдВ:
continue_last_session=False, domain=None, read_only=False, payload=None
рд╡рд┐рдзрд┐ рд▓реЙрдЧрд┐рди_рд╡рд┐рде_рдПрдкреАрдЖрдИ_рдХреА
рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк (рдкреНрд░рдмрдВрдзрди рд╕рдВрд╕реНрдХрд░рдг R80.40/рдкреНрд░рдмрдВрдзрди рдПрдкреАрдЖрдИ v1.6 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ рд╕рдорд░реНрдерд┐рдд, "3TsbPJ8ZKjaJGvFyoFqHFA==" рдпрд╣ рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдкреНрд░рдмрдВрдзрди рд╕рд░реНрд╡рд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рдорд╛рди рд╣реИ):
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
рд╡рд┐рдзрд┐ рдореЗрдВ рд▓реЙрдЧрд┐рди_рд╡рд┐рде_рдПрдкреАрдЖрдИ_рдХреА рд╡рд┐рдзрд┐ рдХреЗ рд╕рдорд╛рди рд╣реА рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рд▓реЙрдЧ рдЗрди.
рд▓реЙрдЧрд┐рди_рдЕрд╕_рд░реВрдЯ рд╡рд┐рдзрд┐
рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдореЗрдВ рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк:
login = client.login_as_root()
рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рджреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:
domain=None, payload=None
рдФрд░ рдЕрдВрдд рдореЗрдВ рдПрдкреАрдЖрдИ рдЦреБрдж рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдПрдкреАрдЖрдИ_рдХреЙрд▓ ╨╕ api_query. рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдЗрдирдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИред
рдПрдкреАрдЖрдИ_рдХреЙрд▓
рдпрд╣ рд╡рд┐рдзрд┐ рдХрд┐рд╕реА рднреА рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реИ. рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рд╣рдореЗрдВ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдореЗрдВ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдФрд░ рдкреЗрд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рднрд╛рдЧ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдкреЗрд▓реЛрдб рдЦрд╛рд▓реА рд╣реИ, рддреЛ рдЗрд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
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
рдореИрдВ рддреБрд░рдВрдд рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░ рджреВрдВ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рдЙрди рдХреЙрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рд╣реИ рдЬрд┐рдирдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдСрдлрд╕реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИред рдРрд╕рд╛ рдЕрдиреБрдорд╛рди рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЗрд╕рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ рдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкреНрд░рдмрдВрдзрди рд╕рд░реНрд╡рд░ рдкрд░ рд╕рднреА рдирд┐рд░реНрдорд┐рдд рд╣реЛрд╕реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП, рдПрдкреАрдЖрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 50 рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдПрдХ рд╕реВрдЪреА рд▓реМрдЯрд╛рддрд╛ рд╣реИ (рдЖрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕реАрдорд╛ рдХреЛ 500 рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ)ред рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХрдИ рдмрд╛рд░ рди рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдСрдлрд╕реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдмрджрд▓рддреЗ рд╣реБрдП, рдПрдХ рдПрдкреАрдЖрдИ_рдХреНрд╡реЗрд░реА рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдпрд╣ рдХрд╛рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд░рддреА рд╣реИред рдХреЙрд▓ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдЬрд╣рд╛рдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рд╢реЛ-рд╕рддреНрд░, рд╢реЛ-рд╣реЛрд╕реНрдЯ, рд╢реЛ-рдиреЗрдЯрд╡рд░реНрдХ, рд╢реЛ-рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб, рд╢реЛ-рд╕рдореВрд╣, рд╢реЛ-рдПрдбреНрд░реЗрд╕-рд░реЗрдВрдЬ, рд╢реЛ-рд╕рд┐рдВрдкрд▓-рдЧреЗрдЯрд╡реЗ, рд╢реЛ-рд╕рд┐рдВрдкрд▓-рдХреНрд▓рд╕реНрдЯрд░, рд╢реЛ-рдПрдХреНрд╕реЗрд╕-рднреВрдорд┐рдХрд╛рдПрдВ, рд╢реЛ-рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп-рдЧреНрд░рд╛рд╣рдХ, рд╢реЛ-рдкреИрдХреЗрдЬ. рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдЗрди рдПрдкреАрдЖрдИ рдХреЙрд▓реЛрдВ рдХреЗ рдирд╛рдо рдореЗрдВ рдмрд╣реБрд╡рдЪрди рд╢рдмреНрдж рджреЗрдЦрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрди рдХреЙрд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ 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
})
рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛
рдЗрд╕рдХреЗ рдмрд╛рдж рдЖрдк рдХреНрд▓рд╛рд╕ рдХреЗ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдФрд░ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ APIResponse(рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХ рдХреЗ рдЕрдВрджрд░ рдФрд░ рдмрд╛рд╣рд░ рджреЛрдиреЛрдВ)ред рдХрдХреНрд╖рд╛ рдореЗрдВ APIResponse 4 рд╡рд┐рдзрд┐рдпрд╛рдБ рдФрд░ 5 рдЪрд░ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИрдВ; рд╣рдо рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗред
рд╕рдлрд▓рддрд╛
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛ рдХрд┐ рдПрдкреАрдЖрдИ рдХреЙрд▓ рд╕рдлрд▓ рд░рд╣реА рдФрд░ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рд╕рдлрд▓рддрд╛:
In [49]: api_versions.success
Out[49]: True
рдпрджрд┐ рдПрдкреАрдЖрдИ рдХреЙрд▓ рд╕рдлрд▓ рд░рд╣реА (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб - 200) рддреЛ рд╕рд╣реА рд╣реИ рдФрд░ рдпрджрд┐ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реИ рддреЛ рдЧрд▓рдд рд╣реИ (рдХреЛрдИ рдЕрдиреНрдп рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб)ред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
if api_ver.success:
print(api_versions.data)
else:
print(api_versions.err_message)
рд╕реНрдерд┐рддрд┐ рдХрд╛ рдХреЛрдб
рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рд▓реМрдЯрд╛рддрд╛ рд╣реИред
In [62]: api_versions.status_code
Out[62]: 400
рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб: 200,400,401,403,404,409,500,501.
рд╕реЗрдЯ_рд╕рдлрд▓рддрд╛_рд╕реНрдерд┐рддрд┐
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдлрд▓рддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдорд╛рди рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рдЖрдк рд╡рд╣рд╛рдВ рдХреБрдЫ рднреА рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рднреАред рд▓реЗрдХрд┐рди рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЧрд▓рдд рдкрд░ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдиреАрдЪреЗ, рдЙрджрд╛рд╣рд░рдг рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдЬрдм рдкреНрд░рдмрдВрдзрди рд╕рд░реНрд╡рд░ рдкрд░ рдХрд╛рд░реНрдп рдЪрд▓ рд░рд╣реЗ рд╣реЛрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ рдЕрд╕рдлрд▓ рдорд╛рдиреЗрдВрдЧреЗ (рд╣рдо рд╕рдлрд▓рддрд╛ рдЪрд░ рдХреЛ рдпрд╣рд╛рдВ рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗ) рдЭреВрдард╛, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдПрдкреАрдЖрдИ рдХреЙрд▓ рд╕рдлрд▓ рд░рд╣реА рдФрд░ рдХреЛрдб 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']}
рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢
рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдХреЗрд╡рд▓ рддрднреА рдЙрдкрд▓рдмреНрдз рд╣реЛрддреА рд╣реИ рдЬрдм рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдз (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб) рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдирд╣реАрдВ 200). рдЙрджрд╛рд╣рд░рдг рдЖрдЙрдЯрдкреБрдЯ
In [107]: api_versions.error_message
Out[107]: 'code: generic_err_invalid_parameter_namenmessage: Unrecognized parameter [1]n'
рдЙрдкрдпреЛрдЧреА рдЙрджрд╛рд╣рд░рдг
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬреЛ рдкреНрд░рдмрдВрдзрди рдПрдкреАрдЖрдИ 1.6 рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреЙрд▓ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ рдРрдб-рд╣реЛрд╕реНрдЯ ╨╕ рдРрдб-рдПрдбреНрд░реЗрд╕-рд░реЗрдВрдЬ. рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдореЗрдВ рд╕рдмрдиреЗрдЯ 192.168.0.0/24 рдХреЗ рд╕рднреА рдЖрдИрдкреА рдкрддреЗ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрдВрддрд┐рдо рдСрдХреНрдЯреЗрдЯ 5 рд╣реИ, рд╣реЛрд╕реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдФрд░ рдЕрдиреНрдп рд╕рднреА рдЖрдИрдкреА рдкрддреЗ рдХреЛ рдПрдбреНрд░реЗрд╕ рд░реЗрдВрдЬ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕рдмрдиреЗрдЯ рдкрддрд╛ рдФрд░ рдкреНрд░рд╕рд╛рд░рдг рдкрддрд╛ рдЫреЛрдбрд╝ рджреЗрдВред
рддреЛ, рдиреАрдЪреЗ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреА рд╣реИ рдФрд░ рд╣реЛрд╕реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА 50 рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдПрдбреНрд░реЗрд╕ рд░реЗрдВрдЬ рдкреНрд░рдХрд╛рд░ рдХреА 51 рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреА рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 101 рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЕрдВрддрд┐рдо рдкреНрд░рдХрд╛рд╢рди рдХреЙрд▓ рдХреА рдЧрд┐рдирддреА рдирд╣реАрдВ)ред рд╕рд╛рде рд╣реА, рдЯрд╛рдЗрдордЗрдЯ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрдиреЗ рддрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред
рдРрдб-рд╣реЛрд╕реНрдЯ рдФрд░ рдРрдб-рдПрдбреНрд░реЗрд╕-рд░реЗрдВрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ
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 рд╕реЗрдХрдВрдб рдХрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред
рдЕрдм рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП рдРрдб-рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕-рдмреИрдЪ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдПрдкреАрдЖрдИ рд╕рдВрд╕реНрдХрд░рдг 1.6 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдХреЙрд▓ рдЖрдкрдХреЛ рдПрдХ рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдПрдХ рд╕рд╛рде рдХрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпреЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣реЛрд╕реНрдЯ, рд╕рдмрдиреЗрдЯ рдФрд░ рдПрдбреНрд░реЗрд╕ рд░реЗрдВрдЬ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рдПрдХ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдРрдб-рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕-рдмреИрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ
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 рдПрдкреАрдЖрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдПрдХ рдмреИрдЪ рдЯрд╛рдЗрдк рдХреЙрд▓ 10 рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рдЪрд▓рддреА рд╣реИред рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдЕрдВрддрд░ рдФрд░ рднреА рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реЛрдЧрд╛ред
рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ рд╕реЗрдЯ-рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕-рдмреИрдЪ. рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдХрд┐рд╕реА рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдкрддреЛрдВ рдХреЗ рдкрд╣рд▓реЗ рдЖрдзреЗ рднрд╛рдЧ (.124 рд╣реЛрд╕реНрдЯ рддрдХ, рдФрд░ рд░реЗрдВрдЬ рднреА) рдХреЛ рд╕рд┐рдПрдирд╛ рд░рдВрдЧ рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ, рдФрд░ рдкрддреЛрдВ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдХреЛ рдЦрд╛рдХреА рд░рдВрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред
рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд░рдВрдЧ рдмрджрд▓рдирд╛
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")
рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдбрд┐рд▓реАрдЯ-рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕-рдмреИрдЪ. рдЕрдм рдЖрдЗрдП рдПрдХ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдЬреЛ рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП рд╕рднреА рд╣реЛрд╕реНрдЯ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдРрдб-рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕-рдмреИрдЪ.
рдбрд┐рд▓реАрдЯ-рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕-рдмреИрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╣рдЯрд╛рдирд╛
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)
рдЪреЗрдХ рдкреНрд╡рд╛рдЗрдВрдЯ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рдирдП рд░рд┐рд▓реАрдЬ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рддреБрд░рдВрдд рдПрдкреАрдЖрдИ рдХреЙрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, R80.40 рдореЗрдВ рд░рд┐рд╡рд░реНрдЯ рдЯреВ рд░рд┐рд╡реАрдЬрди рдФрд░ рд╕реНрдорд╛рд░реНрдЯ рдЯрд╛рд╕реНрдХ рдЬреИрд╕реА "рд╕реБрд╡рд┐рдзрд╛рдПрдБ" рджрд┐рдЦрд╛рдИ рджреАрдВ, рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдПрдкреАрдЖрдИ рдХреЙрд▓ рддреБрд░рдВрдд рдЙрдирдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХреА рдЧрдИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓реАрдЧреЗрд╕реА рдХрдВрд╕реЛрд▓ рд╕реЗ рдпреВрдирд┐рдлрд╛рдЗрдб рдкреЙрд▓рд┐рд╕реА рдореЛрдб рдореЗрдВ рдЬрд╛рдиреЗ рдкрд░ рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдПрдВ рдПрдкреАрдЖрдИ рд╕рдорд░реНрдерди рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓реЗрддреА рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕рдВрд╕реНрдХрд░рдг R80.40 рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдЕрдкрдбреЗрдЯ HTTPS рдирд┐рд░реАрдХреНрд╖рдг рдиреАрддрд┐ рдХреЛ рд▓реАрдЧреЗрд╕реА рдореЛрдб рд╕реЗ рдпреВрдирд┐рдлрд╛рдЗрдб рдкреЙрд▓рд┐рд╕реА рдореЛрдб рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдерд╛, рдФрд░ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рддреБрд░рдВрдд рдПрдкреАрдЖрдИ рдХреЙрд▓ рдкреНрд░рд╛рдкреНрдд рд╣реБрдИред рдпрд╣рд╛рдВ рдХреЛрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ 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()
рдкрд╛рд╕рд╡рд░реНрдб рдбрд┐рдХреНрд╢рдирд░реА рдПрдбрд┐рд╢рдирд▓_рдкрд╛рд╕.рдХреЙрдиреНрдлрд╝ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг рдлрд╝рд╛рдЗрд▓
{
"passwords" : ["malware","malicious","infected","Infected"],
"phrases" : ["password","Password","Pass","pass","codigo","key","pwd","╨┐╨░╤А╨╛╨╗╤М","╨Я╨░╤А╨╛╨╗╤М","╨Ъ╨╗╤О╤З","╨║╨╗╤О╤З","╤И╨╕╤Д╤А","╨и╨╕╤Д╤А"]
}
рдирд┐рд╖реНрдХрд░реНрд╖
рдпрд╣ рдЖрд▓реЗрдЦ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдп рдХреА рдмреБрдирд┐рдпрд╛рджреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдкрд╛рдпрдерди рдПрд╕рдбреАрдХреЗ рдФрд░ рдореЙрдбреНрдпреВрд▓ cpapi(рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реЛрдЧрд╛, рдпреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╛рдирд╛рд░реНрдердХ рд╢рдмреНрдж рд╣реИрдВ), рдФрд░ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреЛрдб рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдХреЗ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдФрд░ рднреА рдЕрдзрд┐рдХ рдЕрд╡рд╕рд░ рдЦреЛрдЬреЗрдВрдЧреЗред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ, рдХрд╛рд░реНрдпреЛрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЪрд░ рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдЖрдк рд╣рдореЗрд╢рд╛ рдЕрдкрдирд╛ рдХрд╛рдо рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЪреЗрдХ рдкреНрд╡рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ
рд╣реИрдкреНрдкреА рдХреЛрдбрд┐рдВрдЧ рдФрд░ рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рд╕реНрд░реЛрдд: www.habr.com