ΠžΠΏΡ€ΠΎΡΡ‚ΡΠ²Π°Π½Π΅ Π½Π° API Π½Π° Check Point с Python SDK

ΠžΠΏΡ€ΠΎΡΡ‚ΡΠ²Π°Π½Π΅ Π½Π° API Π½Π° Check Point с Python SDKΠŸΡŠΠ»Π½Π°Ρ‚Π° сила Π½Π° взаимодСйствиС с API сС Ρ€Π°Π·ΠΊΡ€ΠΈΠ²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π°Π΅Π΄Π½ΠΎ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Π½ ΠΊΠΎΠ΄, ΠΊΠΎΠ³Π°Ρ‚ΠΎ станС възмоТно Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° API заявки ΠΈ инструмСнти Π·Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° API ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Ρ‚ΠΎΠΉ всС ΠΎΡ‰Π΅ остава Π½Π΅Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌ ΠšΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° софтуСр Python (Π½Π°Ρ€ΠΈΡ‡Π°Π½ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ Python SDK) Π·Π° API Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Check Point, Но Π½Π°ΠΏΡ€Π°Π·Π½ΠΎ. Π’ΠΎΠΉ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ опростява ΠΆΠΈΠ²ΠΎΡ‚Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ ΠΈ СнтусиаститС ΠΏΠΎ автоматизация. Python ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈ ΠΎΠ³Ρ€ΠΎΠΌΠ½Π° популярност напослСдък ΠΈ Ρ€Π΅ΡˆΠΈΡ… Π΄Π° запълня ΠΏΡ€Π°Π·Π½ΠΈΠ½Π°Ρ‚Π° ΠΈ Π΄Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°ΠΌ основнитС характСристики. Check Point API Python ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°. Π’Π°Π·ΠΈ статия слуТи ΠΊΠ°Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ допълнСниС към Π΄Ρ€ΡƒΠ³Π° статия Π½Π° HabrΓ© API Π½Π° Check Point R80.10. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‡Ρ€Π΅Π· CLI, скриптовС ΠΈ Π΄Ρ€. Π©Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° пишСм скриптовС с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° SDK Π½Π° Python ΠΈ Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎ-ΠΎΡ‚Π±Π»ΠΈΠ·ΠΎ Π½ΠΎΠ²Π°Ρ‚Π° функционалност Π½Π° API Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ във вСрсия 1.6 (ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° сС ΠΎΡ‚ R80.40). Π—Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ статията, Ρ‰Π΅ Π²ΠΈ трябват основни познания Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с API ΠΈ Python.

Check Point Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° API ΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° са пуснати слСднитС:

ΠŸΠΎΠ½Π°ΡΡ‚ΠΎΡΡ‰Π΅ΠΌ Python SDK ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° взаимодСйствиС само с API Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ Gaia API. Π©Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΈΡ‚Π΅ класовС, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π² Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠ΄ΡƒΠ».

ΠžΠΏΡ€ΠΎΡΡ‚ΡΠ²Π°Π½Π΅ Π½Π° API Π½Π° Check Point с Python SDK

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π°

ΠœΠΎΠ΄ΡƒΠ» cpapi инсталира сС Π±ΡŠΡ€Π·ΠΎ ΠΈ лСсно ΠΎΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° Check Point Π² github ΠΏΡ€Π΅Π· ΠΏΠΈΡƒΠΊΠ°ΠΌ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΈ инструкции Π·Π° инсталиранС са Π½Π°Π»ΠΈΡ‡Π½ΠΈ Π² README.md. Π’ΠΎΠ·ΠΈ ΠΌΠΎΠ΄ΡƒΠ» Π΅ ​​адаптиран Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Python вСрсии 2.7 ΠΈ 3.7. Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π΄Π°Π΄Π΅Π½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Python 3.7. Python SDK ΠΎΠ±Π°Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС стартира Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚ Check Point Management Server (Smart Management), Π½ΠΎ Ρ‚Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ само Python 2.7, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ послСдният Ρ€Π°Π·Π΄Π΅Π» Ρ‰Π΅ прСдостави ΠΊΠΎΠ΄ Π·Π° вСрсия 2.7. Π’Π΅Π΄Π½Π°Π³Π° слСд инсталиранСто Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π° ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌ Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈΡ‚Π΅ examples_python2 ΠΈ examples_python3.

ΠŸΡŠΡ€Π²ΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ

Π—Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° 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 ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΈ всСки ΠΎΡ‚ тях Ρ€Π°Π·Π±ΠΈΡ€Π° смисъла Π‘ΠΈΠ΄(session-id), ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΏΡ€ΠΈ всяко слСдващо API ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π² Π·Π°Π³Π»Π°Π²ΠΊΠ°Ρ‚Π° (ΠΈΠΌΠ΅Ρ‚ΠΎ Π² Π·Π°Π³Π»Π°Π²ΠΊΠ°Ρ‚Π° Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π΅ X-chkp-sid), Ρ‚Π°ΠΊΠ° Ρ‡Π΅ няма Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€.

ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° Π²Π»ΠΈΠ·Π°Π½Π΅

ΠžΠΏΡ†ΠΈΡ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰Π° потрСбитСлско ΠΈΠΌΠ΅ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π° (Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° потрСбитСлското ΠΈΠΌΠ΅ admin ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π°Ρ‚Π° 1q2w3e сС ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚ ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ):

     login = client.login('admin', '1q2w3e')  

Π”ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Π½Π΅Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΡΡŠΡ‰ΠΎ са Π½Π°Π»ΠΈΡ‡Π½ΠΈ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π° Π²Π»ΠΈΠ·Π°Π½Π΅; Π΅Ρ‚ΠΎ Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ ΠΈΠΌΠ΅Π½Π° ΠΈ стойности ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅:

continue_last_session=False, domain=None, read_only=False, payload=None

ΠœΠ΅Ρ‚ΠΎΠ΄ Login_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 ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ ΠΈ полСзния Ρ‚ΠΎΠ²Π°Ρ€ Π² тялото Π½Π° заявката, Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Ако полСзният Ρ‚ΠΎΠ²Π°Ρ€ Π΅ ΠΏΡ€Π°Π·Π΅Π½, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‚ΠΎΠΉ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€Π΅Π΄Π°Π΄Π΅Π½:

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 ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΡŠΡ€ΡˆΠΈ Ρ‚Π°Π·ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° обаТдания, ΠΏΡ€ΠΈ ΠΊΠΎΠΈΡ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄: show-sessions, show-hosts, show-networks, show-wildcards, show-groups, show-address-ranges, show-simple-gateways, show-simple-clusters, show-access-roles, show-trusted-clients, ΡˆΠΎΡƒ-ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π΄ΡƒΠΌΠΈ Π² мноТСствСно число Π² ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Π΅Π·ΠΈ извиквания Π½Π° 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 Π½Π° Check Point с Python SDK

успСх

ΠšΠ°Ρ‚ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄ΠΎΠ±Ρ€Π° идСя Π΄Π° сС ΡƒΠ²Π΅Ρ€ΠΈΡ‚Π΅, Ρ‡Π΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° 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.

set_success_status

Π’ Ρ‚ΠΎΠ·ΠΈ случай ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ стойността Π½Π° статуса Π½Π° успСх. ВСхничСски ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° поставитС всичко Ρ‚Π°ΠΌ, Π΄ΠΎΡ€ΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ Π½ΠΈΠ·. Но Ρ€Π΅Π°Π»Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±ΠΈ Π±ΠΈΠ» Π½ΡƒΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π½Π° False ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΡŠΠΏΡŠΡ‚ΡΡ‚Π²Π°Ρ‰ΠΈ условия. По-Π΄ΠΎΠ»Ρƒ ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ° изпълнявани Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, Π½ΠΎ Π½ΠΈΠ΅ Ρ‰Π΅ считамС Ρ‚Π°Π·ΠΈ заявка Π·Π° Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½Π° (Ρ‰Π΅ Π·Π°Π΄Π°Π΄Π΅ΠΌ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π·Π° успСх Π½Π° Ѐалшив, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° 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) ΠΈ тялото Π½Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π° (body).

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, ΠΊΠΎΠΈΡ‚ΠΎ са Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π² API Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ 1.6.

ΠŸΡŠΡ€Π²ΠΎ, Π½Π΅ΠΊΠ° Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ работят обаТданията add-host ΠΈ добавянС Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΡ‚ адрСси. Π”Π° ΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Π΅ трябва Π΄Π° създадСм всички 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 ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ добавянС Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ-ΠΏΠ°Ρ€Ρ‚ΠΈΠ΄Π°, ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π·Π° която бСшС Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π² API вСрсия 1.6. Π’ΠΎΠ²Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π²ΠΈ позволява Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ навСднъТ Π² Π΅Π΄Π½Π° заявка Π·Π° 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 сС появиха Ρ‚Π°ΠΊΠΈΠ²Π° β€žΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΈβ€œ ΠΊΠ°Ρ‚ΠΎ Revert to revision ΠΈ Smart Task ΠΈ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ API извиквания бяха Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ΠΈ Π·Π° тях. ОсвСн Ρ‚ΠΎΠ²Π°, цялата функционалност ΠΏΡ€ΠΈ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ ΠΎΡ‚ Legacy ΠΊΠΎΠ½Π·ΠΎΠ»ΠΈ към Ρ€Π΅ΠΆΠΈΠΌ Unified Policy ΡΡŠΡ‰ΠΎ ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ²Π° API ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°. НапримСр, Π΄ΡŠΠ»Π³ΠΎΠΎΡ‡Π°ΠΊΠ²Π°Π½Π°Ρ‚Π° актуализация във вСрсия Π½Π° софтуСра R80.40 бСшС прСмСстванСто Π½Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°Ρ‚Π° Π·Π° инспСкция Π½Π° HTTPS ΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌ Legacy Π² Ρ€Π΅ΠΆΠΈΠΌ Unified Policy ΠΈ Ρ‚Π°Π·ΠΈ функционалност Π²Π΅Π΄Π½Π°Π³Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ 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

Всичко Π΅ ΡΡŠΡ‰ΠΎΡ‚ΠΎ README.md ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° информация ΠΊΠ°ΠΊ Π΄Π° стартиратС Python скриптовС Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚ контролния ΡΡŠΡ€Π²ΡŠΡ€. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΡƒΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ към API ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° машина. Записах ΡˆΠ΅ΡΡ‚ ΠΌΠΈΠ½ΡƒΡ‚Π½ΠΎ Π²ΠΈΠ΄Π΅ΠΎ, Π² ΠΊΠΎΠ΅Ρ‚ΠΎ Π³Π»Π΅Π΄Π°ΠΌ инсталиранСто Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π° cpapi ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° изпълнСниС Π½Π° Python скриптовС Π½Π° контролния ΡΡŠΡ€Π²ΡŠΡ€. ΠšΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сС изпълнява скрипт, ΠΊΠΎΠΉΡ‚ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π° конфигурацията Π½Π° Π½ΠΎΠ² шлюз Π·Π° Π·Π°Π΄Π°Ρ‡Π° ΠΊΠ°Ρ‚ΠΎ ΠΌΡ€Π΅ΠΆΠΎΠ² ΠΎΠ΄ΠΈΡ‚ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° сигурността. Π‘Ρ€Π΅Π΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅, с ΠΊΠΎΠΈΡ‚ΠΎ Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° сС справя: функцията всС ΠΎΡ‰Π΅ Π½Π΅ сС Π΅ появила Π² Python 2.7 Π²Ρ…ΠΎΠ΄, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° информацията, която потрСбитСлят въвСТда, сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° функция суров_Π²Ρ…ΠΎΠ΄. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай ΠΊΠΎΠ΄ΡŠΡ‚ Π΅ ΡΡŠΡ‰ΠΈΡΡ‚ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈ стартиранС ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈ машини, само Ρ‡Π΅ Π΅ ΠΏΠΎ-ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° функцията login_as_root, Π·Π° Π΄Π° Π½Π΅ посочватС ΠΎΡ‚Π½ΠΎΠ²ΠΎ собствСното си потрСбитСлско ΠΈΠΌΠ΅, ΠΏΠ°Ρ€ΠΎΠ»Π° ΠΈ IP адрСс Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅.

Π‘ΠΊΡ€ΠΈΠΏΡ‚ Π·Π° Π±ΡŠΡ€Π·Π° настройка Π½Π° Security CheckUp

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()

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π΅Π½ Ρ„Π°ΠΉΠ» с Ρ€Π΅Ρ‡Π½ΠΈΠΊ Π·Π° ΠΏΠ°Ρ€ΠΎΠ»ΠΈ Additional_pass.conf
{
"passwords" : ["malware","malicious","infected","Infected"],
"phrases" : ["password","Password","Pass","pass","codigo","key","pwd","ΠΏΠ°Ρ€ΠΎΠ»ΡŒ","ΠŸΠ°Ρ€ΠΎΠ»ΡŒ","ΠšΠ»ΡŽΡ‡","ΠΊΠ»ΡŽΡ‡","ΡˆΠΈΡ„Ρ€","Π¨ΠΈΡ„Ρ€"] }

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’Π°Π·ΠΈ статия Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π° само основнитС Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Python SDK ΠΈ ΠΌΠΎΠ΄ΡƒΠ» cpapi(ΠΊΠ°ΠΊΡ‚ΠΎ сС досСщатС, Ρ‚ΠΎΠ²Π° Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ са синоними), Π° ΠΈΠ·ΡƒΡ‡Π°Π²Π°ΠΉΠΊΠΈ ΠΊΠΎΠ΄Π° Π² Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠ΄ΡƒΠ» Ρ‰Π΅ ΠΎΡ‚ΠΊΡ€ΠΈΠ΅Ρ‚Π΅ ΠΎΡ‰Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π½Π΅Π³ΠΎ. Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° искатС Π΄Π° Π³ΠΎ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ със свои собствСни класовС, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ. Π’ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сподСлитС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΈ скриптовС Π·Π° Check Point Π² сСкцията CodeHub Π² общността CheckMates, ΠΊΠΎΠΉΡ‚ΠΎ обСдинява ΠΊΠ°ΠΊΡ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ, Ρ‚Π°ΠΊΠ° ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ.

ΠŸΡ€ΠΈΡΡ‚Π½ΠΎ ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ ΠΈ благодаря, Ρ‡Π΅ ΠΏΡ€ΠΎΡ‡Π΅Ρ‚ΠΎΡ…Ρ‚Π΅ Π΄ΠΎ края!

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€