Hêza tevahî ya danûstendina bi API-an re dema ku bi koda bernameyê re tê bikar anîn diyar dibe, dema ku gengaz dibe ku bi dînamîk daxwaz û amûrên API-yê ji bo analîzkirina bersivên API-ê biafirînin. Lêbelê, ew hîn jî nayê dîtin Kit Pêşveçûna Nermalava Python (ji vir şûnde wekî Python SDK tê binav kirin) ji bo Check Point Management API, lê bêwate. Ew jiyana pêşdebiran û dildarên otomasyonê bi girîngî hêsan dike. Python di van demên dawî de populerbûnek pir mezin bi dest xist û min biryar da ku valahiyê tijî bikim û taybetmendiyên sereke binirxînim. . Ev gotar ji gotarek din a li ser Habré re wekî pêvekek hêja ye . Em ê binihêrin ka meriv çawa bi karanîna Python SDK-yê nivîsan dinivîse û ji nêz ve li fonksiyona nû ya Rêvebiriya API-ya di guhertoya 1.6-ê de (ji R80.40-ê dest pê dike piştgirî) binihêrin. Ji bo ku hûn gotarê fam bikin, hûn ê hewceyê zanîna bingehîn a xebata bi API û Python re bibin.
Check Point bi awayekî çalak API-ê pêşve dike û di vê gavê de jêrîn hatine berdan:
- - bi servera kontrolê re bi API-yê re bixebitin (û şiyana pêkanîna nivîsarên li ser dergehên ku ji hêla servera kontrolê ve têne kontrol kirin)
- - bi deriyên ewlehiyê re bixebitin
- - bi sandboxek di ewrê Check Point de dixebitin
- - li ser dergehan bi bladeya Hişmendiya Nasnameyê re dixebitin
- - bi portalê rêveberiya deriyê SMB re bixebitin ()
- - danûstendina bi kontrolkerên IoT re
- - bi kar (Çareseriya ewlehiyê ya SD-WAN)
- - bi kar
Python SDK-a nuha tenê pêwendiya bi Rêvebir API-yê û piştgirî dike Gaia API. Em ê di vê modulê de li çîn, rêbaz û guherbarên herî girîng binêrin.

Sazkirina modulê
Modûl cpapi bi lez û bez saz dike ji bi alîkariya pip. Talîmatên sazkirinê yên hûrgulî di nav de hene . Ev modul tête adaptekirin ku bi guhertoyên Python 2.7 û 3.7 re bixebite. Di vê gotarê de, mînakan dê bi karanîna Python 3.7 bêne dayîn. Lêbelê, Python SDK dikare rasterast ji Pêşkêşkara Rêvebiriya Point Check (Rêveberiya Biaqil) were xebitandin, lê ew tenê Python 2.7 piştgirî dikin, ji ber vê yekê beşa paşîn dê kodê ji bo guhertoya 2.7 peyda bike. Di cih de piştî sazkirina modulê, ez pêşniyar dikim ku li mînakan di pelrêçan de binihêrim examples_python2 и examples_python3.
Destpêkirin
Ji bo ku em karibin bi hêmanên modula cpapi re bixebitin, pêdivî ye ku em ji modulê import bikin cpapi herî kêm du dersên pêwîst:
APIClient и APIClientArgs
from cpapi import APIClient, APIClientArgs
Çar APIClientArgs berpirsiyariya pîvanên girêdana bi servera API-ê, û polê re ye APIClient berpirsiyariya danûstendina bi API-ê re ye.
Diyarkirina pîvanên girêdanê
Ji bo danasîna parametreyên cihêreng ên ji bo girêdana bi API-yê re, hûn hewce ne ku mînakek polê biafirînin APIClientArgs. Di prensîbê de, pîvanên wê ji berê ve têne diyar kirin û dema ku skrîptê li ser servera kontrolê dimeşîne, ne hewce ye ku ew bêne destnîşan kirin.
client_args = APIClientArgs()Lê gava ku li ser mêvandarek sêyemîn-ê dimeşîne, hûn hewce ne ku bi kêmanî navnîşana IP-yê an navê mêvandarê servera API-yê (her weha wekî servera rêveberiyê tê zanîn) diyar bikin. Di mînaka jêrîn de, em pîvana girêdana serverê diyar dikin û navnîşana IP-ya servera rêveberiyê wekî rêzek destnîşan dikin.
client_args = APIClientArgs(server='192.168.47.241')Ka em li hemî pîvan û nirxên wan ên xwerû yên ku dema ku bi servera API-ê ve girêdayî têne bikar anîn binêrin:
Argumanên rêbaza __init__ ya çîna 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 = contextEz bawer dikim ku argûmanên ku dikarin di mînakên çîna APIClientArgs de werin bikar anîn ji rêvebirên Check Point re xwerû ne û şîroveyên zêde hewce nakin.
Bi APIClient û rêveberê çarçoveyê ve girêdayî ye
Çar APIClient Awayê herî hêsan ku meriv wê bikar bîne bi navgîniya rêveberê çarçoveyê ye. Tiştê ku pêdivî ye ku ji mînakek pola APIClient re were derbas kirin, pîvanên pêwendiyê ye ku di gava berê de hatine destnîşankirin.
with APIClient(client_args) as client:
Rêvebirê kontekstê dê bixweber bangek têketinê li servera API-yê neke, lê gava ku jê derkeve ew ê bangek têketinê bike. Ger ji ber hin sedeman piştî qedandina xebata bi bangên API-ê re jêderketin ne hewce be, hûn hewce ne ku hûn bêyî karanîna rêveberê kontekstê dest bi xebatê bikin:
client = APIClient(clieng_args)Kontrolkirina girêdanê
Awayê herî hêsan ku meriv kontrol bike ka girêdan bi pîvanên diyarkirî re têkildar e, karanîna rêbazê ye şop_tiliya kontrolê. Ger verastkirina jimareya sha1-ê ya ji bo şopa tiliya sertîfîkaya API-ya serverê têk nebe (rêbaz vegere şaş), wê hingê ev bi gelemperî ji ber pirsgirêkên pêwendiyê çêdibe û em dikarin pêkanîna bernameyê rawestînin (an jî fersendê bidin bikarhêner ku daneyên girêdanê rast bike):
if client.check_fingerprint() is False:
print("Could not get the server's fingerprint - Check connectivity with the server.")
exit(1)
Ji kerema xwe not bikin ku di pêşerojê de pola APIClient dê her bangek API (rêbazan) kontrol bike api_call и api_query, em ê hinekî din li ser wan biaxivin) sertîfîkaya tiliya sha1 li ser servera API. Lê heke, dema ku şopa tiliya sha1 ya sertîfîkaya servera API-yê tê kontrol kirin, xeletiyek were dîtin (sertîfîka nenas e an hatî guhertin), rêbaz şop_tiliya kontrolê dê fersendê peyda bike ku meriv bixweber agahdariya li ser wê li ser makîneya herêmî zêde bike / biguhezîne. Ev kontrol dikare bi tevahî were betal kirin (lê ev tenê dikare were pêşniyar kirin ger nivîsarên li ser servera API-ê bixwe têne xebitandin, dema ku bi 127.0.0.1 ve girêdayî ye), bi karanîna argumana APIClientArgs - unsafe_auto_accept (Zêdetir di derbarê APIClientArgs de berê di "Daskirina Parametreyên Girêdanê" de bibînin).
client_args = APIClientArgs(unsafe_auto_accept=True)Têkeve servera API
У APIClient ji bo têketina servera API-ê bi qasî 3 rêbaz hene, û her yek ji wan wateyê fam dike sûd(sesion-id), ku bixweber di her bangek API-ê ya paşîn de di serî de tê bikar anîn (navê di serê vê pîvanê de ye X-chkp-sid), ji ber vê yekê ne hewce ye ku meriv vê parameterê bêtir pêvajoyê bike.
rêbaza têketinê
Vebijarka ku têketin û şîfreyê bikar tîne (di nimûne de, navê bikarhêner admin û şîfreya 1q2w3e wekî argumanên pozîsyonê têne derbas kirin):
login = client.login('admin', '1q2w3e') Parametreyên vebijarkî yên din jî di rêbaza têketinê de hene, li vir nav û nirxên xwerû hene:
continue_last_session=False, domain=None, read_only=False, payload=NoneRêbaza Têketinê_bi_api_key
Vebijarka ku bişkojek api bikar tîne (ji guhertoya rêveberiyê R80.40/Management API v1.6 dest pê dike, "3TsbPJ8ZKjaJGvFyoFqHFA==" ev nirxa sereke ya API-ê ji bo yek ji bikarhênerên li ser servera rêveberiyê bi rêbaza destûrnameya mifteya API-ê ye):
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==') Di rêbazê de login_with_api_key heman pîvanên vebijarkî yên wekî di rêbazê de hene login.
rêbaza login_as_root
Vebijarka têketina makîneyek herêmî ya bi serverek API:
login = client.login_as_root()Ji bo vê rêbazê tenê du pîvanên vebijarkî hene:
domain=None, payload=NoneÛ di dawiyê de API xwe gazî dike
Du vebijarkên me hene ku em bi rêbazan bangên API-ê bikin api_call и api_query. Ka em fêr bibin ka ferqa di navbera wan de çi ye.
api_call
Ev rêbaz ji bo her bangê derbasdar e. Ger hewce be, em hewce ne ku beşa paşîn ji bo banga api û bargiraniyê di laşê daxwazê de derbas bikin. Ger bargiran vala ye, wê hingê ew bi tevahî nayê veguheztin:
api_versions = client.api_call('show-api-versions') Derketina ji bo vê daxwazê li jêr qutbûnê:
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'})Derketina ji bo vê daxwazê li jêr qutbûnê:
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
Bihêle ez tavilê rezervasyonek çêkim ku ev rêbaz tenê ji bo bangên ku derketina wan jihevdengiyê vedihewîne derbasdar e. Encamek wusa dema ku tê de hejmareke mezin a agahdariyê hebe an dibe ku tê de hebe pêk tê. Mînakî, ev dikare bibe daxwazek ji bo navnîşek hemî tiştên mêvandar ên hatine afirandin li ser servera rêveberiyê. Ji bo daxwazên weha, API ji hêla xwerû ve navnîşek 50 tiştan vedigerîne (hûn dikarin di bersivê de sînorê 500 tiştan zêde bikin). Û ji bo ku agahdariya çend caran nekişîne, di daxwaznameya API-ê de pîvana offset biguhezîne, rêbazek api_query heye ku vê xebatê bixweber dike. Nimûneyên bangên ku ev rêbaz hewce ye: danişîn-pêşandan, mazûvan-pêşandan, tora-pêşandan, qertên hovane, nîşan-kom, nîşan-navnîşan-range, nîşan-dergehên-hêsan, nîşan-kom-kom, nîşan-gihîştina-rolên, nîşan-destûr-muşteriyên, nîşan-pakêtan. Di rastiyê de, em di navê van bangên API-ê de peyvên pirjimar dibînin, ji ber vê yekê dê van bangan hêsantir bi rê ve bibin. api_query
show_hosts = client.api_query('show-hosts') Derketina ji bo vê daxwazê li jêr qutbûnê:
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
})
Pêvajoya encamên bangên API-ê
Piştî vê yekê hûn dikarin guherbar û rêbazên polê bikar bînin APIresponse(hem li hundurê rêveberê kontekstê û hem jî li derve). Li dersê APIresponse 4 rêbaz û 5 guherbar ji berê ve hatine diyarkirin, em ê bi hûrgulî li ser yên herî girîng rawestin.

serketinî
Ji bo destpêkê, ew ê ramanek baş be ku hûn pê ewle bibin ku banga API serketî bû û encamek vegerand. Ji bo vê rêbazek heye serketinî:
In [49]: api_versions.success
Out[49]: True
Ger banga API-ê serketî bû (koda bersivê - 200) Rast vedigere û heke ne serketî be jî xelet (kodek bersivê ya din). Ew hêsan e ku meriv tavilê piştî bangek API-ê bikar bîne da ku li gorî koda bersivê agahdariya cûda nîşan bide.
if api_ver.success:
print(api_versions.data)
else:
print(api_versions.err_message) statuscode
Piştî ku bangek API-ê hatî çêkirin koda bersivê vedigerîne.
In [62]: api_versions.status_code
Out[62]: 400
Kodên bersivê yên gengaz: 200,400,401,403,404,409,500,501.
set_success_status
Di vê rewşê de, dibe ku hewce be ku nirxa statûya serkeftinê biguherînin. Ji hêla teknîkî ve, hûn dikarin her tiştî li wir bixin, tewra xêzek birêkûpêk. Lê mînakek rastîn dê di bin hin şert û mercên pêvek de vegerandina vê parametreyê li False be. Li jêr, bala xwe bidin mînaka gava ku peywirên li ser servera rêveberiyê têne xebitandin hene, lê em ê vê daxwazê neserkeftî bihesibînin (em ê guhêrbara serkeftinê destnîşan bikin şaş, tevî rastiya ku banga API-ê serketî bû û koda 200 vegerî).
for task in task_result.data["tasks"]:
if task["status"] == "failed" or task["status"] == "partially succeeded":
task_result.set_success_status(False)
breakbersiv()
Rêbaza bersivê dihêle hûn ferhengê bi koda bersivê (status_code) û laşê bersivê (beden) bibînin.
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']}}
jimare
Destûrê dide we ku hûn tenê laşê bersivê (laş) bêyî agahdariya nehewce bibînin.
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
Ev agahdarî tenê dema ku di dema pêvajoya daxwaznameya API-ê de xeletiyek çêbibe (koda bersivê ne 200). Nimûne derketin
In [107]: api_versions.error_message
Out[107]: 'code: generic_err_invalid_parameter_namenmessage: Unrecognized parameter [1]n'
Mînakên kêrhatî
Li jêr mînakên ku bangên API-ê yên ku di Rêvebiriya API 1.6 de hatine zêdekirin bikar tînin hene.
Pêşîn, em binihêrin ka bang çawa dixebitin lêzêde-mêvandar и lê zêde bike-navnîşan-range. Em bibêjin ku pêdivî ye ku em hemî navnîşanên IP-ya jêrtorê 192.168.0.0/24, ku okteta paşîn 5 e, wekî tiştên celebê mêvandar biafirînin, û hemî navnîşanên IP-yê yên din wekî tiştên celebê rêza navnîşan binivîsin. Di vê rewşê de, navnîşana subnet û navnîşana weşanê derxînin.
Ji ber vê yekê, li jêr skrîptek heye ku vê pirsgirêkê çareser dike û 50 tiştên ji celebê mêvandar û 51 tiştên ji celebê rêza navnîşan diafirîne. Ji bo çareserkirina pirsgirêkê, 101 bangên API-yê hewce ne (banga weşana dawîn nayê hesibandin). Di heman demê de, bi karanîna modula timeit-ê, em wextê ku ji bo cîbicîkirina skrîptê digire heya ku guhertin têne weşandin hesab dikin.
Skrîpt bi kar add-host û lêzêde-adres-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')
Di hawîrdora laboratûara min de, ev skrîpt di navbera 30 û 50 saniyeyan de digire, li gorî barkirina servera rêveberiyê.
Naha em bibînin ka meriv çawa heman pirsgirêkê bi karanîna bangek API-ê çareser dike lê zêde bike-objects-bat, piştgiriya ku di guhertoya API 1.6 de hate zêdekirin. Ev bang dihêle hûn di yek daxwazek API-ê de di yek carî de gelek tiştan biafirînin. Wekî din, ev dikarin tiştên cûrbecûr bin (mînak, mêvandar, subnet û rêzikên navnîşan). Bi vî rengî, peywira me dikare di çarçoveya yek bangek API de were çareser kirin.
Skrîpta ku add-objects-batch bikar tîne
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')
Û xebitandina vê nivîsarê di hawîrdora laboratûara min de ji 3 heya 7 saniyeyan digire, li gorî barkirina servera rêveberiyê. Ango, bi navînî, li ser 101 tiştên API-ê, bangek celebek hevîrê 10 carî zûtir dimeşe. Li ser hejmareke mezin a tiştan cûdahî dê hê bêtir balkêş be.
Naha em bibînin ka meriv çawa pê re dixebite set-objects-batt. Bi karanîna vê bangewaziya API-ê, em dikarin her parameterek mezin biguhezînin. Werin em nîvê yekem ê navnîşanên ji mînaka berê (heta .124 mêvandar, û rêzan jî) li ser rengê sienna saz bikin, û rengê kakî ji nîvê duyemîn a navnîşanan re destnîşan bikin.
Guhertina rengê tiştên ku di mînaka berê de hatine afirandin
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")
Hûn dikarin bi karanîna yek bangek API-ê gelek tiştan jêbirin delete-objects-batch. Naha em li mînakek kodê binêrin ku hemî mêvandarên ku berê hatine afirandin jêbirin lê zêde bike-objects-bat.
Jêbirina tiştan bi karanîna 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)
Hemî fonksiyonên ku di weşanên nû yên nermalava Check Point de xuya dibin tavilê bangên API-ê digirin. Bi vî rengî, di R80.40-ê de "taybetmendiyên" wekî Vegere guhertoya û Smart Task xuya bûn, û bangên API-ê yên têkildar tavilê ji wan re hatin amadekirin. Digel vê yekê, dema ku ji konsolên Legacy berbi moda Siyaseta Yekgirtî ve diçin, hemî fonksiyonel piştgirîya API-yê jî digire. Mînakî, nûvekirina demek dirêj a di guhertoya nermalavê R80.40 de guheztina polîtîkaya Kontrolkirina HTTPS ji moda Legacy berbi moda Siyaseta Yekgirtî ve bû, û vê fonksiyonê tavilê bangên API-yê wergirt. Li vir mînakek kodê heye ku qaîdeyek li pozîsyona jorîn a Siyaseta Kontrolkirina HTTPS zêde dike ku 3 kategorî ji kontrolê derdixe (Tenduristî, Darayî, Karûbarên Hikûmetê), yên ku li gorî qanûnê li çend welatan kontrolkirina wan qedexe ye.
Rêgezek li polîtîkaya Kontrolkirina HTTPS zêde bikin
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")
Nivîsarên Python li ser servera rêveberiya Check Point dimeşîne
Her tişt wek hev e agahdarî li ser meriv çawa nivîsarên Python rasterast ji servera kontrolê dimeşîne. Dema ku hûn nikaribin ji makîneyek din bi servera API-ê ve girêdin ev dikare hêsan be. Min vîdyoyek şeş hûrdem tomar kir ku tê de ez li sazkirina modulê dinêrim cpapi û taybetmendiyên xebitandina nivîsarên Python li ser servera kontrolê. Mînakî, skrîptek tê xebitandin ku veavakirina dergehek nû ji bo peywirek wekî lênihêrîna torê otomatîk dike. Kontrolkirina Ewlekariyê. Di nav taybetmendiyên ku ez pê re mijûl bûm: fonksiyon hîn di Python 2.7 de xuya nebûye beyan, ji ber vê yekê ji bo pêvajoykirina agahdariya ku bikarhêner têkeve, fonksiyonek tê bikar anîn raw_input. Wekî din, kod wekî ku ji makîneyên din dest pê dike yek e, tenê karanîna fonksiyonê hêsantir e login_as_root, da ku hûn dîsa navê bikarhêner, şîfre û navnîşana IP-ya servera rêveberiyê diyar nekin.

Skrîpta ji bo sazkirina bilez a Kontrolkirina Ewlekariyê
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() Pelek mînakek bi ferhengek şîfreyê Additional_pass.conf
{
"passwords" : ["malware","malicious","infected","Infected"],
"phrases" : ["password","Password","Pass","pass","codigo","key","pwd","пароль","Пароль","Ключ","ключ","шифр","Шифр"]
}
encamê
Ev gotar tenê îmkanên bingehîn ên xebatê lêkolîn dike Python SDK û module cpapi(wek ku we texmîn kir, ev bi rastî hevwate ne), û bi xwendina koda di vê modulê de hûn ê hîn bêtir fersendên xebata bi wê re kifş bikin. Mimkun e ku hûn bixwazin wê bi çîn, fonksiyon, rêbaz û guhêrbarên xwe ve temam bikin. Hûn dikarin her gav xebata xwe parve bikin û di beşê de nivîsarên din ên ji bo Check Point bibînin di civakê de , ku hem pêşdebirên hilber û hem bikarhêneran tîne cem hev.
Kodkirina xweş û spas ji bo xwendina heta dawiyê!
Source: www.habr.com
