ΠΡΡ ΠΌΠΎΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ API ΡΠ°ΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ API Π·Π°ΠΏΡΠΎΡΡ ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° API ΠΎΡΠ²Π΅ΡΠΎΠ². ΠΠ΄Π½Π°ΠΊΠΎ, ΠΌΠ°Π»ΠΎΠ·Π°ΠΌΠ΅ΡΠ½ΡΠΌ Π΄ΠΎ ΡΠΈΡ
ΠΏΠΎΡ ΠΎΡΡΠ°ΡΡΡΡ Python Software Development Kit (Π΄Π°Π»Π΅Π΅ β Python SDK) Π΄Π»Ρ Check Point Management API, Π° Π·ΡΡ. ΠΠ½ ΠΎΡΡΡΠΈΠΌΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΆΠΈΠ·Π½Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΈ Π»ΡΠ±ΠΈΡΠ΅Π»ΡΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ. Python ΠΏΡΠΈΠΎΠ±ΡΡΠ» ΠΎΠ³ΡΠΎΠΌΠ½ΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΈ Ρ ΡΠ΅ΡΠΈΠ» ΡΡΡΡΠ°Π½ΠΈΡΡ ΠΏΡΠΎΠ±Π΅Π» ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΠ±Π·ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
Π²ΠΎΠ·ΠΌΠΎΠ½ΠΎΡΡΠ΅ΠΉ . ΠΠ°Π½Π½Π°Ρ ΡΡΠ°ΡΡΡ ΡΠ»ΡΠΆΠΈΡ ΠΎΡΠ»ΠΈΡΠ½ΡΠΌ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ°ΡΡΠΈ Π½Π° Π₯Π°Π±ΡΠ΅ . ΠΡ ΠΆΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΊΡΠΈΠΏΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Python SDK ΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠΌΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ Π½Π° Π½ΠΎΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π΅ Management API Π² Π²Π΅ΡΡΠΈΠΈ 1.6(ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π½Π°ΡΠΈΠ½Π°Ρ Ρ R80.40). ΠΠ»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΡΠ°ΡΡΠΈ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ Π±Π°Π·ΠΎΠ²ΡΠ΅ Π·Π½Π°Π½ΠΈΡ ΠΏΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ API ΠΈ Python.
Check Point Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅Ρ API ΠΈ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π° ΡΠ²Π΅Ρ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ:
- β ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· API(ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠΊΡΠΈΠΏΡΡ Π½Π° ΡΠ»ΡΠ·Π°Ρ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ)
- β ΡΠ°Π±ΠΎΡΠ° ΡΠΎ ΡΠ»ΡΠ·Π°ΠΌΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ
- β ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΠ΅ΡΠΎΡΠ½ΠΈΡΠ΅ΠΉ Π² ΠΎΠ±Π»Π°ΠΊΠ΅ Check Point
- β ΡΠ°Π±ΠΎΡΠ° Ρ Identity Awareness blade Π½Π° ΡΠ»ΡΠ·Π°Ρ
- β ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΠΎΡΡΠ°Π»ΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ SMB ΡΠ»ΡΠ·Π°ΠΌΠΈ ()
- β Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ c IoT ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°ΠΌΠΈ
- β ΡΠ°Π±ΠΎΡΠ° Ρ (ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ SD-WAN security)
- β ΡΠ°Π±ΠΎΡΠ° Ρ
Python SDK Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Ρ Management API ΠΈ Gaia API. ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ°ΠΌΡΠ΅ Π²Π°ΠΆΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅.

Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΌΠΎΠ΄ΡΠ»Ρ
ΠΠΎΠ΄ΡΠ»Ρ cpapi ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π±ΡΡΡΡΠΎ ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΈΠ· Ρ ΠΏΠΎΠΌΠΎΡΡΡ pip. ΠΠΎΠ΄Π±ΡΠΎΠ±Π½Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ Π΅ΡΡΡ Π² . ΠΠ°Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π²Π΅ΡΡΠΈΡΠΌΠΈ Python 2.7 ΠΈ 3.7. Π Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ Π±ΡΠ΄ΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Python 3.7. ΠΠ΄Π½Π°ΠΊΠΎ, Python SDK ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΡΠΌΠΎ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Check Point (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 ΡΠ΅ΡΠ²Π΅ΡΠ°(ΠΎΠ½ ΠΆΠ΅ ΡΠ΅ΡΠ²Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ). Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½ΠΈΠΆΠ΅ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ server ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ Π΅ΠΌΡ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ 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:
ΠΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π΅ ΡΡΠ°Π½Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ login Π²ΡΠ·ΠΎΠ² Π½Π° API ΡΠ΅ΡΠ²Π΅Ρ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ Π²ΡΠ·ΠΎΠ² logout ΠΏΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ ΠΈΠ· Π½Π΅Π³ΠΎ. ΠΡΠ»ΠΈ ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ logout ΠΏΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Ρ API Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°:
client = APIClient(clieng_args)ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ
ΠΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ Π»ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌ ΠΏΡΠΎΡΠ΅ Π²ΡΠ΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° check_fingerprint. ΠΡΠ»ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Ρ Π΅Ρ-ΡΡΠΌΠΌΡ sha1 Π΄Π»Ρ fingerprint ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° API ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π΅ ΠΏΡΠΎΡΠ»Π°(ΠΌΠ΅ΡΠΎΠ΄ Π²Π΅ΡΠ½ΡΠ» False), ΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΎ Π²ΡΠ·Π²Π°Π½ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ(ΠΈΠ»ΠΈ Π΄Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ):
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 fingerprint ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° Π½Π° API ΡΠ΅ΡΠ²Π΅ΡΠ΅. Π Π²ΠΎΡ Π΅ΡΠ»ΠΈ ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ sha1 fingerprint ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° API ΡΠ΅ΡΠ²Π΅ΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΡΠ²Π»Π΅Π½Π° ΠΎΡΠΈΠ±ΠΊΠ° (ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΈΠ»ΠΈ Π±ΡΠ» ΠΈΠ·ΠΌΠ΅Π½ΡΠ½), ΠΌΠ΅ΡΠΎΠ΄ check_fingerprint ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ/ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π½ΡΠΌ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ Π² Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅. ΠΠ°Π½Π½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ Π²ΠΎΠ²ΡΠ΅ (Π½ΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ»ΡΡΠ°Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΡΠΊΡΠΈΠΏΡΠΎΠ² Π½Π° ΡΠ°ΠΌΠΎΠΌ API ΡΠ΅ΡΠ²Π΅ΡΠ΅, ΠΏΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΊ 127.0.0.1), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ APIClientArgs β unsafe_auto_accept (ΡΠΌ. ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΏΡΠΎ APIClientArgs ΡΠ°Π½Π΅Π΅ Π² Β«ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡΒ»).
client_args = APIClientArgs(unsafe_auto_accept=True)Login Π½Π° API ΡΠ΅ΡΠ²Π΅Ρ
Π£ APIClient Π΅ΡΡΡ ΡΠ΅Π»ΡΡ 3 ΠΌΠ΅ΡΠΎΠ΄Π° Π»ΠΎΠ³ΠΈΠ½Π° Π½Π° API ΡΠ΅ΡΠ²Π΅Ρ, ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ Π·Π°ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ sid(session-id), ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ API Π²ΡΠ·ΠΎΠ²Π΅ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅(ΠΈΠΌΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° β X-chkp-sid), ΡΠ°ΠΊ ΡΡΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ.
ΠΠ΅ΡΠΎΠ΄ login
ΠΠ°ΡΠΈΠ°Π½Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π»ΠΎΠ³ΠΈΠ½Π° ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ(Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ admin ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ 1q2w3e ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ ΠΊΠ°ΠΊ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ):
login = client.login('admin', '1q2w3e') Π ΠΌΠ΅ΡΠΎΠ΄Π΅ login Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΏΡΠΈΠ²ΠΎΠΆΡ ΠΈΡ ΠΈΠΌΠ΅Π½Π° ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ:
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 key):
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==') Π ΠΌΠ΅ΡΠΎΠ΄Π΅ login_with_api_key Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠ°ΠΊΠΈΠ΅ ΠΆΠ΅ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΈ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ login.
ΠΠ΅ΡΠΎΠ΄ login_as_root
ΠΠ°ΡΠΈΠ°Π½Ρ loginβΠ° Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ Ρ API ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ:
login = client.login_as_root()ΠΠ»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π΄ΠΎΡΡΡΠΏΠ½Ρ Π²ΡΠ΅Π³ΠΎ Π΄Π²Π° ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°:
domain=None, payload=NoneΠ Π½Π°ΠΊΠΎΠ½Π΅Ρ ΡΠ°ΠΌΠΈ API Π²ΡΠ·ΠΎΠ²Ρ
Π£ Π½Π°Ρ Π΅ΡΡΡ Π΄Π²Π° Π²Π°ΡΠΈΠ°Π½ΡΠ° Π΄Π΅Π»Π°ΡΡ API Π²ΡΠ·ΠΎΠ²Ρ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅ΡΠΎΠ΄Ρ api_call ΠΈ api_query. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±Π΅ΡΡΠΌΡΡ Π² ΡΡΠΌ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ ΡΠ°Π·Π½ΠΈΡΠ°.
api_call
ΠΠ°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ Π΄Π»Ρ Π»ΡΠ±ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ². ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΠ°ΡΡΡ Π΄Π»Ρ api Π²ΡΠ·ΠΎΠ²Π° ΠΈ payload Π² ΡΠ΅Π»Π΅ Π·Π°ΠΏΡΠΎΡΠ° ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΡΠ»ΠΈ payload ΠΏΡΡΡΠΎΠΉ, ΡΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π²ΠΎΠ²ΡΠ΅:
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
Π‘ΡΠ°Π·Ρ ΠΎΠ³ΠΎΠ²ΠΎΡΡΡΡ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²ΠΎΠ², Π²ΡΠ²ΠΎΠ΄ ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ offset(ΡΠ΄Π²ΠΈΠ³). Π’Π°ΠΊΠΎΠΉ Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° Π² Π½ΡΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΠΎΡ ΡΠΏΠΈΡΠΊΠ° Π²ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠΈΠΏΠ° Ρ ΠΎΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΠ»Ρ ΡΠ°ΠΊΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² API Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ· 50 ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ(ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ Π»ΠΈΠΌΠΈΡ Π΄ΠΎ 500 ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΠΎΡΠ²Π΅ΡΠ΅). Π Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π½Π΅ Π΄ΡΡΠ³Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·, ΠΌΠ΅Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ offset Π² 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, show-packages. ΠΠΎ ΡΠ°ΠΊΡΡ, Π² ΠΈΠΌΠ΅Π½ΠΈ ΡΡΠΈΡ 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 ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , Π½Π° ΡΠ°ΠΌΡΡ Π²Π°ΠΆΠ½ΡΡ ΠΌΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠΌΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅.

success
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ API Π²ΡΠ·ΠΎΠ² ΠΏΡΠΎΡΡΠ» ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈ Π²Π΅ΡΠ½ΡΠ» ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ success:
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) statuscode
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ΄ ΠΎΡΠ²Π΅ΡΠ° ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ API Π²ΡΠ·ΠΎΠ²Π°.
In [62]: api_versions.status_code
Out[62]: 400
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΊΠΎΠ΄Ρ ΠΎΡΠ²Π΅ΡΠΎΠ²: 200,400,401,403,404,409,500,501.
set_success_status
ΠΡΠΈ ΡΡΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°ΡΡΡΠ° success. Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ, ΡΡΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΡΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ, Π΄Π°ΠΆΠ΅ ΠΎΠ±ΡΡΠ½ΡΡ ΡΡΡΠΎΠΊΡ. ΠΠΎ ΡΠ΅Π°Π»ΡΠ½ΡΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ±ΡΠΎΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π² False ΠΏΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠΎΠΏΡΡΡΡΠ²ΡΡΡΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΡΡ . ΠΠΈΠΆΠ΅ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡΡ Π·Π°Π΄Π°ΡΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, Π½ΠΎ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΡΠΈΡΠ°ΡΡ ΡΡΠΎΡ Π·Π°ΠΏΡΠΎΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΡΠΌ(Π²ΡΡΡΠ°Π²ΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ success Π² 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)
breakresponse()
ΠΠ΅ΡΠΎΠ΄ response ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ»ΠΎΠ²Π°ΡΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΎΡΠ²Π΅ΡΠ°(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']}}
data
ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π»ΠΎ ΠΎΡΠ²Π΅ΡΠ°(body) Π±Π΅Π· ΠΈΠ·Π»ΠΈΡΠ½Π΅ΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.
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']}
error_message
ΠΠ°Π½Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½Π°, ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ 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 Π²ΡΠ·ΠΎΠ²(Π½Π΅ ΡΡΠΈΡΠ°Ρ ΡΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° publish). Π’Π°ΠΊΠΆΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ 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 Π²ΡΠ·ΠΎΠ² ΡΠΈΠΏΠ° batch, ΠΎΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π² 10 ΡΠ°Π· Π±ΡΡΡΡΠ΅Π΅. ΠΠ° Π±ΠΎΠ»ΡΡΠ΅ΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠ°Π·Π½ΠΈΡΠ° Π±ΡΠ΄Π΅Ρ Π΅ΡΡ Π±ΠΎΠ»Π΅Π΅ Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΡΡΠ΅ΠΉ.
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ set-objects-batch. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ API Π²ΡΠ·ΠΎΠ²Π° ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΌΠ°ΡΡΠΎΠ²ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π»ΡΠ±ΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΠΌ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΈΠ· ΠΏΡΠΎΡΠ»ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° (Π΄ΠΎ .124 Ρ ΠΎΡΡΠ°, ΠΏΡΠΈΡΡΠΌ ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌ ΡΠΎΠΆΠ΅) ΡΠ²Π΅Ρ sienna, Π° Π²ΡΠΎΡΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ Π°Π΄ΡΠ΅ΡΠΎΠ² Π½Π°Π·Π½Π°ΡΠΈΠΌ ΡΠ²Π΅Ρ khaki.
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅
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. Π ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΄Π°Π»ΡΠ΅Ρ Π²ΡΠ΅ Ρ ΠΎΡΡΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΡΠ°Π½Π΅Π΅ ΡΠ΅ΡΠ΅Π· 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)
ΠΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π² Π½ΠΎΠ²ΡΡ ΡΠ΅Π»ΠΈΠ·Π°Ρ ΠΠ Check Point, ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΡΠ°ΡΡ ΠΈ API Π²ΡΠ·ΠΎΠ²Ρ. Π’Π°ΠΊ, Π² R80.40 ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ ΡΠ°ΠΊΠΈΠ΅ Β«ΡΠΈΡΠΈΒ» ΠΊΠ°ΠΊ Revert to revision ΠΈ Smart Task, ΠΈ Π΄Π»Ρ Π½ΠΈΡ ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΠ»ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ API Π²ΡΠ·ΠΎΠ²Ρ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Π²Π΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ ΠΈΠ· Legacy ΠΊΠΎΠ½ΡΠΎΠ»Π΅ΠΉ Π² ΡΠ΅ΠΆΠΈΠΌ Unified Policy ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΠ°ΡΡΠ°Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ API. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄ΠΎΠ»Π³ΠΎΠΆΠ΄Π°Π½Π½ΡΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Π² Π²Π΅ΡΡΠΈΠΈ ΠΠ R80.40 ΡΡΠ°Π» ΠΏΠ΅ΡΠ΅Π΅Π·Π΄ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ HTTPS Inspection ΠΈΠ· Legacy ΡΠ΅ΠΆΠΈΠΌΠ° Π² ΡΠ΅ΠΆΠΈΠΌ Unified Policy, ΠΈ Π΄Π°Π½Π½ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠ» API Π²ΡΠ·ΠΎΠ²Ρ. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π½Π° Π²Π΅ΡΡ Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ HTTPS Inspection policy ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ°Π΅Ρ ΠΈΠ· ΠΈΠ½ΡΠΏΠ΅ΠΊΡΠΈΠΈ 3 ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ(ΠΠ΄ΠΎΡΠΎΠ²ΡΠ΅, Π€ΠΈΠ½Π°Π½ΡΡ, ΠΠΎΡΡΠ΄Π°ΡΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ), ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ ΠΈΠ½ΡΠΏΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π·Π°ΠΊΠΎΠ½Π°Π΄Π°ΡΠ΅Π»ΡΡΡΠ²ΠΎΠΌ Π² ΡΡΠ΄Π΅ ΡΡΡΠ°Π½.
ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π² ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ HTTPS Inspection
from cpapi import APIClient, APIClientArgs
client_args = APIClientArgs(server="192.168.47.240")
data = {
"layer" : "Default Layer",
"position" : "top",
"name" : "Legal Requirements",
"action": "bypass",
"site-category": ["Health", "Government / Military", "Financial Services"]
}
with APIClient(client_args) as client:
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
add_https_rule = client.api_call("add-https-rule", data)
publish = client.api_call("publish")
ΠΠ°ΠΏΡΡΠΊ Python ΡΠΊΡΠΈΠΏΡΠΎΠ² Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Check Point
ΠΡΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΊΠ°ΠΊ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠΊΡΠΈΠΏΡΡ Π½Π° Python ΠΏΡΡΠΌΠΎ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Ρ Π²Π°Ρ Π½Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΊ API ΡΠ΅ΡΠ²Π΅ΡΡ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ. Π― Π·Π°ΠΏΠΈΡΠ°Π» ΡΠ΅ΡΡΠΈΠΌΠΈΠ½ΡΡΠ½ΠΎΠ΅ Π²ΠΈΠ΄Π΅ΠΎ Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΌΠΎΠ΄ΡΠ»Ρ cpapi ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ Π·Π°ΠΏΡΡΠΊΠ° Python ΡΠΊΡΠΈΠΏΡΠΎΠ² Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ»ΡΠ·Π° Π΄Π»Ρ ΡΠ°ΠΊΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ, ΠΊΠ°ΠΊ Π°ΡΠ΄ΠΈΡ ΡΠ΅ΡΠΈ Security CheckUp. ΠΠ· ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ: Π² Π²Π΅ΡΡΠΈΠΈ Python 2.7 Π΅ΡΡ Π½Π΅ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ input, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π²Π²ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ raw_input. Π ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΌ, ΠΊΠΎΠ΄ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΊΠ°ΠΊ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Ρ Π΄ΡΡΠ³ΠΈΡ ΠΌΠ°ΡΠΈΠ½, ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ login_as_root, Π΄Π°Π±Ρ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ ΠΆΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ username, ΠΏΠ°ΡΠΎΠ»Ρ ΠΈ 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 Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Π² ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π΅ , ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π² ΡΠ΅Π±Π΅ ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ² ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
ΠΡΠΈΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄ΠΈΠ½Π³Π° ΠΈ ΡΠΏΠ°ΡΠΈΠ±ΠΎ, ΡΡΠΎ Π΄ΠΎΡΠΈΡΠ°Π»ΠΈ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ°!
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com

