የኤፒአይ መስተጋብር ሙሉ ኃይል ከፕሮግራም ኮድ ጋር ተያይዞ ጥቅም ላይ ሲውል ይገለጣል፣ ይህም የኤፒአይ ምላሾችን ለመተንተን የኤፒአይ ጥያቄዎችን እና መሳሪያዎችን በተለዋዋጭነት የማመንጨት ችሎታ ይሰጣል። ሆኖም ግን፣ ይህ በአብዛኛው ሳይስተዋል ይቀራል። የፓይቶን ሶፍትዌር ልማት ኪት (ከዚህ በኋላ የፓይዘን ኤስዲኬ ተብሎ ይጠራል) ለ የቼክ ፖይንት ማኔጅመንት ኤፒአይግን በከንቱ። የገንቢዎችን እና የአውቶሜሽን አድናቂዎችን ሕይወት በእጅጉ ያቃልላል። ፓይዘን በቅርብ ጊዜ ከፍተኛ ተወዳጅነት አግኝቷል፣ እናም ክፍተቱን ለመሙላት እና ዋና ዋና ባህሪያቱን ለመገምገም ወሰንኩ። ይህ ጽሑፍ ስለ ሃብር ሌላ ጽሑፍ በጣም ጥሩ ማሟያ ሆኖ ያገለግላል። የፓይቶን ኤስዲኬን በመጠቀም ስክሪፕቶችን እንዴት መፃፍ እንደሚቻል እና በስሪት 1.6 (ከ R80.40 ጀምሮ የተደገፈ) ውስጥ ያለውን አዲሱን የአስተዳደር ኤፒአይ ተግባር በጥልቀት እንመረምራለን። ይህንን ጽሑፍ ለመረዳት የኤፒአይ እና የፓይዘን መሰረታዊ እውቀት ያስፈልጋል።
ቼክ ፖይንት ኤፒአይውን በንቃት እያዘጋጀ ሲሆን በአሁኑ ጊዜ የሚከተሉትን አለው፡
- - ከአስተዳደር አገልጋይ ጋር በኤፒአይ በኩል መሥራት (እና በአስተዳደር አገልጋይ በሚቆጣጠሩት በሮች ላይ ስክሪፕቶችን የማስፈጸም ችሎታ)
- - ከደህንነት መግቢያ በር ጋር መሥራት
- — በቼክ ፖይንት ደመና ውስጥ ካለው የአሸዋ ሳጥን ጋር በመስራት
- — በመግቢያዎች ላይ ከማንነት ግንዛቤ ምላጭ ጋር መሥራት
- - ከ SMB ጌትዌይ አስተዳደር ፖርታል ጋር መስራት ()
- - ከ IoT መቆጣጠሪያዎች ጋር መስተጋብር
- - ከ ጋር መስራት (የኤስዲ-ዋን የደህንነት መፍትሔ)
- - ከ ጋር መስራት
የፓይቶን ኤስዲኬ በአሁኑ ጊዜ ከአስተዳደር ኤፒአይ ጋር መስተጋብርን ብቻ ይደግፋል እና የጋያ ኤፒአይበዚህ ሞጁል ውስጥ በጣም አስፈላጊ የሆኑትን ክፍሎች፣ ዘዴዎች እና ተለዋዋጮች እንሸፍናለን።

ሞጁሉን በመጫን ላይ
ሞዱል ሲፓፒ በፍጥነት እና በቀላሉ ከ ይጫናል በ እገዛ PIPዝርዝር የመጫኛ መመሪያዎች በ ውስጥ ይገኛሉ ይህ ሞጁል ከፓይዘን ስሪቶች 2.7 እና 3.7 ጋር እንዲሰራ ተስተካክሏል። በዚህ ጽሑፍ ውስጥ ምሳሌዎች በፓይዘን 3.7 ይሰጣሉ። ሆኖም፣ የፓይዘን SDK በቀጥታ ከCheck Point Smart Management አገልጋይ ሊሰራ ይችላል፣ ነገር ግን Python 2.7 ብቻ ነው የሚደገፈው፣ ስለዚህ የስሪት 2.7 ኮድ በመጨረሻው ክፍል ውስጥ ይቀርባል። ሞጁሉን ከጫንኩ በኋላ ወዲያውኑ፣ በዳራሾቹ ውስጥ ያሉትን ምሳሌዎች እንዲመለከቱ እመክራለሁ። ምሳሌዎች_ፓይዘን2 и ምሳሌዎች_ፓይዘን3.
ቢያስቆጥርም ገና መጀመሩ ነው
ከሲፓፒ ሞጁል ክፍሎች ጋር መስራት እንድንችል፣ ከሞጁሉ ማስመጣት አለብን ሲፓፒ ቢያንስ ሁለት አስፈላጊ ክፍሎች፡
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 ክፍል ውስጥ ጥቅም ላይ ሊውሉ የሚችሉ ክርክሮች ለቼክ ፖይንት አስተዳዳሪዎች በቀላሉ የሚረዱ እና ተጨማሪ አስተያየቶችን የማያስፈልጋቸው ናቸው ብዬ አምናለሁ።
በ APIClient እና በአውድ አስተዳዳሪ በኩል መገናኘት
ክፍል APIClient ለመጠቀም በጣም ምቹው መንገድ በአውድ አስተዳዳሪ በኩል ነው። ወደ APIClient ክፍል ምሳሌ ለማስተላለፍ የሚያስፈልግዎ በቀደመው ደረጃ የተገለጹት የግንኙነት መለኪያዎች ብቻ ናቸው።
with APIClient(client_args) as client:
የአውድ አስተዳዳሪው በራስ-ሰር ወደ ኤፒአይ አገልጋይ አይገባም፣ ነገር ግን ሲወጣ ይወጣል። በሆነ ምክንያት የኤፒአይ ጥሪዎችን ካጠናቀቁ በኋላ መውጣት የማያስፈልግዎ ከሆነ፣ የአውድ አስተዳዳሪውን ሳይጠቀሙ መስራት መጀመር አለብዎት፡
client = APIClient(clieng_args)ግንኙነቱን በመፈተሽ ላይ
ግንኙነቱ በተገለጹት መለኪያዎች መሠረት እየሄደ መሆኑን ለማረጋገጥ ቀላሉ መንገድ ዘዴውን መጠቀም ነው። የቼክ_ጣት አሻራየአገልጋይ ኤፒአይ ሰርተፊኬት የጣት አሻራ የsha1 ሃሽ ቼክ ካልተሳካ (ዘዴው ተመልሷል) የተሳሳተ)፣ ይህ ብዙውን ጊዜ በግንኙነት ችግሮች ምክንያት የሚከሰት ሲሆን የፕሮግራሙን አፈፃፀም ማስቆም እንችላለን (ወይም ተጠቃሚው የግንኙነት ውሂቡን የማረም እድል መስጠት)፡
if client.check_fingerprint() is False:
print("Could not get the server's fingerprint - Check connectivity with the server.")
exit(1)
ወደፊት ትምህርቱን እንደሚከታተሉ ልብ ይበሉ APIClient እያንዳንዱን የኤፒአይ ጥሪ (ዘዴዎች) ይፈትሻል api_call и api_query(ስለእነሱ ትንሽ ቆይተን እንነጋገራለን) በኤፒአይ አገልጋይ ላይ የምስክር ወረቀቱ የsha1 አሻራ። ሆኖም ግን፣ የኤፒአይ አገልጋይ የምስክር ወረቀቱን የsha1 አሻራ ሲፈትሽ ስህተት ከተገኘ (የምስክር ወረቀቱ የማይታወቅ ወይም የተሻሻለ)፣ ዘዴው የቼክ_ጣት አሻራ በአካባቢያዊው ማሽን ላይ ስለሱ መረጃ በራስ-ሰር እንዲያክሉ/እንዲቀይሩ ያስችልዎታል። ይህ ቼክ ሙሉ በሙሉ ሊሰናከል ይችላል (ነገር ግን ይህ የሚመከር በኤፒአይ አገልጋይ ላይ ስክሪፕቶችን ሲያሄዱ፣ ከ127.0.0.1 ጋር ሲገናኙ ብቻ ነው) የኤፒአይClientArgs ክርክርን በመጠቀም። ደህንነቱ ያልተጠበቀ_ራስ-ተቀበል (ቀደም ሲል በ"የግንኙነት መለኪያዎችን መግለጽ" ውስጥ ስለ APIClientArgs ተጨማሪ ዝርዝሮችን ይመልከቱ።)
client_args = APIClientArgs(unsafe_auto_accept=True)ወደ API አገልጋይ ይግቡ
У APIClient ወደ ኤፒአይ አገልጋይ ለመግባት እስከ 3 የሚደርሱ ዘዴዎች አሉ፣ እና እያንዳንዳቸው ዋጋውን ያስታውሳሉ ተዘግቷል(የክፍለ ጊዜ-መታወቂያ)፣ ይህም በራስ-ሰር ጥቅም ላይ የሚውለው በእያንዳንዱ ቀጣይ የኤፒአይ ጥሪ ራስጌ ውስጥ ነው (ለዚህ መለኪያ ራስጌ ውስጥ ያለው ስም የሚከተለው ነው) X-chkp-side) ስለዚህ ይህንን መለኪያ ተጨማሪ ሂደት ማድረግ አያስፈልግም።
የመግቢያ ዘዴ
የመግቢያ እና የይለፍ ቃልን የሚጠቀም አማራጭ (ለምሳሌ፣ የተጠቃሚ ስም አስተዳዳሪ እና የይለፍ ቃል 1q2w3e እንደ አቀማመጥ ክርክሮች ይተላለፋሉ)
login = client.login('admin', '1q2w3e') የመግቢያ ዘዴው ተጨማሪ አማራጭ መለኪያዎች አሉት፤ ስሞቻቸው እና ነባሪ እሴቶቻቸው እነሆ፡
continue_last_session=False, domain=None, read_only=False, payload=Noneየመግቢያ_በ_api_ቁልፍ_የመግባት_ዘዴ
የኤፒአይ ቁልፍ የሚጠቀም አማራጭ (ከአስተዳደር ስሪት R80.40/የማኔጅመንት ኤፒአይ v1.6 ጀምሮ የሚደገፍ፣ «3TsbPJ8ZKjaJGvFyoFqHFA==» ይህ በአስተዳደር አገልጋይ ላይ ካሉት ተጠቃሚዎች አንዱ በኤፒአይ ቁልፍ ፈቃድ ዘዴ የኤፒአይ ቁልፍ እሴት ነው)፦
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==') በዘዴ በ_api_ቁልፍ_መግቢያ_ይግቡ በዘዴው ውስጥ እንዳሉት ተመሳሳይ አማራጭ መለኪያዎች ይገኛሉ የመግቢያ ገጽ.
የሎግ_አስ_ስር ዘዴ
በኤፒአይ አገልጋይ ወደ አካባቢያዊ ማሽን ለመግባት አማራጭ፡
login = client.login_as_root()ለዚህ ዘዴ ሁለት አማራጭ መለኪያዎች ብቻ አሉ፡
domain=None, payload=Noneእና በመጨረሻም፣ ኤፒአይ እራሳቸውን ይጠሩታል
በዘዴዎች አማካኝነት የኤፒአይ ጥሪዎችን ለማድረግ ሁለት አማራጮች አሉን api_call и api_queryበመካከላቸው ያለው ልዩነት ምን እንደሆነ እስቲ እንመልከት።
api_call
ይህ ዘዴ ለማንኛውም ጥሪ ተፈጻሚ ይሆናል። አስፈላጊ ከሆነ የኤፒአይ ጥሪውን የመጨረሻ ክፍል እና በጥያቄው አካል ውስጥ ያለውን የክፍያ ጭነት ማለፍ አለብን። የክፍያ ጭነቱ ባዶ ከሆነ ሙሉ በሙሉ ሊወገድ ይችላል፡
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
ይህ ዘዴ የሚመለከተው ውጤታቸው ማካካሻ የሚፈልግባቸው ጥሪዎችን ብቻ እንደሆነ ወዲያውኑ ላብራራ። ይህ ዓይነቱ ውጤት የሚከሰተው ከፍተኛ መጠን ያለው መረጃ ሲይዝ ወይም ሊይዝ ሲችል ነው። ለምሳሌ፣ ይህ በአስተዳደር ሰርቨር ላይ የተፈጠሩ የሁሉም የአስተናጋጅ ነገሮች ዝርዝር ጥያቄ ሊሆን ይችላል። ለእንደዚህ አይነት ጥያቄዎች፣ ኤፒአይ በነባሪነት የ50 ነገሮች ዝርዝር ይመልሳል (በምላሹ ውስጥ ገደቡን ወደ 500 ነገሮች ማሳደግ ይችላሉ)። በኤፒአይ ጥያቄ ውስጥ ያለውን የማካካሻ መለኪያ በመቀየር መረጃውን ብዙ ጊዜ ማምጣት እንዳይኖርብዎት፣ የ api_query ዘዴ ይህንን በራስ-ሰር ያስተናግዳል። ይህንን ዘዴ የሚጠይቁ የጥሪዎች ምሳሌዎች፡ የትርኢት ክፍለ ጊዜዎች፣ የትርኢት አስተናጋጆች፣ የትርኢት አውታረ መረቦች፣ የትርኢት-ዋይልድ ካርዶች፣ የትርኢት ቡድኖች፣ የትርኢት-አድራሻ ክልሎች፣ የትርኢት-ቀላል በሮች፣ የትርኢት-ቀላል-ክላስተር፣ የትርኢት-መዳረሻ ሚናዎች፣ የትርኢት-ታማኝ ደንበኞች፣ የትርኢት-ጥቅሎችእንደ እውነቱ ከሆነ፣ በእነዚህ የኤፒአይ ጥሪዎች ስሞች ውስጥ ብዙ ቃላትን እናያለን፣ ስለዚህ እነዚህን ጥሪዎች በ በኩል ማስተናገድ ቀላል ይሆናል። 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
})
የኤፒአይ ጥሪ ውጤቶችን በማስኬድ ላይ
ከዚህ በኋላ የክፍሉን ተለዋዋጮች እና ዘዴዎች መጠቀም ይችላሉ። የኤፒአይ ምላሽ(በውስጥም ሆነ በውጭ የአውድ አስተዳዳሪ)። ክፍሉ የኤፒአይ ምላሽ 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.
የ_ውጤት_ሁኔታ_set
በዚህ ሁኔታ የስኬት ሁኔታ እሴትን መቀየር አስፈላጊ ሊሆን ይችላል። በቴክኒካል፣ ማንኛውንም ነገር እዚያ ላይ ማስቀመጥ ይችላሉ፣ ቀላል ሕብረቁምፊም ቢሆን። ነገር ግን የእውነተኛው ዓለም ምሳሌ በተወሰኑ ሁኔታዎች ይህንን መለኪያ ወደ ሐሰት ዳግም ማስጀመር ሊሆን ይችላል። ከዚህ በታች፣ በአስተዳደር ሰርቨር ላይ የሚሰሩ ተግባራት ያሉበትን ምሳሌ ልብ ይበሉ፣ ነገር ግን ይህንን ጥያቄ ያልተሳካ እንደሆነ እንቆጥረዋለን (የስኬት ተለዋዋጭውን ወደ እናስቀምጣለን) የተሳሳተየኤፒአይ ጥሪው ስኬታማ ቢሆንም እና ኮድ 200ን ቢመልስም)።
for task in task_result.data["tasks"]:
if task["status"] == "failed" or task["status"] == "partially succeeded":
task_result.set_success_status(False)
breakምላሽ()
የምላሽ ዘዴው የምላሽ ኮድ (status_code) እና የምላሽ አካል (body) ያለው መዝገበ-ቃላትን እንዲመለከቱ ያስችልዎታል።
In [94]: api_versions.response()
Out[94]:
{'status_code': 200,
'data': {'current-version': '1.6',
'supported-versions': ['1', '1.1', '1.2', '1.3', '1.4', '1.5', '1.6']}}
መረጃ
አላስፈላጊ መረጃ ሳይኖር የምላሽ አካልን ብቻ እንዲያዩ ያስችልዎታል።
In [93]: api_versions.data
Out[93]:
{'current-version': '1.6',
'supported-versions': ['1', '1.1', '1.2', '1.3', '1.4', '1.5', '1.6']}
የስህተት_መልእክት
ይህ መረጃ የሚገኘው የኤፒአይ ጥያቄን በማስኬድ ላይ ስህተት ሲፈጠር ብቻ ነው (የምላሽ ኮድ) አይደለም 200)። የውጤት ምሳሌ
In [107]: api_versions.error_message
Out[107]: 'code: generic_err_invalid_parameter_namenmessage: Unrecognized parameter [1]n'
ጠቃሚ ምሳሌዎች
የሚከተሉት ምሳሌዎች በማኔጅመንት ኤፒአይ ስሪት 1.6 ውስጥ የታከሉ የኤፒአይ ጥሪዎችን ይጠቀማሉ።
ጥሪዎች እንዴት እንደሚሰሩ በመመልከት እንጀምር። አስተናጋጅ አክል и የአድራሻ-ክልል አክልየመጨረሻው ኦክቴት 5 የሆነበት በ192.168.0.0/24 ንዑስ አውታረ መረብ ውስጥ ያሉትን ሁሉንም የአይፒ አድራሻዎች መፍጠር አለብን እንበል፤ እንዲሁም ሌሎች ሁሉንም የአይፒ አድራሻዎች እንደ የአድራሻ ክልል ነገሮች ማከማቸት አለብን። የንዑስ አውታረ መረብ አድራሻውን እና የስርጭት አድራሻውን አያካትቱ።
ከዚህ በታች ይህንን ችግር የሚፈታ እና 50 የአስተናጋጅ ነገሮችን እና 51 የአድራሻ ክልል ነገሮችን የሚፈጥር ስክሪፕት አለ። ይህ ተግባር 101 የኤፒአይ ጥሪዎችን ይፈልጋል (የመጨረሻውን የህትመት ጥሪ ሳይቆጥር)። ለውጦቹ እስኪታተሙ ድረስ የስክሪፕት አፈፃፀም ጊዜን ለማስላት የጊዜ ኢት ሞጁሉንም እንጠቀማለን።
ስክሪፕት አክል-አስተናጋጅ እና አክል-አድራሻ-ክልል በመጠቀም
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 ውስጥ ታክሏል። ይህ ጥሪ በአንድ የኤፒአይ ጥያቄ በአንድ ጊዜ ብዙ ነገሮችን እንዲፈጥሩ ያስችልዎታል። እነዚህ ነገሮች የተለያዩ አይነቶች ሊሆኑ ይችላሉ (ለምሳሌ፣ አስተናጋጆች፣ ንዑስ መረቦች እና የአድራሻ ክልሎች)። ስለዚህ፣ ተግባራችን በአንድ የኤፒአይ ጥሪ ሊከናወን ይችላል።
ስክሪፕት የተጨማሪ ነገሮች-ባች አጠቃቀምን በመጠቀም
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 እንደ Revert to Revision እና Smart Task ያሉ ባህሪያትን አስተዋውቋል፣ እና ተጓዳኝ የኤፒአይ ጥሪዎች ወዲያውኑ ለእነሱ ይገኛሉ። በተጨማሪም፣ ከLegacy consoles ወደ Unified Policy ሁነታ የሚሸጋገሩ ሁሉም ተግባራት የኤፒአይ ድጋፍን ያገኛሉ። ለምሳሌ፣ በR80.40 ውስጥ ለረጅም ጊዜ ሲጠበቅ የነበረው ዝማኔ የኤችቲቲፒኤስ ኢንስፔክሽን ፖሊሲ ከLegacy mode ወደ Unified Policy ሁነታ መዛወሩ ነበር፣ እና ይህ ተግባር ወዲያውኑ የኤፒአይ ጥሪዎችን ተቀብሏል። በአንዳንድ አገሮች በሕግ የተከለከሉ ሶስት ምድቦችን (ጤና፣ ፋይናንስ እና የመንግስት አገልግሎቶችን) ከምርመራ የሚያገልል ደንብ በኤችቲቲፒኤስ ኢንስፔክሽን ፖሊሲ ከፍተኛ ቦታ ላይ የሚያክል የኮድ ምሳሌ ይኸውና፣ እነዚህም በአንዳንድ አገሮች በሕግ የተከለከሉ ናቸው።
ወደ HTTPS የምርመራ መመሪያ ደንብ ያክሉ
from cpapi import APIClient, APIClientArgs
client_args = APIClientArgs(server="192.168.47.240")
data = {
"layer" : "Default Layer",
"position" : "top",
"name" : "Legal Requirements",
"action": "bypass",
"site-category": ["Health", "Government / Military", "Financial Services"]
}
with APIClient(client_args) as client:
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
add_https_rule = client.api_call("add-https-rule", data)
publish = client.api_call("publish")
የፓይቶን ስክሪፕቶችን በቼክ ፖይንት ማኔጅመንት ሰርቨር ላይ ማሄድ
ሁሉም ነገር አንድ ነው ይህ ሞጁል የፓይቶን ስክሪፕቶችን በቀጥታ ከአስተዳደር አገልጋይ እንዴት ማስኬድ እንደሚቻል መረጃ ይዟል። ከሌላ ማሽን ወደ ኤፒአይ አገልጋይ መገናኘት በማይችሉበት ጊዜ ይህ ምቹ ሊሆን ይችላል። የሞጁሉን ጭነት የሚሸፍን የስድስት ደቂቃ ቪዲዮ ቀርጬ ነበር። ሲፓፒ እና በአስተዳዳሪ አገልጋይ ላይ የፓይዘን ስክሪፕቶችን የማስኬድ ልዩ ሁኔታዎች። ለምሳሌ፣ እንደ የአውታረ መረብ ኦዲቲንግ ላሉ ተግባራት አዲስ መግቢያ በር ውቅር በራስ-ሰር የሚያከናውን ስክሪፕት ይሰራል። የደህንነት ፍተሻከገጠሙኝ ባህሪያት አንዱ Python 2.7 ተግባሩን ገና አላስተዋወቀም የሚለው ነው። ግቤትስለዚህ ተግባሩ ተጠቃሚው የገባውን መረጃ ለማስኬድ ይጠቅማል ጥሬ_ግቤትአለበለዚያ ኮዱ ከሌሎች ማሽኖች ለማስጀመር ተመሳሳይ ነው፣ ተግባሩን ለመጠቀም የበለጠ ምቹ ነው። login_as_root, የመቆጣጠሪያ አገልጋዩን የተጠቃሚ ስም፣ የይለፍ ቃል እና የአይፒ አድራሻ እንደገና ላለመግለጽ።

የደህንነት ፍተሻን በፍጥነት ለማዋቀር የሚያስችል ስክሪፕት
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 ኤስዲኬ እና ሞጁል ሲፓፒ(እንደገመቱት፣ እነዚህ በመሠረቱ ተመሳሳይ ቃላት ናቸው)፣ እና በዚህ ሞጁል ውስጥ ያለውን ኮድ በማጥናት፣ ከእሱ ጋር ለመስራት የበለጠ እድሎችን ያገኛሉ። በራስዎ ክፍሎች፣ ተግባራት፣ ዘዴዎች እና ተለዋዋጮች ማስፋት ይፈልጉ ይሆናል። ሁልጊዜም እድገቶችዎን ማጋራት እና በክፍል ውስጥ ሌሎች የቼክ ፖይንት ስክሪፕቶችን ማሰስ ይችላሉ። በማህበረሰቡ ውስጥ የምርት ገንቢዎችንም ሆነ ተጠቃሚዎችን አንድ ላይ የሚያገናኝ።
መልካም የኮድ ኮድ እና እስከመጨረሻው ስላነበቡ እናመሰግናለን!
ምንጭ: hab.com
