በፓይዘን ኤስዲኬ የቼክ ነጥብ ኤፒአይን ማቃለል

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

ቼክ ፖይንት ኤፒአይውን በንቃት እያዘጋጀ ሲሆን በአሁኑ ጊዜ የሚከተሉትን አለው፡

የፓይቶን ኤስዲኬ በአሁኑ ጊዜ ከአስተዳደር ኤፒአይ ጋር መስተጋብርን ብቻ ይደግፋል እና የጋያ ኤፒአይበዚህ ሞጁል ውስጥ በጣም አስፈላጊ የሆኑትን ክፍሎች፣ ዘዴዎች እና ተለዋዋጮች እንሸፍናለን።

በፓይዘን ኤስዲኬ የቼክ ነጥብ ኤፒአይን ማቃለል

ሞጁሉን በመጫን ላይ

ሞዱል ሲፓፒ በፍጥነት እና በቀላሉ ከ ይጫናል የቼክ ፖይንት ኦፊሴላዊ የጂቲአብ ማከማቻ በ እገዛ PIPዝርዝር የመጫኛ መመሪያዎች በ ውስጥ ይገኛሉ README.mdይህ ሞጁል ከፓይዘን ስሪቶች 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")

የፓይቶን ስክሪፕቶችን በቼክ ፖይንት ማኔጅመንት ሰርቨር ላይ ማሄድ

ሁሉም ነገር አንድ ነው README.md ይህ ሞጁል የፓይቶን ስክሪፕቶችን በቀጥታ ከአስተዳደር አገልጋይ እንዴት ማስኬድ እንደሚቻል መረጃ ይዟል። ከሌላ ማሽን ወደ ኤፒአይ አገልጋይ መገናኘት በማይችሉበት ጊዜ ይህ ምቹ ሊሆን ይችላል። የሞጁሉን ጭነት የሚሸፍን የስድስት ደቂቃ ቪዲዮ ቀርጬ ነበር። ሲፓፒ እና በአስተዳዳሪ አገልጋይ ላይ የፓይዘን ስክሪፕቶችን የማስኬድ ልዩ ሁኔታዎች። ለምሳሌ፣ እንደ የአውታረ መረብ ኦዲቲንግ ላሉ ተግባራት አዲስ መግቢያ በር ውቅር በራስ-ሰር የሚያከናውን ስክሪፕት ይሰራል። የደህንነት ፍተሻከገጠሙኝ ባህሪያት አንዱ 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

በDDoS ጥበቃ፣ VPS VDS አገልጋዮች ለጣቢያዎች አስተማማኝ ማስተናገጃ ይግዙ 🔥 አስተማማኝ የድር ጣቢያ ማስተናገጃ በዲዶኤስ ጥበቃ፣ በቪፒኤስ ቪዲኤስ አገልጋዮች ይግዙ | ProHoster