ΠŸΠΎΠ΅Π΄Π½ΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° Check Point API со Python SDK

ΠŸΠΎΠ΅Π΄Π½ΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° Check Point API со Python SDKЦСлосната моќ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΡ˜Π° со API сС ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π° ΠΊΠΎΠ³Π° сС користи Π·Π°Π΅Π΄Π½ΠΎ со програмскиот ΠΊΠΎΠ΄, ΠΊΠΎΠ³Π° станува Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡ΠΊΠΎ Π΄Π° сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π°Ρ‚ API Π±Π°Ρ€Π°ΡšΠ° ΠΈ Π°Π»Π°Ρ‚ΠΊΠΈ Π·Π° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° API. Π‘Π΅ΠΏΠ°ΠΊ, сè ΡƒΡˆΡ‚Π΅ останува Π½Π΅Π·Π°Π±Π΅Π»Π΅ΠΆΠ»ΠΈΠ²ΠΎ ΠšΠΎΠΌΠΏΠ»Π΅Ρ‚ Π·Π° Ρ€Π°Π·Π²ΠΎΡ˜ Π½Π° софтвСр Python (Π²ΠΎ Π½Π°Ρ‚Π°ΠΌΠΎΡˆΠ½ΠΈΠΎΡ‚ тСкст ΠΊΠ°ΠΊΠΎ Python SDK) Π·Π° Check Point Management API, Π½ΠΎ Π·Π°Π»ΡƒΠ΄Π½ΠΎ. Π’ΠΎΠ° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π³ΠΎ поСдноставува ΠΆΠΈΠ²ΠΎΡ‚ΠΎΡ‚ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΈ Π΅Π½Ρ‚ΡƒΠ·ΠΈΡ˜Π°ΡΡ‚ΠΈΡ‚Π΅ Π·Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°. Python Π²ΠΎ послСдно Π²Ρ€Π΅ΠΌΠ΅ сС Π·Π΄ΠΎΠ±ΠΈ со ΠΎΠ³Ρ€ΠΎΠΌΠ½Π° популарност ΠΈ Ρ€Π΅ΡˆΠΈΠ² Π΄Π° ја ΠΏΠΎΠΏΠΎΠ»Π½Π°ΠΌ ΠΏΡ€Π°Π·Π½ΠΈΠ½Π°Ρ‚Π° ΠΈ Π΄Π° Π³ΠΈ ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°ΠΌ Π³Π»Π°Π²Π½ΠΈΡ‚Π΅ карактСристики. ΠšΠΎΠΌΠΏΠ»Π΅Ρ‚ Π·Π° Ρ€Π°Π·Π²ΠΎΡ˜ Π½Π° Python Π·Π° Check Point API. Оваа ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° слуТи ΠΊΠ°ΠΊΠΎ ΠΎΠ΄Π»ΠΈΡ‡Π΅Π½ Π΄ΠΎΠ΄Π°Ρ‚ΠΎΠΊ Π½Π° Π΄Ρ€ΡƒΠ³Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° Π·Π° Π₯Π°Π±Ρ€Π΅ Check Point R80.10 API. Π£ΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ ΠΏΡ€Π΅ΠΊΡƒ CLI, скрипти ΠΈ повСќС. ЌС ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΏΠΈΡˆΡƒΠ²Π°ΠΌΠ΅ скрипти со ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Python SDK ΠΈ ќС ја Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎΠ΄Π΅Ρ‚Π°Π»Π½ΠΎ Π½ΠΎΠ²Π°Ρ‚Π° функционалност Π·Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со API Π²ΠΎ Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° 1.6 (ΠΏΠΎΠ΄Π΄Ρ€ΠΆΠ°Π½Π° ΠΏΠΎΡ‡Π½ΡƒΠ²Π°Ρ˜ΡœΠΈ ΠΎΠ΄ R80.40). Π—Π° Π΄Π° ја Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°Ρ‚Π°, ќС Π²ΠΈ Ρ‚Ρ€Π΅Π±Π° основно знаСњС Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° со API ΠΈ Python.

Check Point Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π³ΠΎ Ρ€Π°Π·Π²ΠΈΠ²Π° API ΠΈ Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΡ‚ сС објавСни слСднивС:

Python SDK ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎ ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΡ˜Π° само со ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со API ΠΈ Gaia API. ЌС Π³ΠΈ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π½Π°Ρ˜Π²Π°ΠΆΠ½ΠΈΡ‚Π΅ класи, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π²ΠΎ овој ΠΌΠΎΠ΄ΡƒΠ».

ΠŸΠΎΠ΅Π΄Π½ΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° Check Point API со Python SDK

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

ΠœΠΎΠ΄ΡƒΠ» cpapi Π±Ρ€Π·ΠΎ ΠΈ лСсно сС инсталира ΠΎΠ΄ ΠΎΡ„ΠΈΡ†ΠΈΡ˜Π°Π»Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅ Π·Π° Check Point Π½Π° github со помош Π½Π° ΠΏΠΈΠΏΠΊΠ°. Π”Π΅Ρ‚Π°Π»Π½ΠΈ упатства Π·Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° сС достапни Π²ΠΎ README.md. Овој ΠΌΠΎΠ΄ΡƒΠ» Π΅ ​​прилагодСн Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ со 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 ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ сС ΠΏΡ€Π΅Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ, ќС сС Π·Π°Π΄Ρ€ΠΆΠΈΠΌΠ΅ Π½Π° Π½Π°Ρ˜Π²Π°ΠΆΠ½ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π΅Ρ‚Π°Π»Π½ΠΎ.

ΠŸΠΎΠ΅Π΄Π½ΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° Check Point API со 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.

постави_статус_успСх

Π’ΠΎ овој ΡΠ»ΡƒΡ‡Π°Ρ˜, ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ Π΄Π° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ врСдноста Π½Π° статусот Π½Π° успСх. Π’Π΅Ρ…Π½ΠΈΡ‡ΠΊΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ставитС ΡˆΡ‚ΠΎ Π±ΠΈΠ»ΠΎ, Π΄ΡƒΡ€ΠΈ ΠΈ ΠΎΠ±ΠΈΡ‡Π½Π° Π½ΠΈΠ·Π°. Но, вистински ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±ΠΈ Π±ΠΈΠ» Ρ€Π΅ΡΠ΅Ρ‚ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° овој ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ Π½Π° НСточно ΠΏΠΎΠ΄ ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΏΡ€ΠΈΠ΄Ρ€ΡƒΠΆΠ½ΠΈ услови. ΠŸΠΎΠ΄ΠΎΠ»Ρƒ, ΠΎΠ±Ρ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ ΠΊΠΎΠ³Π° ΠΈΠΌΠ° Π·Π°Π΄Π°Ρ‡ΠΈ ΡˆΡ‚ΠΎ сС ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°Π°Ρ‚ Π½Π° сСрвСрот Π·Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅, Π½ΠΎ ΠΎΠ²Π° Π±Π°Ρ€Π°ΡšΠ΅ ќС Π³ΠΎ смСтамС Π·Π° Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ (ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π·Π° успСх ќС ја поставимС Π½Π° Π›Π°ΠΆΠ½ΠΈ, ΠΈ ΠΏΠΎΠΊΡ€Π°Ρ˜ Ρ„Π°ΠΊΡ‚ΠΎΡ‚ ΡˆΡ‚ΠΎ ΠΏΠΎΠ²ΠΈΠΊΠΎΡ‚ Π½Π° 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

Π‘Π΅ Π΅ исто README.md содрТи ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°Π°Ρ‚ 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 Π²ΠΎ Π΄Π΅Π»ΠΎΡ‚ CodeHub Π²ΠΎ Π·Π°Π΅Π΄Π½ΠΈΡ†Π°Ρ‚Π° CheckMates, кој Π³ΠΈ ΠΎΠ±Π΅Π΄ΠΈΠ½ΡƒΠ²Π° ΠΈ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‡ΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈ ΠΈ корисницитС.

Π‘Ρ€Π΅ΡœΠ½ΠΎ ΠΊΠΎΠ΄ΠΈΡ€Π°ΡšΠ΅ ΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π°ΠΌ ΡˆΡ‚ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π²Ρ‚Π΅ Π΄ΠΎ ΠΊΡ€Π°Ρ˜!

Π˜Π·Π²ΠΎΡ€: www.habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π΄ΠΎΠ²Π΅Ρ€Π»ΠΈΠ² хостинг Π·Π° ΡΠ°Ρ˜Ρ‚ΠΎΠ²ΠΈ со DDoS Π·Π°ΡˆΡ‚ΠΈΡ‚Π°, VPS VDS сСрвСри πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ сигурСн Π²Π΅Π±-хостинг со DDoS Π·Π°ΡˆΡ‚ΠΈΡ‚Π°, VPS VDS сСрвСри | ProHoster