Π¦Π΅Π»ΠΎΡΠ½Π°ΡΠ° ΠΌΠΎΡ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ° ΡΠΎ API ΡΠ΅ ΠΎΡΠΊΡΠΈΠ²Π° ΠΊΠΎΠ³Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π°Π΅Π΄Π½ΠΎ ΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈΠΎΡ ΠΊΠΎΠ΄, ΠΊΠΎΠ³Π° ΡΡΠ°Π½ΡΠ²Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠΊΠΎ Π΄Π° ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π°Ρ API Π±Π°ΡΠ°ΡΠ° ΠΈ Π°Π»Π°ΡΠΊΠΈ Π·Π° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅ Π½Π° API. Π‘Π΅ΠΏΠ°ΠΊ, ΡΓ¨ ΡΡΡΠ΅ ΠΎΡΡΠ°Π½ΡΠ²Π° Π½Π΅Π·Π°Π±Π΅Π»Π΅ΠΆΠ»ΠΈΠ²ΠΎ ΠΠΎΠΌΠΏΠ»Π΅Ρ Π·Π° ΡΠ°Π·Π²ΠΎΡ Π½Π° ΡΠΎΡΡΠ²Π΅Ρ Python (Π²ΠΎ Π½Π°ΡΠ°ΠΌΠΎΡΠ½ΠΈΠΎΡ ΡΠ΅ΠΊΡΡ ΠΊΠ°ΠΊΠΎ Python SDK) Π·Π° Check Point Management API, Π½ΠΎ Π·Π°Π»ΡΠ΄Π½ΠΎ. Π’ΠΎΠ° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π³ΠΎ ΠΏΠΎΠ΅Π΄Π½ΠΎΡΡΠ°Π²ΡΠ²Π° ΠΆΠΈΠ²ΠΎΡΠΎΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΈ Π΅Π½ΡΡΠ·ΠΈΡΠ°ΡΡΠΈΡΠ΅ Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡΠ°. Python Π²ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΠ΅ Π·Π΄ΠΎΠ±ΠΈ ΡΠΎ ΠΎΠ³ΡΠΎΠΌΠ½Π° ΠΏΠΎΠΏΡΠ»Π°ΡΠ½ΠΎΡΡ ΠΈ ΡΠ΅ΡΠΈΠ² Π΄Π° ΡΠ° ΠΏΠΎΠΏΠΎΠ»Π½Π°ΠΌ ΠΏΡΠ°Π·Π½ΠΈΠ½Π°ΡΠ° ΠΈ Π΄Π° Π³ΠΈ ΠΏΡΠ΅Π³Π»Π΅Π΄Π°ΠΌ Π³Π»Π°Π²Π½ΠΈΡΠ΅ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ. . ΠΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ° ΡΠ»ΡΠΆΠΈ ΠΊΠ°ΠΊΠΎ ΠΎΠ΄Π»ΠΈΡΠ΅Π½ Π΄ΠΎΠ΄Π°ΡΠΎΠΊ Π½Π° Π΄ΡΡΠ³Π° ΡΡΠ°ΡΠΈΡΠ° Π·Π° Π₯Π°Π±ΡΠ΅ . ΠΠ΅ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΏΠΈΡΡΠ²Π°ΠΌΠ΅ ΡΠΊΡΠΈΠΏΡΠΈ ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° Python SDK ΠΈ ΡΠ΅ ΡΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎΠ΄Π΅ΡΠ°Π»Π½ΠΎ Π½ΠΎΠ²Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ API Π²ΠΎ Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° 1.6 (ΠΏΠΎΠ΄Π΄ΡΠΆΠ°Π½Π° ΠΏΠΎΡΠ½ΡΠ²Π°ΡΡΠΈ ΠΎΠ΄ R80.40). ΠΠ° Π΄Π° ΡΠ° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΡΡΠ°ΡΠΈΡΠ°ΡΠ°, ΡΠ΅ Π²ΠΈ ΡΡΠ΅Π±Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΎ Π·Π½Π°Π΅ΡΠ΅ Π·Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ API ΠΈ Python.
Check Point Π°ΠΊΡΠΈΠ²Π½ΠΎ Π³ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π° API ΠΈ Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΡ ΡΠ΅ ΠΎΠ±ΡΠ°Π²Π΅Π½ΠΈ ΡΠ»Π΅Π΄Π½ΠΈΠ²Π΅:
- β ΡΠ°Π±ΠΎΡΠ° ΡΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈΠΎΡ ΡΠ΅ΡΠ²Π΅Ρ ΠΏΡΠ΅ΠΊΡ API (ΠΈ ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ ΡΠΊΡΠΈΠΏΡΠΈ Π½Π° ΠΏΠΎΡΡΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π½ΠΈ ΠΎΠ΄ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈΠΎΡ ΡΠ΅ΡΠ²Π΅Ρ)
- β ΡΠ°Π±ΠΎΡΠ° ΡΠΎ Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΠ½ΠΈ ΠΏΠΎΡΡΠΈ
- β ΡΠ°Π±ΠΎΡΠ° ΡΠΎ ΠΏΠ΅ΡΠΎΠΊ Π²ΠΎ ΠΎΠ±Π»Π°ΠΊΠΎΡ Check Point
- β ΡΠ°Π±ΠΎΡΠ° ΡΠΎ Identity Awareness blade Π½Π° ΠΏΠΎΡΡΠΈΡΠ΅
- β ΡΠ°Π±ΠΎΡΠ° ΡΠΎ ΠΏΠΎΡΡΠ°Π»ΠΎΡ Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΏΠΎΡΡΠ°ΡΠ° SMB ()
- β ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ° ΡΠΎ IoT ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈ
- - ΡΠ°Π±ΠΎΡΠΈ ΡΠΎ (SD-WAN Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅)
- - ΡΠ°Π±ΠΎΡΠΈ ΡΠΎ
Python SDK ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ° ΡΠ°ΠΌΠΎ ΡΠΎ ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ API ΠΈ Gaia API. ΠΠ΅ Π³ΠΈ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π½Π°ΡΠ²Π°ΠΆΠ½ΠΈΡΠ΅ ΠΊΠ»Π°ΡΠΈ, ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π²ΠΎ ΠΎΠ²ΠΎΡ ΠΌΠΎΠ΄ΡΠ».

ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΎΡ
ΠΠΎΠ΄ΡΠ» cpapi Π±ΡΠ·ΠΎ ΠΈ Π»Π΅ΡΠ½ΠΎ ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ΠΎΠ΄ ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° ΠΏΠΈΠΏΠΊΠ°. ΠΠ΅ΡΠ°Π»Π½ΠΈ ΡΠΏΠ°ΡΡΡΠ²Π° Π·Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ° ΡΠ΅ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ Π²ΠΎ . ΠΠ²ΠΎΡ ΠΌΠΎΠ΄ΡΠ» Π΅ ββΠΏΡΠΈΠ»Π°Π³ΠΎΠ΄Π΅Π½ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΡΠΎ Python Π²Π΅ΡΠ·ΠΈΠΈ 2.7 ΠΈ 3.7. ΠΠΎ ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ°, ΡΠ΅ Π±ΠΈΠ΄Π°Ρ Π΄Π°Π΄Π΅Π½ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° Python 3.7. Π‘Π΅ΠΏΠ°ΠΊ, Python SDK ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΠ΄ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈ ΡΠΎΡΠΊΠΈ (ΠΠ°ΠΌΠ΅ΡΠ½ΠΎ ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅), Π½ΠΎ ΡΠΈΠ΅ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π°Π°Ρ ΡΠ°ΠΌΠΎ Python 2.7, ΡΠ°ΠΊΠ° ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΎΡ Π΄Π΅Π» ΡΠ΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ ΠΊΠΎΠ΄ Π·Π° Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° 2.7. ΠΠ΅Π΄Π½Π°Ρ ΠΏΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΎΡ, ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΡΠ²Π°ΠΌ Π΄Π° Π³ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈΡΠ΅ Π²ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ_ΠΏΠ°ΡΡΠΎΠ½2 ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ_ΠΏΠ°ΡΡΠΎΠ½3.
Getting Started
ΠΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈΠΌΠ΅ ΡΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΎΡ cpapi, ΡΡΠ΅Π±Π° Π΄Π° ΡΠ²Π΅Π·Π΅ΠΌΠ΅ ΠΎΠ΄ ΠΌΠΎΠ΄ΡΠ»ΠΎΡ cpapi Π½Π°ΡΠΌΠ°Π»ΠΊΡ Π΄Π²Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ ΠΊΠ»Π°ΡΠΈ:
APIClient ΠΈ APIClientArgs
from cpapi import APIClient, APIClientArgs
ΠΠ»Π°ΡΠ° APIClientArgs Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ΅Π½ Π·Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π·Π° ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ ΡΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ API ΠΈ ΠΊΠ»Π°ΡΠ°ΡΠ° APIClient Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ΅Π½ Π·Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ°ΡΠ° ΡΠΎ API.
ΠΠ΄ΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π·Π° ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅
ΠΠ° Π΄Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π·Π° ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ ΡΠΎ API, ΡΡΠ΅Π±Π° Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΊ ΠΎΠ΄ ΠΊΠ»Π°ΡΠ°ΡΠ° APIClientArgs. ΠΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ, Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΡΠ΅ ΠΏΡΠ΅Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΠΈ ΠΏΡΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΠΊΡΠΈΠΏΡΠ°ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈΠΎΡ ΡΠ΅ΡΠ²Π΅Ρ, ΡΠΈΠ΅ Π½Π΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠΈΡΠ°Π°Ρ.
client_args = APIClientArgs()ΠΠΎ, ΠΊΠΎΠ³Π° ΡΠ°Π±ΠΎΡΠΈ Π½Π° Ρ ΠΎΡΡ ΠΎΠ΄ ΡΡΠ΅ΡΠ° ΡΡΡΠ°Π½Π°, ΡΡΠ΅Π±Π° Π΄Π° ΡΠ° Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ Π±Π°ΡΠ΅ΠΌ IP Π°Π΄ΡΠ΅ΡΠ°ΡΠ° ΠΈΠ»ΠΈ ΠΈΠΌΠ΅ΡΠΎ Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ API (ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΠΏΠΎΠ·Π½Π°Ρ ΠΊΠ°ΠΊΠΎ ΡΠ΅ΡΠ²Π΅Ρ Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅). ΠΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΡ ΠΏΠΎΠ΄ΠΎΠ»Ρ, Π³ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΠΌΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ Π·Π° ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ ΠΈ ΠΌΡ ΡΠ° Π΄ΠΎΠ΄Π΅Π»ΡΠ²Π°ΠΌΠ΅ IP Π°Π΄ΡΠ΅ΡΠ°ΡΠ° Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΠΊΠ°ΠΊΠΎ Π½ΠΈΠ·Π°.
client_args = APIClientArgs(server='192.168.47.241')ΠΡΠ΄Π΅ Π΄Π° Π³ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΡΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΠΈ Π½ΠΈΠ²Π½ΠΈΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ ΡΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ API:
ΠΡΠ³ΡΠΌΠ΅Π½ΡΠΈ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΡ __init__ ΠΎΠ΄ ΠΊΠ»Π°ΡΠ°ΡΠ° APIClientArgs
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 ΡΠ΅ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΈ Π·Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΈΡΠ΅ Π½Π° Check Point ΠΈ Π½Π΅ Π±Π°ΡΠ°Π°Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ.
ΠΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ ΠΏΡΠ΅ΠΊΡ APIClient ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡΠ°Π»Π΅Π½ ΠΌΠ΅Π½Π°ΡΠ΅Ρ
ΠΠ»Π°ΡΠ° APIClient ΠΠ°ΡΠ·Π³ΠΎΠ΄Π½ΠΈΠΎΡ Π½Π°ΡΠΈΠ½ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π΅ ΠΏΡΠ΅ΠΊΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡΠ°Π»Π΅Π½ ΠΌΠ΅Π½Π°ΡΠ΅Ρ. Π‘Γ¨ ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π½Π΅ΡΠ΅ Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠ΄ ΠΊΠ»Π°ΡΠ°ΡΠ° APIClient ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π·Π° ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ ΡΡΠΎ Π±Π΅Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ Π²ΠΎ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΈΠΎΡ ΡΠ΅ΠΊΠΎΡ.
with APIClient(client_args) as client:
Π£ΠΏΡΠ°Π²ΡΠ²Π°ΡΠΎΡ ΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π½Π΅ΠΌΠ° Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ Π΄Π° ΡΠΏΠ°ΡΠΈ ΠΏΠΎΠ²ΠΈΠΊ Π·Π° Π½Π°ΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π΄ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ API, Π½ΠΎ ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΏΠΎΠ²ΠΈΠΊ Π·Π° ΠΎΠ΄ΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΠΊΠΎΠ³Π° ΡΠ΅ ΠΈΠ·Π»Π΅Π·Π΅ΡΠ΅ ΠΎΠ΄ Π½Π΅Π³ΠΎ. ΠΠΊΠΎ ΠΏΠΎΡΠ°Π΄ΠΈ Π½Π΅ΠΊΠΎΡΠ° ΠΏΡΠΈΡΠΈΠ½Π° Π½Π΅ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΠΎΠ΄ΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΠΏΠΎ Π·Π°Π²ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΡΠΎ ΠΏΠΎΠ²ΠΈΡΠΈΡΠ΅ Π½Π° API, ΡΡΠ΅Π±Π° Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈΡΠ΅ Π±Π΅Π· Π΄Π° Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡΠ°Π»Π½ΠΈΠΎΡ ΠΌΠ΅Π½Π°ΡΠ΅Ρ:
client = APIClient(clieng_args)Π’Π΅ΡΡ Π·Π° ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅
ΠΠ°ΡΠ»Π΅ΡΠ΅Π½ Π½Π°ΡΠΈΠ½ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ Π΄Π°Π»ΠΈ Π²ΡΡΠΊΠ°ΡΠ° Π³ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ²Π° Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°_ΠΎΡΠΏΠ΅ΡΠ°ΡΠΎΠΊ ΠΎΠ΄ ΠΏΡΡΡ. ΠΠΊΠΎ ΠΏΠΎΡΠ²ΡΠ΄Π°ΡΠ° Π½Π° sha1 Ρ Π°Ρ Π·Π±ΠΈΡΠΎΡ Π·Π° ΠΎΡΠΏΠ΅ΡΠ°ΡΠΎΠΊΠΎΡ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ API Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ Π½Π΅ ΡΡΠΏΠ΅Π΅ (ΠΌΠ΅ΡΠΎΠ΄ΠΎΡ ΡΠ΅ Π²ΡΠ°ΡΠΈ ΠΠ°ΠΆΠ½ΠΈ), ΡΠΎΠ³Π°Ρ ΠΎΠ²Π° ΠΎΠ±ΠΈΡΠ½ΠΎ Π΅ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Π½ΠΎ ΠΎΠ΄ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠΎ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ΡΠΎ ΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° Π³ΠΎ Π·Π°ΠΏΡΠ΅ΠΌΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° (ΠΈΠ»ΠΈ Π΄Π° ΠΌΡ Π΄Π°Π΄Π΅ΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎΡΡ Π½Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ Π΄Π° Π³ΠΈ ΠΏΠΎΠΏΡΠ°Π²ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π·Π° Π²ΡΡΠΊΠ°ΡΠ°):
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, ΡΠ΅ Π·Π±ΠΎΡΡΠ²Π°ΠΌΠ΅ Π·Π° Π½ΠΈΠ² ΠΌΠ°Π»ΠΊΡ ΠΏΠΎΠ½Π°ΡΠ°ΠΌΡ) sha1 ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ Π·Π° ΠΎΡΠΏΠ΅ΡΠ°ΡΠΎΠΊ ΠΎΠ΄ ΠΏΡΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ API. ΠΠΎ, Π°ΠΊΠΎ, ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΎΡΠΏΠ΅ΡΠ°ΡΠΎΠΊΠΎΡ sha1 Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ API, ΡΠ΅ ΠΎΡΠΊΡΠΈΠ΅ Π³ΡΠ΅ΡΠΊΠ° (ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π΅ Π½Π΅ΠΏΠΎΠ·Π½Π°Ρ ΠΈΠ»ΠΈ Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅Ρ), ΠΌΠ΅ΡΠΎΠ΄ΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°_ΠΎΡΠΏΠ΅ΡΠ°ΡΠΎΠΊ ΠΎΠ΄ ΠΏΡΡΡ ΡΠ΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ ΠΌΠΎΠΆΠ½ΠΎΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ Π΄Π° Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅/ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° ΡΠΎΠ° Π½Π° Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π°. ΠΠ²Π°Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΌΠΎΠΆΠ΅ ΡΠ΅Π»ΠΎΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠΈ (Π½ΠΎ ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΠ° ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ ΡΠΊΡΠΈΠΏΡΠΈΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Π°Ρ Π½Π° ΡΠ°ΠΌΠΈΠΎΡ API-ΡΠ΅ΡΠ²Π΅Ρ, ΠΊΠΎΠ³Π° ΡΠ΅ ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅ ΡΠΎ 127.0.0.1), ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΡ APIClientArgs - unsafe_auto_accept (Π²ΠΈΠ΄Π΅ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° APIClientArgs ΠΏΠΎΡΠ°Π½ΠΎ Π²ΠΎ βΠΠ΅ΡΠΈΠ½ΠΈΡΠ°ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π·Π° ΠΏΠΎΠ²ΡΠ·ΡΠ²Π°ΡΠ΅β).
client_args = APIClientArgs(unsafe_auto_accept=True)ΠΠ°ΡΠ°Π²Π΅ΡΠ΅ ΡΠ΅ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ API
Π£ APIClient ΠΈΠΌΠ° Π΄ΡΡΠΈ 3 ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π·Π° Π½Π°ΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ API ΠΈ ΡΠ΅ΠΊΠΎΡ ΠΎΠ΄ Π½ΠΈΠ² Π³ΠΎ ΡΠ°Π·Π±ΠΈΡΠ° Π·Π½Π°ΡΠ΅ΡΠ΅ΡΠΎ Π‘ΠΈΠ΄(sesion-id), ΠΊΠΎΡ Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΠΎ ΡΠ΅ΠΊΠΎΡ ΡΠ»Π΅Π΄Π΅Π½ ΠΏΠΎΠ²ΠΈΠΊ API Π²ΠΎ Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΡΠΎ (ΠΈΠΌΠ΅ΡΠΎ Π²ΠΎ Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΡΠΎ Π½Π° ΠΎΠ²ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ Π΅ Π₯-ΡΠΊΠΏ-ΡΠΈΠ΄), ΡΠ°ΠΊΠ° ΡΡΠΎ Π½Π΅ΠΌΠ° ΠΏΠΎΡΡΠ΅Π±Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ Π΄Π° ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π° ΠΎΠ²ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ.
ΠΌΠ΅ΡΠΎΠ΄ Π·Π° Π½Π°ΡΠ°Π²Π°
ΠΠΏΡΠΈΡΠ° ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° Π½Π°ΡΠ°Π²Π° ΠΈ Π»ΠΎΠ·ΠΈΠ½ΠΊΠ° (Π²ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΡ, ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΎΡΠΎ ΠΈΠΌΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ ΠΈ Π»ΠΎΠ·ΠΈΠ½ΠΊΠ°ΡΠ° 1q2w3e ΡΠ΅ ΠΏΡΠ΅Π½Π΅ΡΠ΅Π½ΠΈ ΠΊΠ°ΠΊΠΎ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ):
login = client.login('admin', '1q2w3e') ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΡΠ΅ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ Π²ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΡ Π·Π° Π½Π°ΡΠ°Π²ΡΠ²Π°ΡΠ΅, ΡΡΠΊΠ° ΡΠ΅ Π½ΠΈΠ²Π½ΠΈΡΠ΅ ΠΈΠΌΠΈΡΠ° ΠΈ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ:
continue_last_session=False, domain=None, read_only=False, payload=NoneΠΠ°ΡΠ°Π²Π°_ΡΠΎ_Π°ΠΏΠΈ_ΠΊΠ»ΡΡ ΠΌΠ΅ΡΠΎΠ΄
ΠΠΏΡΠΈΡΠ° ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° 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 ΠΈ Π½ΠΎΡΠΈΠ²ΠΎΡΡΠ° Π²ΠΎ ΡΠ΅Π»ΠΎΡΠΎ Π½Π° Π±Π°ΡΠ°ΡΠ΅ΡΠΎ Π΄ΠΎΠΊΠΎΠ»ΠΊΡ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ. ΠΠΊΠΎ ΡΠΎΠ²Π°ΡΠΎΡ Π΅ ΠΏΡΠ°Π·Π΅Π½, ΡΠΎΠ³Π°Ρ Π²ΠΎΠΎΠΏΡΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π½Π΅ΡΠ΅:
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, ΠΏΠΎΡΡΠΎΠΈ ΠΌΠ΅ΡΠΎΠ΄ 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
ΠΠΎ ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ Π½Π° ΠΊΠ»Π°ΡΠ°ΡΠ° APIresponse(ΠΈ Π²Π½Π°ΡΡΠ΅ Π²ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡΠ°Π»Π½ΠΈΠΎΡ ΠΌΠ΅Π½Π°ΡΠ΅Ρ ΠΈ Π½Π°Π΄Π²ΠΎΡ). ΠΠ° ΡΠ°ΡΠΎΡ APIresponse 4 ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΠΈ 5 ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΡΠ΅ ΠΏΡΠ΅Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ, ΡΠ΅ ΡΠ΅ Π·Π°Π΄ΡΠΆΠΈΠΌΠ΅ Π½Π° Π½Π°ΡΠ²Π°ΠΆΠ½ΠΈΡΠ΅ ΠΏΠΎΠ΄Π΅ΡΠ°Π»Π½ΠΎ.

ΡΡΠΏΠ΅Ρ
ΠΠ° ΠΏΠΎΡΠ΅ΡΠΎΠΊ, Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄ΠΎΠ±ΡΠ° ΠΈΠ΄Π΅ΡΠ° Π΄Π° ΡΠ΅ ΡΠ²Π΅ΡΠΈΡΠ΅ Π΄Π΅ΠΊΠ° ΠΏΠΎΠ²ΠΈΠΊΠΎΡ Π½Π° API Π΅ ΡΡΠΏΠ΅ΡΠ΅Π½ ΠΈ Π΄Π΅ΠΊΠ° Π²ΡΠ°ΡΠΈΠ» ΡΠ΅Π·ΡΠ»ΡΠ°Ρ. ΠΠΎΡΡΠΎΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π·Π° ΠΎΠ²Π° ΡΡΠΏΠ΅Ρ :
In [49]: api_versions.success
Out[49]: True
ΠΡΠ°ΡΠ° True Π°ΠΊΠΎ ΠΏΠΎΠ²ΠΈΠΊΠΎΡ Π½Π° API Π±ΠΈΠ» ΡΡΠΏΠ΅ΡΠ΅Π½ (ΡΠΈΡΡΠ° Π·Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ - 200) ΠΈ False Π°ΠΊΠΎ Π½Π΅ Π΅ ΡΡΠΏΠ΅ΡΠ΅Π½ (ΠΊΠΎΡ Π±ΠΈΠ»ΠΎ Π΄ΡΡΠ³ ΠΊΠΎΠ΄ Π·Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ). Π£Π΄ΠΎΠ±Π½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²Π΅Π΄Π½Π°Ρ ΠΏΠΎ ΠΏΠΎΠ²ΠΈΠΊΠΎΡ Π½Π° 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.
ΠΏΠΎΡΡΠ°Π²ΠΈ_ΡΡΠ°ΡΡΡ_ΡΡΠΏΠ΅Ρ
ΠΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ, ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π° ΡΡΠ°ΡΡΡΠΎΡ Π½Π° ΡΡΠΏΠ΅Ρ . Π’Π΅Ρ Π½ΠΈΡΠΊΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ°Π²ΠΈΡΠ΅ ΡΡΠΎ Π±ΠΈΠ»ΠΎ, Π΄ΡΡΠΈ ΠΈ ΠΎΠ±ΠΈΡΠ½Π° Π½ΠΈΠ·Π°. ΠΠΎ, Π²ΠΈΡΡΠΈΠ½ΡΠΊΠΈ ΠΏΡΠΈΠΌΠ΅Ρ Π±ΠΈ Π±ΠΈΠ» ΡΠ΅ΡΠ΅ΡΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° ΠΎΠ²ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ Π½Π° ΠΠ΅ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ΄ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ ΠΏΡΠΈΠ΄ΡΡΠΆΠ½ΠΈ ΡΡΠ»ΠΎΠ²ΠΈ. ΠΠΎΠ΄ΠΎΠ»Ρ, ΠΎΠ±ΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠΎΡ ΠΊΠΎΠ³Π° ΠΈΠΌΠ° Π·Π°Π΄Π°ΡΠΈ ΡΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Π°Ρ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅, Π½ΠΎ ΠΎΠ²Π° Π±Π°ΡΠ°ΡΠ΅ ΡΠ΅ Π³ΠΎ ΡΠΌΠ΅ΡΠ°ΠΌΠ΅ Π·Π° Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΎ (ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π·Π° ΡΡΠΏΠ΅Ρ ΡΠ΅ ΡΠ° ΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠ΅ Π½Π° ΠΠ°ΠΆΠ½ΠΈ, ΠΈ ΠΏΠΎΠΊΡΠ°Ρ ΡΠ°ΠΊΡΠΎΡ ΡΡΠΎ ΠΏΠΎΠ²ΠΈΠΊΠΎΡ Π½Π° 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 ΠΊΠΎΠΈ Π±Π΅Π° Π΄ΠΎΠ΄Π°Π΄Π΅Π½ΠΈ Π²ΠΎ Management API 1.6.
ΠΡΠ²ΠΎ, Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π°Ρ ΠΏΠΎΠ²ΠΈΡΠΈΡΠ΅ Π΄ΠΎΠ΄Π°Π΄Π΅ΡΠ΅-Π΄ΠΎΠΌΠ°ΡΠΈΠ½ ΠΈ Π΄ΠΎΠ΄Π°Π΄Π΅ΡΠ΅-Π°Π΄ΡΠ΅ΡΠ°-ΠΎΠΏΡΠ΅Π³. ΠΠ° ΡΠ΅ΡΠ΅ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΈ ΠΊΡΠ΅ΠΈΡΠ°ΠΌΠ΅ ΡΠΈΡΠ΅ IP Π°Π΄ΡΠ΅ΡΠΈ Π½Π° ΠΏΠΎΠ΄ΠΌΡΠ΅ΠΆΠ°ΡΠ° 192.168.0.0/24, ΠΎΠ΄ ΠΊΠΎΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΎΡ ΠΎΠΊΡΠ΅Ρ Π΅ 5, ΠΊΠ°ΠΊΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΈ ΠΎΠ΄ ΡΠΈΠΏΠΎΡ Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ, ΠΈ Π΄Π° Π³ΠΈ Π½Π°ΠΏΠΈΡΠ΅ΠΌΠ΅ ΡΠΈΡΠ΅ Π΄ΡΡΠ³ΠΈ IP Π°Π΄ΡΠ΅ΡΠΈ ΠΊΠ°ΠΊΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΈ ΠΎΠ΄ ΡΠΈΠΏΠΎΡ Π½Π° ΠΎΠΏΡΠ΅Π³ΠΎΡ Π½Π° Π°Π΄ΡΠ΅ΡΠΈ. ΠΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ, ΠΈΡΠΊΠ»ΡΡΠ΅ΡΠ΅ ΡΠ° Π°Π΄ΡΠ΅ΡΠ°ΡΠ° Π½Π° ΠΏΠΎΠ΄ΠΌΡΠ΅ΠΆΠ°ΡΠ° ΠΈ Π°Π΄ΡΠ΅ΡΠ°ΡΠ° Π·Π° Π΅ΠΌΠΈΡΡΠ²Π°ΡΠ΅.
ΠΠ½Π°ΡΠΈ, ΠΏΠΎΠ΄ΠΎΠ»Ρ Π΅ ΡΠΊΡΠΈΠΏΡΠ° ΡΡΠΎ Π³ΠΎ ΡΠ΅ΡΠ°Π²Π° ΠΎΠ²ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π° 50 ΠΎΠ±ΡΠ΅ΠΊΡΠΈ ΠΎΠ΄ ΡΠΈΠΏΠΎΡ Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ ΠΈ 51 ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΠ΄ ΡΠΈΠΏΠΎΡ Π½Π° ΠΎΠΏΡΠ΅Π³ΠΎΡ Π½Π° Π°Π΄ΡΠ΅ΡΠΈ. ΠΠ° Π΄Π° ΡΠ΅ ΡΠ΅ΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΡ, ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ ΡΠ΅ 101 API ΠΏΠΎΠ²ΠΈΡΠΈ (Π½Π΅ ΡΠΌΠ΅ΡΠ°ΡΡΠΈ Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΎΡ ΠΏΠΎΠ²ΠΈΠΊ Π·Π° ΠΎΠ±ΡΠ°Π²ΡΠ²Π°ΡΠ΅). ΠΡΡΠΎ ΡΠ°ΠΊΠ°, ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΎΡ timeit, Π³ΠΎ ΠΏΡΠ΅ΡΠΌΠ΅ΡΡΠ²Π°ΠΌΠ΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΠΊΡΠΈΠΏΡΠ°ΡΠ° Π΄ΠΎΠ΄Π΅ΠΊΠ° Π½Π΅ ΡΠ΅ ΠΎΠ±ΡΠ°Π²Π°Ρ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅.
Π‘ΠΊΡΠΈΠΏΡΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ add-host ΠΈ add-address-range
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 Π΄ΠΎΠ΄Π°Π΄Π΅ΡΠ΅-ΠΎΠ±ΡΠ΅ΠΊΡΠΈ-ΡΠ΅ΡΠΈΡΠ°, ΡΠΈΡΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π±Π΅ΡΠ΅ Π΄ΠΎΠ΄Π°Π΄Π΅Π½Π° Π²ΠΎ Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° 1.6 Π½Π° API. ΠΠ²ΠΎΡ ΠΏΠΎΠ²ΠΈΠΊ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΈ ΠΎΠ΄Π΅Π΄Π½Π°Ρ Π²ΠΎ Π΅Π΄Π½ΠΎ Π±Π°ΡΠ°ΡΠ΅ API. ΠΠΎΠΊΡΠ°Ρ ΡΠΎΠ°, ΡΠΈΠ΅ ΠΌΠΎΠΆΠ°Ρ Π΄Π° Π±ΠΈΠ΄Π°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΈ ΠΎΠ΄ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²ΠΈ (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΎΡΡΠΎΠ²ΠΈ, ΠΏΠΎΠ΄ΠΌΡΠ΅ΠΆΠΈ ΠΈ ΠΎΠΏΡΠ΅Π³ Π½Π° Π°Π΄ΡΠ΅ΡΠΈ). Π’Π°ΠΊΠ°, Π½Π°ΡΠ°ΡΠ° Π·Π°Π΄Π°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ΅ΡΠΈ Π²ΠΎ ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π΅Π΄Π΅Π½ ΠΏΠΎΠ²ΠΈΠΊ API.
Π‘ΠΊΡΠΈΠΏΡΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ add-objects-batch
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, ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π½Π°Π³ΠΎΠ»Π΅ΠΌΠΎ Π΄Π° Π³ΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠΌΠ΅ ΡΠ΅ΠΊΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ. ΠΡΠ΄Π΅ Π΄Π° ΡΠ° ΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠ΅ ΠΏΡΠ²Π°ΡΠ° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΎΠ΄ Π°Π΄ΡΠ΅ΡΠΈΡΠ΅ ΠΎΠ΄ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΈΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ (Π΄ΠΎ 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")
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·Π±ΡΠΈΡΠ΅ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΈ Π²ΠΎ Π΅Π΄Π΅Π½ ΠΏΠΎΠ²ΠΈΠΊ API ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π±ΡΠΈΡΠ΅ΡΠ΅-ΠΎΠ±ΡΠ΅ΠΊΡΠΈ-ΡΠ΅ΡΠΈΡΠ°. Π‘Π΅Π³Π° Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΠΊΠΎΠ΄ ΠΊΠΎΡ Π³ΠΈ Π±ΡΠΈΡΠ΅ ΡΠΈΡΠ΅ Ρ ΠΎΡΡΠΎΠ²ΠΈ ΡΠΎΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ ΠΏΡΠ΅ΠΊΡ Π΄ΠΎΠ΄Π°Π΄Π΅ΡΠ΅-ΠΎΠ±ΡΠ΅ΠΊΡΠΈ-ΡΠ΅ΡΠΈΡΠ°.
ΠΡΠΈΡΠ΅ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΈ ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° delete-objects-batch
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)
Π‘ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠΎ ΡΠ΅ ΠΏΠΎΡΠ°Π²ΡΠ²Π°Π°Ρ Π²ΠΎ Π½ΠΎΠ²ΠΈΡΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΡΠ° Π½Π° ΡΠΎΡΡΠ²Π΅ΡΠΎΡ Check Point Π²Π΅Π΄Π½Π°Ρ Π΄ΠΎΠ±ΠΈΠ²Π°Π°Ρ ΠΏΠΎΠ²ΠΈΡΠΈ Π½Π° 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")
ΠΠΊΠ»ΡΡΡΠ²Π°ΡΠ΅ Π½Π° Python ΡΠΊΡΠΈΠΏΡΠΈ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ Check Point
Π‘Π΅ Π΅ ΠΈΡΡΠΎ ΡΠΎΠ΄ΡΠΆΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Π°Ρ Python ΡΠΊΡΠΈΠΏΡΠΈΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΠ΄ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈΠΎΡ ΡΠ΅ΡΠ²Π΅Ρ. ΠΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎ ΠΊΠΎΠ³Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ²ΡΠ·Π΅ΡΠ΅ ΡΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ API ΠΎΠ΄ Π΄ΡΡΠ³Π° ΠΌΠ°ΡΠΈΠ½Π°. Π‘Π½ΠΈΠΌΠΈΠ² ΡΠ΅ΡΡΠΌΠΈΠ½ΡΡΠ½ΠΎ Π²ΠΈΠ΄Π΅ΠΎ Π²ΠΎ ΠΊΠΎΠ΅ Π³Π»Π΅Π΄Π°ΠΌ ΠΊΠ°ΠΊΠΎ Π³ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌ ΠΌΠΎΠ΄ΡΠ»ΠΎΡ cpapi ΠΈ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π° Python ΡΠΊΡΠΈΠΏΡΠΈ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈΠΎΡ ΡΠ΅ΡΠ²Π΅Ρ. ΠΠ°ΠΊΠΎ ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΡΠΊΡΠΈΠΏΡΠ° ΡΡΠΎ ΡΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° Π½ΠΎΠ²Π° ΠΏΠΎΡΡΠ° Π·Π° Π·Π°Π΄Π°ΡΠ° ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ ΠΌΡΠ΅ΠΆΠ½Π° ΡΠ΅Π²ΠΈΠ·ΠΈΡΠ° ΠΠ΅Π·Π±Π΅Π΄Π½ΠΎΡΠ½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°. ΠΠ΅ΡΡ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈΡΠ΅ ΡΠΎ ΠΊΠΎΠΈ ΠΌΠΎΡΠ°Π² Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²Π°ΠΌ: ΡΡΠ½ΠΊΡΠΈΡΠ°ΡΠ° ΡΓ¨ ΡΡΡΠ΅ Π½Π΅ ΡΠ΅ ΠΏΠΎΡΠ°Π²ΠΈΠ»Π° Π²ΠΎ Python 2.7 Π²Π»Π΅Π·, ΡΠ°ΠΊΠ° ΡΡΠΎ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈΡΠ΅ ΡΡΠΎ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ Π³ΠΈ Π²Π½Π΅ΡΡΠ²Π°, ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΡΠ° ΡΡΡΠΎΠ²_Π²Π»Π΅Π·. ΠΠ½Π°ΠΊΡ, ΠΊΠΎΠ΄ΠΎΡ Π΅ ΠΈΡΡ ΠΊΠ°ΠΊΠΎ ΠΈ Π·Π° Π»Π°Π½ΡΠΈΡΠ°ΡΠ΅ ΠΎΠ΄ Π΄ΡΡΠ³ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ, ΡΠ°ΠΌΠΎ ΡΡΠΎ Π΅ ΠΏΠΎΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΡΠ°ΡΠ° login_as_root, Π·Π° Π΄Π° Π½Π΅ Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠΎΠΏΡΡΠ²Π΅Π½ΠΎ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΎ ΠΈΠΌΠ΅, Π»ΠΎΠ·ΠΈΠ½ΠΊΠ° ΠΈ IP Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅.

Π‘ΠΊΡΠΈΠΏΡΠ° Π·Π° Π±ΡΠ·ΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΡΠ°
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(ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Π±ΠΈ ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅, ΠΎΠ²Π° ΡΠ΅ Π²ΡΡΡΠ½ΠΎΡΡ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΠΈ), Π° ΡΠΎ ΠΏΡΠΎΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠΎΠ΄ΠΎΡ Π²ΠΎ ΠΎΠ²ΠΎΡ ΠΌΠΎΠ΄ΡΠ» ΡΠ΅ ΠΎΡΠΊΡΠΈΠ΅ΡΠ΅ ΡΡΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ Π½Π΅Π³ΠΎ. ΠΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° Π³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠΎ ΡΠ²ΠΎΠΈ ΠΊΠ»Π°ΡΠΈ, ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ. Π‘Π΅ΠΊΠΎΠ³Π°Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ° ΡΠΏΠΎΠ΄Π΅Π»ΠΈΡΠ΅ Π²Π°ΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ° ΠΈ Π΄Π° Π³Π»Π΅Π΄Π°ΡΠ΅ Π΄ΡΡΠ³ΠΈ ΡΠΊΡΠΈΠΏΡΠΈ Π·Π° Check Point Π²ΠΎ Π΄Π΅Π»ΠΎΡ Π²ΠΎ Π·Π°Π΅Π΄Π½ΠΈΡΠ°ΡΠ° , ΠΊΠΎΡ Π³ΠΈ ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π° ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈ ΠΈ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈΡΠ΅.
Π‘ΡΠ΅ΡΠ½ΠΎ ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅ ΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ°ΠΌ ΡΡΠΎ ΠΏΡΠΎΡΠΈΡΠ°Π²ΡΠ΅ Π΄ΠΎ ΠΊΡΠ°Ρ!
ΠΠ·Π²ΠΎΡ: www.habr.com
