Fullur kraftur samskipta við API kemur í ljós þegar það er notað ásamt forritskóða, þegar það verður hægt að búa til API beiðnir og verkfæri til að greina API svör. Hins vegar er það enn ómerkjanlegt Python hugbúnaðarþróunarsett (hér eftir nefnt Python SDK) fyrir Check Point Management API, en til einskis. Það einfaldar verulega líf þróunaraðila og sjálfvirkniáhugamanna. Python hefur náð gífurlegum vinsældum undanfarið og ég ákvað að fylla í skarðið og rifja upp helstu eiginleikana. Check Point API Python þróunarsett. Þessi grein þjónar sem frábær viðbót við aðra grein um Habré Check Point R80.10 API. Stjórnun í gegnum CLI, forskriftir og fleira. Við munum skoða hvernig á að skrifa forskriftir með Python SDK og skoða nánar nýju stjórnunar API virknina í útgáfu 1.6 (studd frá R80.40). Til að skilja greinina þarftu grunnþekkingu á að vinna með API og Python.
Check Point er að þróa API virkan og í augnablikinu hefur eftirfarandi verið gefið út:
Python SDK styður sem stendur aðeins samskipti við stjórnunarforritaskil og Gaia API. Við munum skoða mikilvægustu flokka, aðferðir og breytur í þessari einingu.
Að setja upp eininguna
Module cpapi setur fljótt og auðveldlega frá opinber Check Point geymsla á github með hjálpinni Pip. Ítarlegar uppsetningarleiðbeiningar eru fáanlegar í README.md. Þessi eining er aðlöguð til að vinna með Python útgáfum 2.7 og 3.7. Í þessari grein verða dæmi um notkun Python 3.7. Hins vegar er hægt að keyra Python SDK beint frá Check Point Management Server (Smart Management), en þeir styðja aðeins Python 2.7, svo síðasti hluti mun veita kóða fyrir útgáfu 2.7. Strax eftir að einingin hefur verið sett upp mæli ég með að skoða dæmin í möppunum examples_python2 и examples_python3.
getting Started
Til þess að við getum unnið með íhluti cpapi einingarinnar þurfum við að flytja inn úr einingunni cpapi að minnsta kosti tveir nauðsynlegir flokkar:
APIClient и APIClientArgs
from cpapi import APIClient, APIClientArgs
Class APIClientArgs er ábyrgur fyrir tengibreytum við API netþjóninn og bekkinn APIClient ber ábyrgð á samskiptum við API.
Ákvörðun tengibreytur
Til að skilgreina ýmsar breytur fyrir tengingu við API þarftu að búa til tilvik af bekknum APIClientArgs. Í grundvallaratriðum eru færibreytur þess fyrirfram skilgreindar og þegar handritið er keyrt á stjórnþjóninum þarf ekki að tilgreina þær.
client_args = APIClientArgs()
En þegar þú keyrir á þriðja aðila gestgjafa þarftu að tilgreina að minnsta kosti IP tölu eða hýsilheiti API netþjónsins (einnig þekktur sem stjórnunarþjónn). Í dæminu hér að neðan skilgreinum við færibreytu miðlaratengingar og úthlutum henni IP tölu stjórnunarþjónsins sem streng.
Við skulum skoða allar breytur og sjálfgefin gildi þeirra sem hægt er að nota þegar tengst er við API netþjóninn:
Rök fyrir __init__ aðferð APIClientArgs flokksins
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
Ég tel að rökin sem hægt er að nota í tilfellum af APIClientArgs bekknum séu leiðandi fyrir Check Point stjórnendur og krefjist ekki frekari athugasemda.
Tengist í gegnum APIClient og samhengisstjóra
Class APIClient Þægilegasta leiðin til að nota það er í gegnum samhengisstjórann. Allt sem þarf að senda til tilviks af APIClient bekknum eru tengibreytur sem voru skilgreindar í fyrra skrefi.
with APIClient(client_args) as client:
Samhengisstjórinn hringir ekki sjálfkrafa innskráningarsímtal til API-þjónsins, heldur hringir hann út þegar hann hættir. Ef af einhverjum ástæðum er ekki krafist útskráningar eftir að hafa unnið með API símtöl, þarftu að byrja að vinna án þess að nota samhengisstjórann:
client = APIClient(clieng_args)
Tengipróf
Auðveldasta leiðin til að athuga hvort tengingin uppfylli tilgreindar breytur er að nota aðferðina athuga_fingraför. Ef staðfesting á sha1 kjötkássa summu fyrir fingrafar API vottorðs netþjóns mistekst (aðferðin skilaði False), þá er þetta venjulega af völdum tengingarvandamála og við getum stöðvað keyrslu forritsins (eða gefið notandanum tækifæri til að leiðrétta tengingargögnin):
if client.check_fingerprint() is False:
print("Could not get the server's fingerprint - Check connectivity with the server.")
exit(1)
Athugið að í framtíðinni er bekkurinn APIClient mun athuga hvert API símtal (aðferðir api_call и api_query, við munum tala um þau aðeins lengra) sha1 fingrafaravottorð á API netþjóninum. En ef villa finnst (vottorðið er óþekkt eða hefur verið breytt), aðferð athuga_fingraför mun gefa tækifæri til að bæta við/breyta upplýsingum um það á staðbundinni vél sjálfkrafa. Hægt er að slökkva á þessari athugun alveg (en það er aðeins hægt að mæla með þessu ef forskriftir eru keyrðar á API þjóninum sjálfum, þegar tengst er við 127.0.0.1), með því að nota APIClientArgs rökin - unsafe_auto_accept (sjá meira um APIClientArgs fyrr í „Skilgreina tengingarfæribreytur“).
У APIClient það eru allt að 3 aðferðir til að skrá þig inn á API netþjóninn og hver þeirra skilur merkinguna SID(session-id), sem er notað sjálfkrafa í hverju síðari API símtali í hausnum (nafnið í haus þessarar færibreytu er X-chkp-síðu), svo það er engin þörf á að vinna þessa færibreytu frekar.
innskráningaraðferð
Valkostur með því að nota innskráningu og lykilorð (í dæminu eru notandanafnið admin og lykilorðið 1q2w3e send sem staðsetningarrök):
login = client.login('admin', '1q2w3e')
Viðbótar valfrjálsar færibreytur eru einnig fáanlegar í innskráningaraðferðinni; hér eru nöfn þeirra og sjálfgefin gildi:
Valkostur með því að nota API-lykil (studdur frá og með stjórnunarútgáfu R80.40/Management API v1.6, "3TsbPJ8ZKjaJGvFyoFqHFA==" þetta er API lykilgildi fyrir einn af notendum á stjórnunarþjóninum með API lykilheimildaraðferðinni):
Í aðferð login_with_api_key sömu valfrjálsu færibreytur eru fáanlegar og í aðferðinni skrá inn.
login_as_root aðferð
Valkostur til að skrá þig inn á staðbundna vél með API netþjóni:
login = client.login_as_root()
Það eru aðeins tvær valfrjálsar færibreytur í boði fyrir þessa aðferð:
domain=None, payload=None
Og að lokum kallar API sig
Við höfum tvo möguleika til að hringja í API með aðferðum api_call и api_query. Við skulum reikna út hver munurinn er á þeim.
api_call
Þessi aðferð á við fyrir öll símtöl. Við þurfum að fara framhjá síðasta hlutanum fyrir API-símtalið og hleðsluna í beiðninni ef þörf krefur. Ef farmur er tómur, þá er alls ekki hægt að senda það:
Leyfðu mér strax að taka fyrirvara um að þessi aðferð á aðeins við um símtöl þar sem framleiðsla felur í sér offset. Slík ályktun á sér stað þegar hún inniheldur eða getur innihaldið mikið magn upplýsinga. Til dæmis gæti þetta verið beiðni um lista yfir alla búna hýsilhluti á stjórnunarþjóninum. Fyrir slíkar beiðnir skilar API sjálfgefið lista yfir 50 hluti (þú getur aukið mörkin í 500 hluti í svarinu). Og til að draga ekki upplýsingarnar nokkrum sinnum, með því að breyta offset færibreytunni í API beiðninni, er til api_query aðferð sem gerir þetta sjálfkrafa. Dæmi um símtöl þar sem þessi aðferð er nauðsynleg: sýningarlotur, sýningargestgjafar, sýningarnet, sýningar-wildcards, sýningarhópar, sýningarheimilisfang, sýna-einfaldar-gáttir, sýna-einfaldar-þyrpingar, sýna-aðgangshlutverk, sýna-traust-viðskiptavini, sýningarpakkar. Reyndar sjáum við fleirtöluorð í nafni þessara API símtala, þannig að þessi símtöl verða auðveldari í gegnum api_query
Eftir þetta er hægt að nota breytur og aðferðir bekkjarins APIResponse(bæði innan samhengisstjórans og utan). Á bekknum APIResponse 4 aðferðir og 5 breytur eru fyrirfram skilgreindar; við munum fjalla nánar um þær mikilvægustu.
árangur
Til að byrja með væri gott að ganga úr skugga um að API símtalið heppnaðist og skilaði niðurstöðu. Það er til aðferð við þetta árangur:
In [49]: api_versions.success
Out[49]: True
Skilar True ef API símtalið heppnaðist (svarkóði - 200) og False ef ekki tókst (hver annar svarkóði). Það er þægilegt að nota strax eftir API símtal til að birta mismunandi upplýsingar eftir svarkóða.
if api_ver.success:
print(api_versions.data)
else:
print(api_versions.err_message)
stöðukóða
Skilar svarkóðanum eftir að API símtal hefur verið hringt.
Í þessu tilviki gæti verið nauðsynlegt að breyta gildi árangursstöðunnar. Tæknilega séð geturðu sett hvað sem er þar, jafnvel venjulegan streng. En raunverulegt dæmi væri að endurstilla þessa færibreytu á False við ákveðnar meðfylgjandi aðstæður. Hér að neðan, gefðu gaum að dæminu þegar verkefni eru í gangi á stjórnunarþjóninum, en við munum telja þessa beiðni misheppnaða (við munum stilla árangursbreytuna á False, þrátt fyrir að API símtalið hafi gengið vel og skilað kóða 200).
for task in task_result.data["tasks"]:
if task["status"] == "failed" or task["status"] == "partially succeeded":
task_result.set_success_status(False)
break
svar()
Svaraðferðin gerir þér kleift að skoða orðabókina með svarkóðanum (status_code) og svarhlutanum (body).
Þessar upplýsingar eru aðeins tiltækar þegar villa kom upp við vinnslu API beiðninnar (svarkóði ekki 200). Dæmi framleiðsla
In [107]: api_versions.error_message
Out[107]: 'code: generic_err_invalid_parameter_namenmessage: Unrecognized parameter [1]n'
Gagnleg dæmi
Eftirfarandi eru dæmi sem nota API símtölin sem bætt var við í Management API 1.6.
Fyrst skulum við skoða hvernig símtöl virka add-host и add-address-range. Segjum að við þurfum að búa til allar IP tölur undirnetsins 192.168.0.0/24, síðasti áttundur þeirra er 5, sem hluti af hýsilgerðinni, og skrifa allar aðrar IP tölur sem hluti af vistfangasviðsgerðinni. Í þessu tilviki skaltu útiloka undirnetsfangið og útsendingarvistfangið.
Svo, hér að neðan er handrit sem leysir þetta vandamál og býr til 50 hluti af hýsilgerðinni og 51 hluti af veffangasviðsgerðinni. Til að leysa vandamálið þarf 101 API símtal (án lokaútgáfukallsins). Einnig, með því að nota timeit eininguna, reiknum við tímann sem það tekur að keyra handritið þar til breytingarnar eru birtar.
Forskrift með add-host og 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')
Í rannsóknarstofuumhverfinu mínu tekur þetta handrit á milli 30 og 50 sekúndur að keyra, allt eftir álagi á stjórnunarþjóninum.
Nú skulum við sjá hvernig á að leysa sama vandamál með því að nota API símtal bæta við-hlutum-lotu, stuðningi sem var bætt við í API útgáfu 1.6. Þetta símtal gerir þér kleift að búa til marga hluti í einu í einni API beiðni. Þar að auki geta þetta verið hlutir af mismunandi gerðum (til dæmis vélar, undirnet og vistfangasvið). Þannig er hægt að leysa verkefni okkar innan ramma eins API símtals.
Forskrift með 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')
Og að keyra þetta handrit í rannsóknarstofuumhverfinu mínu tekur frá 3 til 7 sekúndur, allt eftir álagi á stjórnunarþjóninum. Það er, að meðaltali, á 101 API hlutum, keyrir hópsímtal 10 sinnum hraðar. Á stærri fjölda hluta verður munurinn enn áhrifameiri.
Nú skulum við sjá hvernig á að vinna með setja-hlutir-lotu. Með því að nota þetta API símtal getum við breytt hvaða breytu sem er. Við skulum stilla fyrri helming heimilisfönganna frá fyrra dæmi (allt að .124 vélar og svið líka) á litinn sienna og úthluta khaki litnum á seinni helming heimilisfanganna.
Að breyta lit hlutanna sem voru búnir til í fyrra dæminu
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")
Þú getur eytt mörgum hlutum í einu API símtali með því að nota eyða-hlutum-lotu. Nú skulum við skoða kóðadæmi sem eyðir öllum gestgjöfum sem áður voru búnir til í gegnum bæta við-hlutum-lotu.
Að eyða hlutum með því að nota 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)
Allar aðgerðir sem birtast í nýjum útgáfum af Check Point hugbúnaði fá strax API símtöl. Þannig birtust í R80.40 slíkir „eiginleikar“ eins og Revert to endurskoðun og Smart Task og samsvarandi API símtöl voru strax undirbúin fyrir þá. Þar að auki fær öll virkni þegar farið er úr eldri leikjatölvum yfir í samræmda stefnustillingu einnig API stuðning. Til dæmis var langþráða uppfærslan í hugbúnaðarútgáfu R80.40 flutningur HTTPS skoðunarstefnunnar úr Legacy-stillingu yfir í Unified Policy-ham, og þessi virkni fékk strax API símtöl. Hér er dæmi um kóða sem bætir reglu við efstu stöðu HTTPS skoðunarstefnunnar sem útilokar 3 flokka frá skoðun (Heilsa, Fjármál, Ríkisþjónusta), sem er bannað að skoða í samræmi við lög í fjölda landa.
Keyrir Python forskriftir á Check Point stjórnunarþjóninum
Allt er eins README.md inniheldur upplýsingar um hvernig á að keyra Python forskriftir beint frá stjórnunarþjóninum. Þetta getur verið þægilegt þegar þú getur ekki tengst API þjóninum frá annarri vél. Ég tók upp sex mínútna myndband þar sem ég skoða uppsetningu á einingunni cpapi og eiginleikar þess að keyra Python forskriftir á stjórnunarþjóninum. Sem dæmi er forskrift keyrð sem gerir sjálfvirkan uppsetningu nýrrar gáttar fyrir verkefni eins og netendurskoðun Öryggisskoðun. Meðal eiginleikanna sem ég þurfti að takast á við: aðgerðin hefur ekki enn birst í Python 2.7 inntak, þannig að til að vinna úr þeim upplýsingum sem notandinn slær inn er aðgerð notuð hrátt_inntak. Annars er kóðinn sá sami og fyrir ræsingu frá öðrum vélum, aðeins það er þægilegra að nota aðgerðina login_as_root, til að tilgreina eigið notandanafn, lykilorð og IP-tölu stjórnunarþjónsins aftur.
Forskrift fyrir fljótlega uppsetningu á öryggisskoðun
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()
Dæmi um skrá með lykilorðaorðabók additional_pass.conf {
"passwords" : ["malware","malicious","infected","Infected"],
"phrases" : ["password","Password","Pass","pass","codigo","key","pwd","пароль","Пароль","Ключ","ключ","шифр","Шифр"]
}
Ályktun
Þessi grein fjallar aðeins um helstu möguleika vinnu Python SDK og mát cpapi(eins og þú gætir hafa giskað á, þá eru þetta í raun samheiti) og með því að kynna þér kóðann í þessari einingu muntu uppgötva enn fleiri möguleika í að vinna með hann. Það er mögulegt að þú viljir bæta við það með þínum eigin flokkum, aðgerðum, aðferðum og breytum. Þú getur alltaf deilt verkum þínum og skoðað önnur handrit fyrir Check Point í hlutanum CodeHub í samfélaginu CheckMates, sem sameinar bæði vöruhönnuði og notendur.
Til hamingju með kóðun og takk fyrir að lesa til enda!