የኤፒአይ ምላሾችን ለመተንተን የኤፒአይ ጥያቄዎችን እና መሳሪያዎችን በተለዋዋጭ መንገድ ማመንጨት ሲቻል ከኤፒአይዎች ጋር ያለው ሙሉ የመግባቢያ ሃይል ከፕሮግራም ኮድ ጋር አብሮ ሲሰራ ይገለጣል። ሆኖም ፣ አሁንም የማይታወቅ ሆኖ ይቆያል Python ሶፍትዌር ልማት ኪት (ከዚህ በኋላ Python SDK ተብሎ ይጠራል) ለ የነጥብ አስተዳደር ኤፒአይን ያረጋግጡ፣ ግን በከንቱ። የገንቢዎችን እና አውቶሜሽን አድናቂዎችን ሕይወት በእጅጉ ያቃልላል። ፓይዘን በቅርብ ጊዜ ከፍተኛ ተወዳጅነት አግኝቷል እናም ክፍተቱን ለመሙላት እና ዋና ዋና ባህሪያትን ለመገምገም ወሰንኩ.
ቼክ ፖይንት ኤፒአይን በንቃት እየሰራ ሲሆን በአሁኑ ጊዜ የሚከተሉት ተለቀዋል፡
የፍተሻ ነጥብ አስተዳደር ኤፒአይ (የአሁኑ ስሪት 1.6) - ከቁጥጥር አገልጋዩ ጋር በኤፒአይ (እና በመቆጣጠሪያ አገልጋዩ በሚቆጣጠራቸው መግቢያዎች ላይ ስክሪፕቶችን የማስፈፀም ችሎታ)የፍተሻ ነጥብ GAIA API (የአሁኑ ስሪት 1.4) - ከደህንነት መግቢያዎች ጋር መሥራትስጋት መከላከል API 1.0 - በቼክ ነጥብ ደመና ውስጥ ከማጠሪያ ጋር መሥራትየማንነት ግንዛቤ ኤፒአይ - በመተላለፊያ መንገዶች ላይ ከማንነት ግንዛቤ ምላጭ ጋር መስራትየደህንነት አስተዳደር ፖርታል ኤፒአይ - ከ SMB ጌትዌይ አስተዳደር ፖርታል ጋር መሥራት (ስለ SMB መግቢያ መንገዶች ተጨማሪ )IoT API - ከ IoT መቆጣጠሪያዎች ጋር መስተጋብርCloudGuard Connect API - ጋር መስራትCloudGuard ግንኙነት (SD-WAN የደህንነት መፍትሔ)Dome9 API - ጋር መስራትዶሜ9
የ Python ኤስዲኬ በአሁኑ ጊዜ ከአስተዳደር ኤፒአይ እና ጋር መስተጋብርን ብቻ ይደግፋል Gaia ኤፒአይ. በዚህ ሞጁል ውስጥ በጣም አስፈላጊ የሆኑትን ክፍሎች, ዘዴዎች እና ተለዋዋጮች እንመለከታለን.
ሞጁሉን በመጫን ላይ
ሞዱል ሲፒፒ በፍጥነት እና በቀላሉ ከ
ቢያስቆጥርም ገና መጀመሩ ነው
ከ cpapi ሞጁል አካላት ጋር ለመስራት እንድንችል ከሞጁሉ ውስጥ ማስመጣት አለብን ሲፒፒ ቢያንስ ሁለት አስፈላጊ ክፍሎች
APIClient и APIClientArgs
from cpapi import APIClient, APIClientArgs
ክፍል APIClientArgs ከኤፒአይ አገልጋይ እና ከክፍል ጋር የግንኙነቶች መለኪያዎች ኃላፊነት አለበት። APIClient ከኤፒአይ ጋር መስተጋብር ኃላፊነት አለበት.
የግንኙነት መለኪያዎችን መወሰን
ከኤፒአይ ጋር ለመገናኘት የተለያዩ መለኪያዎችን ለመግለጽ የክፍሉን ምሳሌ መፍጠር ያስፈልግዎታል APIClientArgs. በመርህ ደረጃ, የእሱ መመዘኛዎች አስቀድሞ የተገለጹ ናቸው እና ስክሪፕቱን በመቆጣጠሪያ አገልጋይ ላይ ሲያሄዱ, መገለጽ አያስፈልጋቸውም.
client_args = APIClientArgs()
ነገር ግን በሶስተኛ ወገን አስተናጋጅ ላይ ሲሰሩ፣ ቢያንስ የአይፒ አድራሻውን ወይም የኤፒአይ አገልጋይ አስተናጋጅ ስም (የአስተዳደር አገልጋይ በመባልም ይታወቃል) መግለጽ ያስፈልግዎታል። ከዚህ በታች ባለው ምሳሌ የአገልጋይ ግንኙነት መለኪያን እንገልፃለን እና የአስተዳደር አገልጋዩን አይፒ አድራሻ እንደ ሕብረቁምፊ እንመድበዋለን።
client_args = APIClientArgs(server='192.168.47.241')
ከኤፒአይ አገልጋይ ጋር ሲገናኙ ጥቅም ላይ ሊውሉ የሚችሉትን ሁሉንም መለኪያዎች እና ነባሪ እሴቶቻቸውን እንይ፡-
የ APIClientArgs ክፍል የ__init__ ዘዴ ክርክሮች
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:
የአውድ አስተዳዳሪው በራስ ሰር የመግቢያ ጥሪ ወደ ኤፒአይ አገልጋይ አያደርግም፣ ነገር ግን ከሱ ሲወጣ የመውጣት ጥሪ ያደርጋል። በሆነ ምክንያት ከኤፒአይ ጥሪዎች ጋር መስራቱን ከጨረሱ በኋላ መውጣት የማይፈለግ ከሆነ የአውድ አስተዳዳሪውን ሳይጠቀሙ መስራት መጀመር አለብዎት፡-
client = APIClient(clieng_args)
ግንኙነቱን በመፈተሽ ላይ
ግንኙነቱ የተገለጹትን መለኪያዎች የሚያሟላ መሆኑን ለማረጋገጥ ቀላሉ መንገድ ዘዴውን መጠቀም ነው። የጣት አሻራ አረጋግጥ. ለአገልጋዩ ኤፒአይ የምስክር ወረቀት የጣት አሻራ የ sha1 hash ድምር ማረጋገጫ ካልተሳካ (ዘዴው ተመልሷል የተሳሳተ), ከዚያ ይህ ብዙውን ጊዜ በግንኙነት ችግሮች ይከሰታል እና የፕሮግራሙን አፈፃፀም ማቆም እንችላለን (ወይም ተጠቃሚው የግንኙነት ውሂቡን እንዲያስተካክል እድሉን ይስጡ)
if client.check_fingerprint() is False:
print("Could not get the server's fingerprint - Check connectivity with the server.")
exit(1)
እባክዎን ወደፊት ክፍሉን ያስተውሉ APIClient ሁሉንም የኤፒአይ ጥሪ (ዘዴዎች) ይፈትሻል አፒ_ጥሪ и አፒ_ጥያቄ፣ ስለእነሱ ትንሽ ተጨማሪ እንነጋገራለን) የ sha1 የጣት አሻራ የምስክር ወረቀት በኤፒአይ አገልጋይ ላይ። ነገር ግን የኤፒአይ አገልጋይ የምስክር ወረቀት የ sha1 አሻራ ሲፈተሽ ስህተት ከተገኘ (የእውቅና ማረጋገጫው የማይታወቅ ወይም የተቀየረ) ከሆነ ዘዴው የጣት አሻራ አረጋግጥ ስለ እሱ መረጃን በራስ-ሰር በሃገር ውስጥ ማሽን ላይ ለመጨመር/ለመቀየር እድሉን ይሰጣል። ይህ ቼክ ሙሉ በሙሉ ሊሰናከል ይችላል (ነገር ግን ይህ ሊመከር የሚችለው ስክሪፕቶች በራሱ በኤፒአይ አገልጋይ ላይ ከ127.0.0.1 ጋር ሲገናኙ) የ APIClientArgs ክርክርን በመጠቀም - ደህንነቱ ያልተጠበቀ_በራስ_ተቀበል (ስለ ኤፒአይClientArgs ቀደም ብሎ “የግንኙነት መለኪያዎችን መግለጽ” ውስጥ የበለጠ ይመልከቱ)።
client_args = APIClientArgs(unsafe_auto_accept=True)
ወደ ኤፒአይ አገልጋይ ይግቡ
У APIClient ወደ ኤፒአይ አገልጋይ ለመግባት እስከ 3 የሚደርሱ ዘዴዎች አሉ እና እያንዳንዳቸው ትርጉሙን ይረዳሉ ተዘግቷል(የክፍለ-መታወቂያ)፣ በራስጌው ውስጥ በእያንዳንዱ ቀጣይ የኤፒአይ ጥሪ ውስጥ በራስ ሰር ጥቅም ላይ የሚውል (በዚህ ግቤት ራስጌ ውስጥ ያለው ስም ነው። X-chkp-ሲድ), ስለዚህ ይህን ግቤት ተጨማሪ ሂደት አያስፈልግም.
የመግቢያ ዘዴ
መግቢያ እና የይለፍ ቃል በመጠቀም አማራጭ (ለምሳሌ ፣ የተጠቃሚ ስም አስተዳዳሪ እና የይለፍ ቃል 1q2w3e እንደ አቀማመጥ ነጋሪ እሴቶች ተላልፈዋል)
login = client.login('admin', '1q2w3e')
ተጨማሪ አማራጭ መለኪያዎች በመግቢያ ዘዴ ውስጥም ይገኛሉ፡ ስሞቻቸው እና ነባሪ እሴቶቻቸው እዚህ አሉ፡
continue_last_session=False, domain=None, read_only=False, payload=None
በapi_key ዘዴ_ይግቡ
የኤፒ ቁልፍን በመጠቀም አማራጭ (ከአስተዳደሩ ስሪት R80.40/አስተዳደር API v1.6 ጀምሮ የተደገፈ፣ "3TsbPJ8ZKjaJGvFyoFqHFA==" ይህ በአስተዳዳሪ አገልጋዩ ላይ የኤፒአይ ቁልፍ ፍቃድ ዘዴ ያለው ለአንዱ ተጠቃሚ የኤፒአይ ቁልፍ እሴት ነው፡
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
በዘዴ በኤፒ_ቁልፍ_ይግቡ እንደ ዘዴው ተመሳሳይ አማራጭ መለኪያዎች ይገኛሉ የመግቢያ ገጽ.
የመግቢያ_እንደ_ስር ዘዴ
በኤፒአይ አገልጋይ ወደ አካባቢያዊ ማሽን የመግባት አማራጭ፡-
login = client.login_as_root()
ለዚህ ዘዴ ሁለት አማራጭ መለኪያዎች ብቻ አሉ-
domain=None, payload=None
እና በመጨረሻም ኤፒአይ እራሱን ይጠራል
የኤፒአይ ጥሪዎችን በዘዴ ለማድረግ ሁለት አማራጮች አሉን። አፒ_ጥሪ и አፒ_ጥያቄ. በመካከላቸው ያለው ልዩነት ምን እንደሆነ እንወቅ።
አፒ_ጥሪ
ይህ ዘዴ ለማንኛውም ጥሪዎች ተግባራዊ ይሆናል. አስፈላጊ ከሆነ በጥያቄው አካል ውስጥ የመጨረሻውን ክፍል ለኤፒ ጥሪ እና ጭነት ማስተላለፍ አለብን። ጭነት ባዶ ከሆነ ፣ ከዚያ በጭራሽ ማስተላለፍ አይቻልም
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
})
አፒ_ጥያቄ
ይህ ዘዴ የሚመለከተው ውጤታቸው ማካካሻን ለሚያካትቱ ጥሪዎች ብቻ እንደሆነ ወዲያውኑ ቦታ አስይዝ። እንዲህ ዓይነቱ ግምት ከፍተኛ መጠን ያለው መረጃ ሲይዝ ወይም ሲይዝ ይከሰታል. ለምሳሌ፣ ይህ በአስተዳደር አገልጋዩ ላይ የሁሉንም የተፈጠሩ አስተናጋጅ ዕቃዎች ዝርዝር ጥያቄ ሊሆን ይችላል። ለእንደዚህ አይነት ጥያቄዎች ኤፒአይ የ 50 ነገሮችን ዝርዝር በነባሪ ይመልሳል (በምላሹ ውስጥ ገደቡን ወደ 500 ነገሮች መጨመር ይችላሉ)። እና በኤፒአይ ጥያቄ ውስጥ የማካካሻ መለኪያውን በመቀየር መረጃን ብዙ ጊዜ ላለመሳብ ፣ይህንን በራስ-ሰር የሚሰራ 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
})
የኤፒአይ ጥሪዎችን ውጤት በማስኬድ ላይ
ከዚህ በኋላ የክፍሉን ተለዋዋጮች እና ዘዴዎች መጠቀም ይችላሉ APIResponse(በአውድ አቀናባሪው ውስጥም ሆነ ውጭ)። በክፍል ውስጥ APIResponse 4 ዘዴዎች እና 5 ተለዋዋጮች አስቀድመው የተገለጹ ናቸው፤ በጣም አስፈላጊ በሆኑት ላይ በበለጠ ዝርዝር እንኖራለን።
ስኬት
ሲጀመር የኤፒአይ ጥሪው የተሳካ እንደነበር እና ውጤት መመለሱን ማረጋገጥ ጥሩ ሀሳብ ነው። ለዚህ የሚሆን ዘዴ አለ ስኬት:
In [49]: api_versions.success
Out[49]: True
የኤፒአይ ጥሪው የተሳካ ከሆነ (የምላሽ ኮድ - 200) እና ካልተሳካ (ሌላ ማንኛውም የምላሽ ኮድ) እውነት ከሆነ ይመለሳል። በምላሽ ኮድ ላይ በመመስረት የተለያዩ መረጃዎችን ለማሳየት ከኤፒአይ ጥሪ በኋላ ወዲያውኑ ለመጠቀም ምቹ ነው።
if api_ver.success:
print(api_versions.data)
else:
print(api_versions.err_message)
የሁኔታ ኮድ
የኤፒአይ ጥሪ ከተደረገ በኋላ የምላሹን ኮድ ይመልሳል።
In [62]: api_versions.status_code
Out[62]: 400
ሊሆኑ የሚችሉ የምላሽ ኮዶች፡- 200,400,401,403,404,409,500,501.
የስኬት_ሁኔታን አዘጋጅ
በዚህ ሁኔታ የስኬት ሁኔታን ዋጋ መለወጥ አስፈላጊ ሊሆን ይችላል. በቴክኒክ ፣ ማንኛውንም ነገር እዚያ ፣ መደበኛ ሕብረቁምፊ እንኳን ማስቀመጥ ይችላሉ። ነገር ግን እውነተኛው ምሳሌ ይህንን ግቤት በተወሰኑ ተጓዳኝ ሁኔታዎች ወደ ሐሰት ማቀናበር ነው። ከዚህ በታች በአስተዳዳሪው አገልጋይ ላይ የሚሰሩ ስራዎች ሲኖሩ ለምሳሌው ትኩረት ይስጡ, ነገር ግን ይህ ጥያቄ ያልተሳካ እንደሆነ እንቆጥረዋለን (የስኬት ተለዋዋጭውን እናዘጋጃለን. የተሳሳተምንም እንኳን የኤፒአይ ጥሪው የተሳካ እና የተመለሰ ኮድ 200 ቢሆንም)።
for task in task_result.data["tasks"]:
if task["status"] == "failed" or task["status"] == "partially succeeded":
task_result.set_success_status(False)
break
ምላሽ()
የምላሽ ዘዴ መዝገበ ቃላቱን በምላሽ ኮድ (status_code) እና ምላሽ ሰጪ አካል (አካል) እንዲመለከቱ ያስችልዎታል።
In [94]: api_versions.response()
Out[94]:
{'status_code': 200,
'data': {'current-version': '1.6',
'supported-versions': ['1', '1.1', '1.2', '1.3', '1.4', '1.5', '1.6']}}
መረጃ
ያለ አላስፈላጊ መረጃ የምላሹን አካል (አካል) ብቻ እንዲያዩ ያስችልዎታል።
In [93]: api_versions.data
Out[93]:
{'current-version': '1.6',
'supported-versions': ['1', '1.1', '1.2', '1.3', '1.4', '1.5', '1.6']}
የተሳሳተ መልእክት
ይህ መረጃ የሚገኘው የኤፒአይ ጥያቄን (የምላሽ ኮድ) በማስኬድ ላይ ሳለ ስህተት ሲከሰት ብቻ ነው። አይደለም 200) ምሳሌ ውፅዓት
In [107]: api_versions.error_message
Out[107]: 'code: generic_err_invalid_parameter_namenmessage: Unrecognized parameter [1]n'
ጠቃሚ ምሳሌዎች
የሚከተሉት በአስተዳደር API 1.6 ውስጥ የታከሉ የኤፒአይ ጥሪዎችን የሚጠቀሙ ምሳሌዎች ናቸው።
በመጀመሪያ ፣ ጥሪዎች እንዴት እንደሚሠሩ እንመልከት add-አስተናጋጅ и አክል-አድራሻ-ክልል. ሁሉንም የአይ ፒ አድራሻዎች ንኡስ ኔት 192.168.0.0/24 መፍጠር አለብን እንበል፣ የመጨረሻው ጥቅምት 5 ነው፣ እንደ አስተናጋጅ አይነት ዕቃዎች፣ እና ሁሉንም ሌሎች የአይ ፒ አድራሻዎችን እንደ የአድራሻ ክልል አይነት ይፃፉ። በዚህ አጋጣሚ የንዑስኔት አድራሻውን እና የስርጭት አድራሻውን አያካትቱ።
ስለዚህ ከዚህ በታች ይህንን ችግር የሚፈታ እና 50 የአስተናጋጁ አይነት እና 51 የአድራሻ ክልል አይነት የሚፈጥር ስክሪፕት አለ። ችግሩን ለመፍታት 101 የኤፒአይ ጥሪዎች ያስፈልጋሉ (የመጨረሻውን የህትመት ጥሪ ሳይቆጠር)። እንዲሁም, የጊዜ ሞጁሉን በመጠቀም, ለውጦቹ እስኪታተሙ ድረስ ስክሪፕቱን ለማስፈጸም የሚወስደውን ጊዜ እናሰላለን.
add-host እና add-አድራሻ-ክልል በመጠቀም ስክሪፕት
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 ሰከንድ ይወስዳል።
አሁን የኤፒአይ ጥሪን በመጠቀም ተመሳሳይ ችግር እንዴት እንደሚፈታ እንይ አክል-ነገሮች-ባችበኤፒአይ ስሪት 1.6 ውስጥ የታከለለት ድጋፍ። ይህ ጥሪ በአንድ ኤፒአይ ጥያቄ ውስጥ ብዙ ነገሮችን በአንድ ጊዜ እንድትፈጥር ይፈቅድልሃል። ከዚህም በላይ እነዚህ የተለያዩ ዓይነት ዕቃዎች ሊሆኑ ይችላሉ (ለምሳሌ አስተናጋጆች፣ ንዑስ መረቦች እና የአድራሻ ክልሎች)። ስለዚህ የእኛ ተግባር በአንድ የኤፒአይ ጥሪ ማዕቀፍ ውስጥ ሊፈታ ይችላል።
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 ኤፒአይ ነገሮች ላይ የጥሪ አይነት ጥሪ 10 ጊዜ በፍጥነት ይሰራል። በትላልቅ እቃዎች ላይ ልዩነቱ የበለጠ አስደናቂ ይሆናል.
አሁን እንዴት መስራት እንዳለብን እንይ አዘጋጅ-ነገሮች-ባች. ይህንን የኤፒአይ ጥሪ በመጠቀም ማንኛውንም ግቤት በጅምላ መለወጥ እንችላለን። የአድራሻዎቹን የመጀመሪያ አጋማሽ ካለፈው ምሳሌ (እስከ .124 አስተናጋጆች እና ክልሎችም) ወደ ሲና ቀለም እናስቀምጥ እና የካኪን ቀለም በአድራሻዎቹ ሁለተኛ አጋማሽ ላይ እንመድበው።
በቀድሞው ምሳሌ ውስጥ የተፈጠሩትን ነገሮች ቀለም መቀየር
from cpapi import APIClient, APIClientArgs
client_args = APIClientArgs(server="192.168.47.240")
objects_list_ip_first = []
objects_list_range_first = []
objects_list_ip_second = []
objects_list_range_second = []
for ip in range(5,125,5):
data = {"name": f'h_192.168.0.{ip}', "color": "sienna"}
objects_list_ip_first.append(data)
for ip in range(125,255,5):
data = {"name": f'h_192.168.0.{ip}', "color": "khaki"}
objects_list_ip_second.append(data)
first_ip = 1
last_ip = 4
while last_ip < 125:
data = {"name": f"r_192.168.0.{first_ip}-{last_ip}", "color": "sienna"}
objects_list_range_first.append(data)
first_ip+=5
last_ip+=5
while last_ip < 255:
data = {"name": f"r_192.168.0.{first_ip}-{last_ip}", "color": "khaki"}
objects_list_range_second.append(data)
first_ip+=5
last_ip+=5
data_for_batch_first = {
"objects" : [ {
"type" : "host",
"list" : objects_list_ip_first
}, {
"type" : "address-range",
"list" : objects_list_range_first
}]
}
data_for_batch_second = {
"objects" : [ {
"type" : "host",
"list" : objects_list_ip_second
}, {
"type" : "address-range",
"list" : objects_list_range_second
}]
}
with APIClient(client_args) as client:
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
set_objects_batch_first = client.api_call("set-objects-batch", data_for_batch_first)
set_objects_batch_second = client.api_call("set-objects-batch", data_for_batch_second)
publish = client.api_call("publish")
በአንድ የኤፒአይ ጥሪ ውስጥ ብዙ ነገሮችን መሰረዝ ይችላሉ። ሰርዝ-ነገሮችን-ባች. አሁን ከዚህ ቀደም የተፈጠሩትን ሁሉንም አስተናጋጆች የሚሰርዝ የኮድ ምሳሌን እንመልከት አክል-ነገሮች-ባች.
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)
በአዲስ የቼክ ፖይንት ሶፍትዌር ላይ የሚታዩ ሁሉም ተግባራት ወዲያውኑ የኤፒአይ ጥሪዎችን ያገኛሉ። ስለዚህ በ R80.40 ውስጥ እንደዚህ ያሉ "ባህሪዎች" ወደ ክለሳ መመለስ እና ስማርት ተግባር ታየ እና ተዛማጅ የኤፒአይ ጥሪዎች ወዲያውኑ ተዘጋጅተውላቸዋል። በተጨማሪም፣ ከLegacy consoles ወደ የተዋሃደ የፖሊሲ ሁነታ ሲንቀሳቀሱ ሁሉም ተግባራት የኤፒአይ ድጋፍን ያገኛሉ። ለምሳሌ፣ በሶፍትዌር ስሪት R80.40 ውስጥ ለረጅም ጊዜ ሲጠበቅ የነበረው ዝማኔ የኤችቲቲፒኤስ ኢንስፔክሽን ፖሊሲን ከLegacy ሁነታ ወደ የተዋሃደ የፖሊሲ ሁነታ ማዛወሩ ነበር፣ እና ይህ ተግባር ወዲያውኑ የኤፒአይ ጥሪዎችን አግኝቷል። 3 ምድቦችን ከምርመራ (ጤና፣ ፋይናንስ፣ የመንግስት አገልግሎት) የሚከለክለውን የኤችቲቲፒኤስ የፍተሻ ፖሊሲ ከፍተኛ ቦታ ላይ ደንብ የሚያክል ኮድ ምሳሌ እዚህ አለ፣ እነዚህም በበርካታ ሀገራት በህጉ መሰረት መፈተሽ የተከለከለ ነው።
በኤችቲቲፒኤስ የፍተሻ ፖሊሲ ላይ ህግን ያክሉ
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")
በCheck Point አስተዳደር አገልጋይ ላይ የ Python ስክሪፕቶችን በማሄድ ላይ
ሁሉም ነገር አንድ ነው።
ለደህንነት ፍተሻ ፈጣን ማዋቀር ስክሪፕት
from __future__ import print_function
import getpass
import sys, os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from cpapi import APIClient, APIClientArgs
def main():
with APIClient() as client:
# if client.check_fingerprint() is False:
# print("Could not get the server's fingerprint - Check connectivity with the server.")
# exit(1)
login_res = client.login_as_root()
if login_res.success is False:
print("Login failed:n{}".format(login_res.error_message))
exit(1)
gw_name = raw_input("Enter the gateway name:")
gw_ip = raw_input("Enter the gateway IP address:")
if sys.stdin.isatty():
sic = getpass.getpass("Enter one-time password for the gateway(SIC): ")
else:
print("Attention! Your password will be shown on the screen!")
sic = raw_input("Enter one-time password for the gateway(SIC): ")
version = raw_input("Enter the gateway version(like RXX.YY):")
add_gw = client.api_call("add-simple-gateway", {'name' : gw_name, 'ipv4-address' : gw_ip, 'one-time-password' : sic, 'version': version.capitalize(), 'application-control' : 'true', 'url-filtering' : 'true', 'ips' : 'true', 'anti-bot' : 'true', 'anti-virus' : 'true', 'threat-emulation' : 'true'})
if add_gw.success and add_gw.data['sic-state'] != "communicating":
print("Secure connection with the gateway hasn't established!")
exit(1)
elif add_gw.success:
print("The gateway was added successfully.")
gw_uid = add_gw.data['uid']
gw_name = add_gw.data['name']
else:
print("Failed to add the gateway - {}".format(add_gw.error_message))
exit(1)
change_policy = client.api_call("set-access-layer", {"name" : "Network", "applications-and-url-filtering": "true", "content-awareness": "true"})
if change_policy.success:
print("The policy has been changed successfully")
else:
print("Failed to change the policy- {}".format(change_policy.error_message))
change_rule = client.api_call("set-access-rule", {"name" : "Cleanup rule", "layer" : "Network", "action": "Accept", "track": {"type": "Detailed Log", "accounting": "true"}})
if change_rule.success:
print("The cleanup rule has been changed successfully")
else:
print("Failed to change the cleanup rule- {}".format(change_rule.error_message))
# publish the result
publish_res = client.api_call("publish", {})
if publish_res.success:
print("The changes were published successfully.")
else:
print("Failed to publish the changes - {}".format(install_tp_policy.error_message))
install_access_policy = client.api_call("install-policy", {"policy-package" : "Standard", "access" : 'true', "threat-prevention" : 'false', "targets" : gw_uid})
if install_access_policy.success:
print("The access policy has been installed")
else:
print("Failed to install access policy - {}".format(install_tp_policy.error_message))
install_tp_policy = client.api_call("install-policy", {"policy-package" : "Standard", "access" : 'false', "threat-prevention" : 'true', "targets" : gw_uid})
if install_tp_policy.success:
print("The threat prevention policy has been installed")
else:
print("Failed to install threat prevention policy - {}".format(install_tp_policy.error_message))
# add passwords and passphrases to dictionary
with open('additional_pass.conf') as f:
line_num = 0
for line in f:
line_num += 1
add_password_dictionary = client.api_call("run-script", {"script-name" : "Add passwords and passphrases", "script" : "printf "{}" >> $FWDIR/conf/additional_pass.conf".format(line), "targets" : gw_name})
if add_password_dictionary.success:
print("The password dictionary line {} was added successfully".format(line_num))
else:
print("Failed to add the dictionary - {}".format(add_password_dictionary.error_message))
main()
የይለፍ ቃል መዝገበ ቃላት ተጨማሪ_pass.conf ያለው ምሳሌ ፋይል
{
"passwords" : ["malware","malicious","infected","Infected"],
"phrases" : ["password","Password","Pass","pass","codigo","key","pwd","пароль","Пароль","Ключ","ключ","шифр","Шифр"]
}
መደምደሚያ
ይህ ጽሑፍ የሥራውን መሠረታዊ እድሎች ብቻ ይመረምራል Python ኤስዲኬ እና ሞጁል ሲፒፒ(እንደገመቱት ፣ እነዚህ በትክክል ተመሳሳይ ቃላት ናቸው) እና በዚህ ሞጁል ውስጥ ያለውን ኮድ በማጥናት ከእሱ ጋር ለመስራት የበለጠ እድሎችን ያገኛሉ። በእራስዎ ክፍሎች ፣ ተግባራት ፣ ዘዴዎች እና ተለዋዋጮች እሱን ማሟያ ሊፈልጉ ይችላሉ። ሁልጊዜ ስራዎን ማጋራት እና በክፍል ውስጥ ለ Check Point ሌሎች ስክሪፕቶችን ማየት ይችላሉ።
መልካም ኮድ መስጠት እና እስከመጨረሻው ስላነበቡ እናመሰግናለን!
ምንጭ: hab.com