ืคื™ืฉื•ื˜ ื”-Check Point API ืขื Python SDK

ืคื™ืฉื•ื˜ ื”-Check Point API ืขื Python SDKื”ืขื•ืฆืžื” ื”ืžืœืื” ืฉืœ ืื™ื ื˜ืจืืงืฆื™ื” ืขื ืžืžืฉืงื™ API ืžืชื’ืœื” ื‘ืฉื™ืžื•ืฉ ื™ื—ื“ ืขื ืงื•ื“ ืชื•ื›ื ื™ืช, ื›ืืฉืจ ื ื™ืชืŸ ืœื™ืฆื•ืจ ื‘ืื•ืคืŸ ื“ื™ื ืžื™ ื‘ืงืฉื•ืช API ื•ื›ืœื™ื ืœื ื™ืชื•ื— ืชื’ื•ื‘ื•ืช API. ืขื ื–ืืช, ื–ื” ืขื“ื™ื™ืŸ ืœื ืžื•ืจื’ืฉ ืขืจื›ืช ืคื™ืชื•ื— ืชื•ื›ื ื” ืฉืœ Python (ืœื”ืœืŸ ืžื›ื•ื ื” Python SDK) ืขื‘ื•ืจ API ืœื ื™ื”ื•ืœ ื ืงื•ื“ื•ืช ืฆ'ืง, ืืš ืœืฉื•ื•ื. ื–ื” ืžืคืฉื˜ ืžืฉืžืขื•ืชื™ืช ืืช ื”ื—ื™ื™ื ืฉืœ ืžืคืชื—ื™ื ื•ื—ื•ื‘ื‘ื™ ืื•ื˜ื•ืžืฆื™ื”. ืคื™ื™ืชื•ืŸ ืฆื‘ืจื” ืคื•ืคื•ืœืจื™ื•ืช ืขืฆื•ืžื” ืœืื—ืจื•ื ื” ื•ื”ื—ืœื˜ืชื™ ืœืžืœื ืืช ื”ื—ืกืจ ื•ืœืกืงื•ืจ ืืช ื”ืžืืคื™ื™ื ื™ื ื”ืขื™ืงืจื™ื™ื. ืขืจื›ืช ืคื™ืชื•ื— ืฉืœ ืฆ'ืง ืคื•ื™ื ื˜ API Python. ืžืืžืจ ื–ื” ืžืฉืžืฉ ื›ืชื•ืกืคืช ืžืฆื•ื™ื ืช ืœืžืืžืจ ืื—ืจ ืขืœ Habrรฉ API ืฉืœ Check Point R80.10. ื ื™ื”ื•ืœ ื‘ืืžืฆืขื•ืช CLI, ืกืงืจื™ืคื˜ื™ื ื•ืขื•ื“. ื ื‘ื—ืŸ ื›ื™ืฆื“ ืœื›ืชื•ื‘ ืกืงืจื™ืคื˜ื™ื ื‘ืืžืฆืขื•ืช Python SDK ื•ื ืกืชื›ืœ ืžืงืจื•ื‘ ืขืœ ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื”ื—ื“ืฉื” ืฉืœ Management API ื‘ื’ืจืกื” 1.6 (ื ืชืžื›ืช ื”ื—ืœ ืž-R80.40). ื›ื“ื™ ืœื”ื‘ื™ืŸ ืืช ื”ืžืืžืจ, ืชื–ื“ืงืง ืœื™ื“ืข ื‘ืกื™ืกื™ ื‘ืขื‘ื•ื“ื” ืขื ืžืžืฉืงื™ API ื•-Python.

ืฆ'ืง ืคื•ื™ื ื˜ ืžืคืชื—ืช ื‘ืื•ืคืŸ ืคืขื™ืœ ืืช ื”-API, ื•ื›ืจื’ืข ืฉื•ื—ืจืจื• ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื:

ื”-SDK ืฉืœ Python ืชื•ืžืš ื›ืจื’ืข ืจืง ื‘ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”-API ืœื ื™ื”ื•ืœ ื• Gaia API. ื ืกืชื›ืœ ืขืœ ื”ืžื—ืœืงื•ืช, ื”ืฉื™ื˜ื•ืช ื•ื”ืžืฉืชื ื™ื ื”ื—ืฉื•ื‘ื™ื ื‘ื™ื•ืชืจ ื‘ืžื•ื“ื•ืœ ื–ื”.

ืคื™ืฉื•ื˜ ื”-Check Point API ืขื Python SDK

ื”ืชืงื ืช ื”ืžื•ื“ื•ืœ

ะœะพะดัƒะปัŒ cpapi ืžื•ืชืงืŸ ื‘ืžื”ื™ืจื•ืช ื•ื‘ืงืœื•ืช ืž ืžืื’ืจ ืฆ'ืง ืคื•ื™ื ื˜ ื”ืจืฉืžื™ ื‘-github ื‘ืืžืฆืขื•ืช ืคึฐึผืขึดื™ื. ื”ื•ืจืื•ืช ื”ืชืงื ื” ืžืคื•ืจื˜ื•ืช ื–ืžื™ื ื•ืช ื‘ README.md. ืžื•ื“ื•ืœ ื–ื” ืžื•ืชืื ืœืขื‘ื•ื“ื” ืขื ื’ื™ืจืกืื•ืช Python 2.7 ื•-3.7. ื‘ืžืืžืจ ื–ื” ื™ื™ื ืชื ื• ื“ื•ื’ืžืื•ืช ื‘ืืžืฆืขื•ืช Python 3.7. ืขื ื–ืืช, ื ื™ืชืŸ ืœื”ืคืขื™ืœ ืืช Python SDK ื™ืฉื™ืจื•ืช ืžืฉืจืช ื ื™ื”ื•ืœ ืฆ'ืง ืคื•ื™ื ื˜ (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 ื”ื ืื™ื ื˜ื•ืื™ื˜ื™ื‘ื™ื™ื ืœืžื ื”ืœื™ ืฆ'ืง ืคื•ื™ื ื˜ ื•ืื™ื ื ื“ื•ืจืฉื™ื ื”ืขืจื•ืช ื ื•ืกืคื•ืช.

ื”ืชื—ื‘ืจื•ืช ื“ืจืš APIClient ื•ืžื ื”ืœ ื”ืงืฉืจ

ื‘ื›ื™ืชื” APIClient ื”ื“ืจืš ื”ื ื•ื—ื” ื‘ื™ื•ืชืจ ืœื”ืฉืชืžืฉ ื‘ื• ื”ื™ื ื“ืจืš ืžื ื”ืœ ื”ื”ืงืฉืจื™ื. ื›ืœ ืžื” ืฉืฆืจื™ืš ืœื”ืขื‘ื™ืจ ืœืžื•ืคืข ืฉืœ ืžื—ืœืงืช APIClient ื”ื•ื ืคืจืžื˜ืจื™ ื”ื—ื™ื‘ื•ืจ ืฉื”ื•ื’ื“ืจื• ื‘ืฉืœื‘ ื”ืงื•ื“ื.

with APIClient(client_args) as client:

ืžื ื”ืœ ื”ื”ืงืฉืจ ืœื ื™ื‘ืฆืข ืงืจื™ืืช ื”ืชื—ื‘ืจื•ืช ืื•ื˜ื•ืžื˜ื™ืช ืœืฉืจืช ื”-API, ืืš ื”ื•ื ื™ื‘ืฆืข ืงืจื™ืืช ื”ืชื ืชืง ื‘ืขืช ื™ืฆื™ืื” ืžืžื ื•. ืื ืžืกื™ื‘ื” ื›ืœืฉื”ื™ ืœื ื ื“ืจืฉืช ื”ืชื ืชืงื•ืช ืœืื—ืจ ืกื™ื•ื ื”ืขื‘ื•ื“ื” ืขื ืงืจื™ืื•ืช API, ืขืœื™ืš ืœื”ืชื—ื™ืœ ืœืขื‘ื•ื“ ืžื‘ืœื™ ืœื”ืฉืชืžืฉ ื‘ืžื ื”ืœ ื”ื”ืงืฉืจื™ื:

client = APIClient(clieng_args)

ื‘ื“ื™ืงืช ื—ื™ื‘ื•ืจ

ื”ื“ืจืš ื”ืงืœื” ื‘ื™ื•ืชืจ ืœื‘ื“ื•ืง ืื ื”ื—ื™ื‘ื•ืจ ืขื•ืžื“ ื‘ืคืจืžื˜ืจื™ื ืฉืฆื•ื™ื ื• ื”ื™ื ื‘ืืžืฆืขื•ืช ื”ืฉื™ื˜ื” check_fingerprint. ืื ื”ืื™ืžื•ืช ืฉืœ ืกื›ื•ื ื”-hash 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, ื–ื•ื”ืชื” ืฉื’ื™ืื” (ื”ืื™ืฉื•ืจ ืื™ื ื• ื™ื“ื•ืข ืื• ืฉื•ื ื”), ื”ืฉื™ื˜ื” check_fingerprint ื™ืกืคืง ืืช ื”ื”ื–ื“ืžื ื•ืช ืœื”ื•ืกื™ืฃ/ืœืฉื ื•ืช ืžื™ื“ืข ืื•ื“ื•ืชื™ื• ื‘ืžื—ืฉื‘ ื”ืžืงื•ืžื™ ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™. ื ื™ืชืŸ ืœื‘ื˜ืœ ืืช ื”ืกื™ืžื•ืŸ ื”ื–ื” ืœื—ืœื•ื˜ื™ืŸ (ืืš ื ื™ืชืŸ ืœื”ืžืœื™ืฅ โ€‹โ€‹ืขืœ ื›ืš ืจืง ืื ืกืงืจื™ืคื˜ื™ื ืžื•ืคืขืœื™ื ืขืœ ืฉืจืช ื”-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 ืื•ื‘ื™ื™ืงื˜ื™ื ื‘ืชื’ื•ื‘ื”). ื•ื›ื“ื™ ืœื ืœืžืฉื•ืš ืืช ื”ืžื™ื“ืข ืžืกืคืจ ืคืขืžื™ื, ืฉื™ื ื•ื™ ืคืจืžื˜ืจ ื”-offset ื‘ื‘ืงืฉืช ื”-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.

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 ืฉื ื•ืกืคื• ื‘-Management API 1.6.

ะ”ะปั ะฝะฐั‡ะฐะปะฐ ั€ะฐััะผะพั‚ั€ะธะผ ั€ะฐะฑะพั‚ัƒ ะฒั‹ะทะพะฒะพะฒ add-host ะธ add-address-range. ื ื ื™ื— ืฉืขืœื™ื ื• ืœื™ืฆื•ืจ ืืช ื›ืœ ื›ืชื•ื‘ื•ืช ื”-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 add-objects-batch, ืขื‘ื•ืจื• ื ื•ืกืคื” ืชืžื™ื›ื” ื‘ื’ื™ืจืกืช 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 ืžื”ืจ ื™ื•ืชืจ. ืขืœ ืžืกืคืจ ื’ื“ื•ืœ ื™ื•ืชืจ ืฉืœ ื—ืคืฆื™ื ื”ื”ื‘ื“ืœ ื™ื”ื™ื” ืืคื™ืœื• ื™ื•ืชืจ ืžืจืฉื™ื.

ืขื›ืฉื™ื• ื‘ื•ืื• ื ืจืื” ืื™ืš ืœืขื‘ื•ื“ ืขื set-objects-batch. ื‘ืืžืฆืขื•ืช ืงืจื™ืืช API ื–ื•, ืื ื• ื™ื›ื•ืœื™ื ืœืฉื ื•ืช ื‘ื›ืžื•ืช ื’ื“ื•ืœื” ื›ืœ ืคืจืžื˜ืจ. ื‘ื•ืื• ื ื’ื“ื™ืจ ืืช ื”ื—ืฆื™ ื”ืจืืฉื•ืŸ ืฉืœ ื”ื›ืชื•ื‘ื•ืช ืžื”ื“ื•ื’ืžื” ื”ืงื•ื“ืžืช (ืขื“ .124 ืžืืจื—ื™ื, ื•ื’ื ื˜ื•ื•ื—ื™ื) ืœืฆื‘ืข sienna, ื•ื ืงืฆื” ืืช ื”ืฆื‘ืข ื—ืืงื™ ืœื—ืฆื™ ื”ืฉื ื™ ืฉืœ ื”ื›ืชื•ื‘ื•ืช.

ืฉื™ื ื•ื™ ืฆื‘ืข ื”ืื•ื‘ื™ื™ืงื˜ื™ื ืฉื ื•ืฆืจื• ื‘ื“ื•ื’ืžื” ื”ืงื•ื“ืžืช

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 ืื—ืช ื‘ืืžืฆืขื•ืช ืžื—ืง-ืื•ื‘ื™ื™ืงื˜ื™ื-ืืฆื•ื•ื”. ื›ืขืช ื ืกืชื›ืœ ืขืœ ื“ื•ื’ืžื” ืœืงื•ื“ ืฉืžื•ื—ืงืช ืืช ื›ืœ ื”ืžืืจื—ื™ื ืฉื ื•ืฆืจื• ื‘ืขื‘ืจ ื‘ืืžืฆืขื•ืช add-objects-batch.

ืžื—ื™ืงืช ืื•ื‘ื™ื™ืงื˜ื™ื ื‘ืืžืฆืขื•ืช 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)

ื›ืœ ื”ืคื•ื ืงืฆื™ื•ืช ื”ืžื•ืคื™ืขื•ืช ื‘ืžื”ื“ื•ืจื•ืช ื—ื“ืฉื•ืช ืฉืœ ืชื•ื›ื ืช ืฆ'ืง ืคื•ื™ื ื˜ ืจื•ื›ืฉื•ืช ืžื™ื“ ืงืจื™ืื•ืช API. ืœืคื™ื›ืš, ื‘-R80.40 ื”ื•ืคื™ืขื• "ืชื›ื•ื ื•ืช" ื›ื’ื•ืŸ Revert to revision ื•-Smart Task, ื•ืงืจื™ืื•ืช API ืžืชืื™ืžื•ืช ื”ื•ื›ื ื• ืœื”ืŸ ืžื™ื“. ื™ืชืจ ืขืœ ื›ืŸ, ื›ืœ ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื‘ืขืช ืžืขื‘ืจ ืžืงื•ื ืกื•ืœื•ืช ืžื“ื•ืจ ืงื•ื“ื ืœืžืฆื‘ Unified Policy ืžืงื‘ืœืช ื’ื ืชืžื™ื›ืช API. ืœื“ื•ื’ืžื”, ื”ืขื“ื›ื•ืŸ ื”ืžื™ื•ื—ืœ ื‘ื’ืจืกืช ื”ืชื•ื›ื ื” R80.40 ื”ื™ื” ื”ืžืขื‘ืจ ืฉืœ ืžื“ื™ื ื™ื•ืช ื”-HTTPS Inspection ืžืžืฆื‘ Legacy ืœืžืฆื‘ Unified Policy, ื•ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื–ื• ืงื™ื‘ืœื” ืžื™ื“ ืงืจื™ืื•ืช API. ื”ื ื” ื“ื•ื’ืžื” ืœืงื•ื“ ืฉืžื•ืกื™ืฃ ื›ืœืœ ืœืžื™ืงื•ื ื”ืขืœื™ื•ืŸ ืฉืœ ืžื“ื™ื ื™ื•ืช ื”-HTTPS Inspection ื”ืžื•ืฆื™ืื” 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 ื‘ืฉืจืช ื”ื ื™ื”ื•ืœ ืฉืœ ืฆ'ืง ืคื•ื™ื ื˜

ื”ื›ืœ ืื•ืชื• ื“ื‘ืจ 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()

ืงื•ื‘ืฅ ืœื“ื•ื’ืžื” ืขื ืžื™ืœื•ืŸ ืกื™ืกืžื” additional_pass.conf
{
"passwords" : ["malware","malicious","infected","Infected"],
"phrases" : ["password","Password","Pass","pass","codigo","key","pwd","ะฟะฐั€ะพะปัŒ","ะŸะฐั€ะพะปัŒ","ะšะปัŽั‡","ะบะปัŽั‡","ัˆะธั„ั€","ะจะธั„ั€"] }

ืžืกืงื ื”

ืžืืžืจ ื–ื” ื‘ื•ื—ืŸ ืจืง ืืช ื”ืืคืฉืจื•ื™ื•ืช ื”ื‘ืกื™ืกื™ื•ืช ืฉืœ ืขื‘ื•ื“ื” ืคื™ืชื•ืŸ SDK ื•ืžื•ื“ื•ืœ cpapi(ื›ืคื™ ืฉืื•ืœื™ ื ื™ื—ืฉืชื, ืืœื• ืœืžืขืฉื” ืžื™ืœื™ื ื ืจื“ืคื•ืช), ื•ืขืœ ื™ื“ื™ ืœื™ืžื•ื“ ื”ืงื•ื“ ื‘ืžื•ื“ื•ืœ ื–ื” ืชื’ืœื• ืขื•ื“ ื™ื•ืชืจ ื”ื–ื“ืžื ื•ื™ื•ืช ืœืขื‘ื•ื“ ืื™ืชื•. ื™ื™ืชื›ืŸ ืฉืชืจืฆื” ืœื”ืฉืœื™ื ืื•ืชื• ืขื ืžื—ืœืงื•ืช, ืคื•ื ืงืฆื™ื•ืช, ืฉื™ื˜ื•ืช ื•ืžืฉืชื ื™ื ืžืฉืœืš. ืืชื” ืชืžื™ื“ ื™ื›ื•ืœ ืœืฉืชืฃ ืืช ื”ืขื‘ื•ื“ื” ืฉืœืš ื•ืœื”ืฆื™ื’ ืกืงืจื™ืคื˜ื™ื ืื—ืจื™ื ืขื‘ื•ืจ ืฆ'ืง ืคื•ื™ื ื˜ ื‘ืงื˜ืข CodeHub ื‘ืงื”ื™ืœื” CheckMates, ืฉืžืคื’ื™ืฉ ื’ื ืžืคืชื—ื™ ืžื•ืฆืจ ื•ื’ื ืžืฉืชืžืฉื™ื.

ืงื™ื“ื•ื“ ืฉืžื— ื•ืชื•ื“ื” ืฉืงืจืืชื ืขื“ ื”ืกื•ืฃ!

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”