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

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

ቼክ ፖይንት ኤፒአይን በንቃት እየሰራ ሲሆን በአሁኑ ጊዜ የሚከተሉት ተለቀዋል፡

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

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

ሞጁሉን በመጫን ላይ

ሞዱል ሲፒፒ በፍጥነት እና በቀላሉ ከ በgithub ላይ ይፋዊ የፍተሻ ነጥብ ማከማቻ በ እገዛ PIP. ዝርዝር የመጫኛ መመሪያዎች በ ውስጥ ይገኛሉ README.md. ይህ ሞጁል ከፓይዘን ስሪቶች 2.7 እና 3.7 ጋር አብሮ ለመስራት ተስተካክሏል። በዚህ ጽሑፍ ውስጥ Python 3.7 ን በመጠቀም ምሳሌዎች ይሰጣሉ. ሆኖም፣ Python ኤስዲኬ ከቼክ ነጥብ አስተዳደር አገልጋይ (ስማርት አስተዳደር) በቀጥታ ሊሰራ ይችላል፣ ነገር ግን Python 2.7 ን ብቻ ይደግፋሉ፣ ስለዚህ የመጨረሻው ክፍል ለስሪት 2.7 ኮድ ይሰጣል። ሞጁሉን ከጫኑ በኋላ ወዲያውኑ በማውጫው ውስጥ ያሉትን ምሳሌዎች እንዲመለከቱ እመክራለሁ ምሳሌዎች_python2 и ምሳሌዎች_python3.

ቢያስቆጥርም ገና መጀመሩ ነው

ከ 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 ስክሪፕቶችን በማሄድ ላይ

ሁሉም ነገር አንድ ነው። README.md የ Python ስክሪፕቶችን በቀጥታ ከመቆጣጠሪያ አገልጋዩ እንዴት ማሄድ እንደሚቻል መረጃ ይዟል። ከሌላ ማሽን ከኤፒአይ አገልጋይ ጋር መገናኘት ካልቻሉ ይህ ምቹ ሊሆን ይችላል። ሞጁሉን መጫን የምመለከትበት የስድስት ደቂቃ ቪዲዮ ቀረጽኩ። ሲፒፒ እና በመቆጣጠሪያ አገልጋይ ላይ የ Python ስክሪፕቶችን የማሄድ ባህሪያት. እንደ ምሳሌ፣ እንደ አውታረ መረብ ኦዲት ላደረገ ተግባር የአዲሱን መግቢያ በር ውቅረት በራስ ሰር የሚሰራ ስክሪፕት ይሰራል። የደህንነት ፍተሻ. ካጋጠሙኝ ባህሪያት መካከል፡ ተግባሩ በፓይዘን 2.7 ውስጥ ገና አልታየም። ግቤት, ስለዚህ ተጠቃሚው የገባውን መረጃ ለማስኬድ አንድ ተግባር ጥቅም ላይ ይውላል ጥሬ_ግቤት. አለበለዚያ ኮዱ ከሌሎች ማሽኖች ለማስጀመር ተመሳሳይ ነው, ተግባሩን ለመጠቀም የበለጠ አመቺ ብቻ ነው መግቢያ_እንደ_ስር, የእራስዎን የተጠቃሚ ስም, የይለፍ ቃል እና የአስተዳደር አገልጋይ አይፒ አድራሻን እንደገና ላለመግለጽ.

ለደህንነት ፍተሻ ፈጣን ማዋቀር ስክሪፕት

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 ሌሎች ስክሪፕቶችን ማየት ይችላሉ። CodeHub በማህበረሰቡ ውስጥ CheckMates, ይህም ሁለቱንም የምርት ገንቢዎችን እና ተጠቃሚዎችን አንድ ላይ ያመጣል.

መልካም ኮድ መስጠት እና እስከመጨረሻው ስላነበቡ እናመሰግናለን!

ምንጭ: hab.com

አስተያየት ያክሉ