பைதான் SDK உடன் செக் பாயிண்ட் API ஐ எளிதாக்குகிறது

பைதான் SDK உடன் செக் பாயிண்ட் API ஐ எளிதாக்குகிறதுநிரல் குறியீட்டுடன் ஒன்றாகப் பயன்படுத்தும்போது, ​​API கோரிக்கைகள் மற்றும் API பதில்களை பகுப்பாய்வு செய்வதற்கான கருவிகளை மாறும் வகையில் உருவாக்குவது சாத்தியமாகும்போது, ​​APIகளுடன் தொடர்பு கொள்ளும் முழு சக்தியும் வெளிப்படும். இருப்பினும், இது இன்னும் கவனிக்கப்படாமல் உள்ளது பைதான் மென்பொருள் மேம்பாட்டு கிட் (இனிமேல் பைதான் SDK என குறிப்பிடப்படுகிறது) க்கான புள்ளி மேலாண்மை API ஐ சரிபார்க்கவும், ஆனால் வீண். இது டெவலப்பர்கள் மற்றும் ஆட்டோமேஷன் ஆர்வலர்களின் வாழ்க்கையை கணிசமாக எளிதாக்குகிறது. Python சமீபகாலமாக பெரும் புகழைப் பெற்றுள்ளது மற்றும் நான் இடைவெளியை நிரப்பவும் முக்கிய அம்சங்களை மதிப்பாய்வு செய்யவும் முடிவு செய்தேன். செக் பாயிண்ட் API பைதான் டெவலப்மெண்ட் கிட். இந்த கட்டுரை ஹப்ரே பற்றிய மற்றொரு கட்டுரைக்கு ஒரு சிறந்த கூடுதலாக உதவுகிறது செக் பாயிண்ட் R80.10 API. CLI, ஸ்கிரிப்டுகள் மற்றும் பலவற்றின் மூலம் மேலாண்மை. பைதான் SDK ஐப் பயன்படுத்தி ஸ்கிரிப்ட்களை எவ்வாறு எழுதுவது என்பதைப் பார்ப்போம் மற்றும் பதிப்பு 1.6 இல் புதிய மேலாண்மை API செயல்பாட்டைக் கூர்ந்து கவனிப்போம் (R80.40 இலிருந்து ஆதரிக்கப்படுகிறது). கட்டுரையைப் புரிந்து கொள்ள, APIகள் மற்றும் பைத்தானுடன் பணிபுரியும் அடிப்படை அறிவு உங்களுக்குத் தேவைப்படும்.

செக் பாயிண்ட் APIயை தீவிரமாக உருவாக்கி வருகிறது, தற்போது பின்வருபவை வெளியிடப்பட்டுள்ளன:

Python SDK தற்போது மேலாண்மை API மற்றும் உடனான தொடர்புகளை மட்டுமே ஆதரிக்கிறது கையா ஏபிஐ. இந்த தொகுதியில் உள்ள மிக முக்கியமான வகுப்புகள், முறைகள் மற்றும் மாறிகளைப் பார்ப்போம்.

பைதான் SDK உடன் செக் பாயிண்ட் API ஐ எளிதாக்குகிறது

தொகுதி நிறுவல்

தொகுதி cpapi விரைவாகவும் எளிதாகவும் நிறுவுகிறது கிதுப்பில் அதிகாரப்பூர்வ செக் பாயிண்ட் களஞ்சியம் உதவியுடன் பிப். விரிவான நிறுவல் வழிமுறைகள் கிடைக்கின்றன README.md. இந்த தொகுதி பைதான் பதிப்புகள் 2.7 மற்றும் 3.7 உடன் வேலை செய்ய ஏற்றது. இந்த கட்டுரையில், பைதான் 3.7 ஐப் பயன்படுத்தி எடுத்துக்காட்டுகள் வழங்கப்படும். இருப்பினும், பைதான் SDK ஐ செக் பாயிண்ட் மேனேஜ்மென்ட் சர்வரிலிருந்து (ஸ்மார்ட் மேனேஜ்மென்ட்) நேரடியாக இயக்க முடியும், ஆனால் அவை பைதான் 2.7 ஐ மட்டுமே ஆதரிக்கின்றன, எனவே கடைசி பகுதி பதிப்பு 2.7 க்கான குறியீட்டை வழங்கும். தொகுதியை நிறுவிய உடனேயே, கோப்பகங்களில் உள்ள எடுத்துக்காட்டுகளைப் பார்க்க பரிந்துரைக்கிறேன் உதாரணங்கள்_பைதான்2 и உதாரணங்கள்_பைதான்3.

தொடங்குதல்

cpapi தொகுதியின் கூறுகளுடன் நாம் வேலை செய்ய, நாம் தொகுதியிலிருந்து இறக்குமதி செய்ய வேண்டும். cpapi குறைந்தபட்சம் இரண்டு தேவையான வகுப்புகள்:

APClient и APIClientArgs

from cpapi import APIClient, APIClientArgs

Класс APIClientArgs API சேவையகம் மற்றும் வகுப்பிற்கான இணைப்பு அளவுருக்களுக்கு பொறுப்பாகும் APClient API உடனான தொடர்புக்கு பொறுப்பு.

இணைப்பு அளவுருக்களை தீர்மானித்தல்

API உடன் இணைப்பதற்கான பல்வேறு அளவுருக்களை வரையறுக்க, நீங்கள் வகுப்பின் உதாரணத்தை உருவாக்க வேண்டும் APIClientArgs. கொள்கையளவில், அதன் அளவுருக்கள் முன் வரையறுக்கப்பட்டவை மற்றும் கட்டுப்பாட்டு சேவையகத்தில் ஸ்கிரிப்டை இயக்கும் போது, ​​அவை குறிப்பிடப்பட வேண்டிய அவசியமில்லை.

client_args = APIClientArgs()

ஆனால் மூன்றாம் தரப்பு ஹோஸ்டில் இயங்கும் போது, ​​குறைந்தபட்சம் ஐபி முகவரி அல்லது ஏபிஐ சர்வரின் ஹோஸ்ட் பெயரைக் குறிப்பிட வேண்டும் (மேலாண்மை சேவையகம் என்றும் அழைக்கப்படுகிறது). கீழேயுள்ள எடுத்துக்காட்டில், நாங்கள் சர்வர் இணைப்பு அளவுருவை வரையறுத்து, நிர்வாக சேவையகத்தின் ஐபி முகவரியை ஒரு சரமாக ஒதுக்குகிறோம்.

client_args = APIClientArgs(server='192.168.47.241')

API சேவையகத்துடன் இணைக்கும்போது பயன்படுத்தக்கூடிய அனைத்து அளவுருக்கள் மற்றும் அவற்றின் இயல்புநிலை மதிப்புகளைப் பார்ப்போம்:

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 வகுப்பின் நிகழ்வுகளில் பயன்படுத்தக்கூடிய வாதங்கள் செக் பாயின்ட் நிர்வாகிகளுக்கு உள்ளுணர்வுடன் இருப்பதாகவும், கூடுதல் கருத்துகள் தேவையில்லை என்றும் நான் நம்புகிறேன்.

APClient மற்றும் சூழல் மேலாளர் வழியாக இணைக்கிறது

Класс APClient சூழல் மேலாளர் மூலம் அதைப் பயன்படுத்த மிகவும் வசதியான வழி. APIClient வகுப்பின் ஒரு நிகழ்விற்கு அனுப்ப வேண்டியது முந்தைய கட்டத்தில் வரையறுக்கப்பட்ட இணைப்பு அளவுருக்கள் மட்டுமே.

with APIClient(client_args) as client:

சூழல் மேலாளர் தானாகவே API சேவையகத்திற்கு உள்நுழைவு அழைப்பை மேற்கொள்ளாது, ஆனால் அதிலிருந்து வெளியேறும் போது அது வெளியேறும் அழைப்பைச் செய்யும். ஏபிஐ அழைப்புகளுடன் பணிபுரிந்த பிறகு சில காரணங்களால் வெளியேறத் தேவையில்லை என்றால், சூழல் மேலாளரைப் பயன்படுத்தாமல் நீங்கள் பணியைத் தொடங்க வேண்டும்:

client = APIClient(clieng_args)

இணைப்பு சோதனை

இணைப்பு குறிப்பிட்ட அளவுருக்களை சந்திக்கிறதா என்பதைச் சரிபார்க்க எளிதான வழி முறையைப் பயன்படுத்துகிறது சரிபார்ப்பு_கைரேகை. சேவையக API சான்றிதழின் கைரேகைக்கான sha1 ஹாஷ் தொகையின் சரிபார்ப்பு தோல்வியடைந்தால் (முறை திரும்பியது தவறான), பின்னர் இது பொதுவாக இணைப்பு சிக்கல்களால் ஏற்படுகிறது மற்றும் நிரலை செயல்படுத்துவதை நிறுத்தலாம் (அல்லது இணைப்பு தரவை சரிசெய்ய பயனருக்கு வாய்ப்பளிக்கவும்):

    if client.check_fingerprint() is False:
        print("Could not get the server's fingerprint - Check connectivity with the server.")
        exit(1)

எதிர்காலத்தில் வகுப்பு என்பதை நினைவில் கொள்க APClient ஒவ்வொரு API அழைப்பையும் சரிபார்க்கும் (முறைகள் api_call и api_query, அவற்றைப் பற்றி இன்னும் கொஞ்சம் பேசுவோம்) ஏபிஐ சர்வரில் sha1 கைரேகை சான்றிதழ். ஆனால், API சர்வர் சான்றிதழின் sha1 கைரேகையை சரிபார்க்கும் போது, ​​பிழை கண்டறியப்பட்டால் (சான்றிதழ் தெரியவில்லை அல்லது மாற்றப்பட்டுள்ளது), முறை சரிபார்ப்பு_கைரேகை உள்ளூர் கணினியில் தானாகவே அதைப் பற்றிய தகவலைச் சேர்க்க/மாற்றுவதற்கான வாய்ப்பை வழங்கும். இந்தச் சரிபார்ப்பை முழுவதுமாக முடக்கலாம் (ஆனால் 127.0.0.1 உடன் இணைக்கும் போது, ​​API சர்வரிலேயே ஸ்கிரிப்டுகள் இயக்கப்பட்டால் மட்டுமே இது பரிந்துரைக்கப்படும்), APIClientArgs வாதத்தைப் பயன்படுத்தி - பாதுகாப்பற்ற_தானாக ஏற்றுக்கொள் ("இணைப்பு அளவுருக்களை வரையறுத்தல்" என்பதில் APIClientArgs பற்றி மேலும் பார்க்கவும்).

client_args = APIClientArgs(unsafe_auto_accept=True)

API சர்வரில் உள்நுழைக

У APClient ஏபிஐ சர்வரில் உள்நுழைவதற்கு 3 முறைகள் உள்ளன, மேலும் அவை ஒவ்வொன்றும் அதன் பொருளைப் புரிந்து கொள்ளும் சித்(session-id), இது தலைப்பில் உள்ள ஒவ்வொரு API அழைப்பிலும் தானாகவே பயன்படுத்தப்படும் (இந்த அளவுருவின் தலைப்பில் உள்ள பெயர் X-chkp-sid), எனவே இந்த அளவுருவை மேலும் செயலாக்க வேண்டிய அவசியமில்லை.

உள்நுழைவு முறை

உள்நுழைவு மற்றும் கடவுச்சொல்லைப் பயன்படுத்தும் விருப்பம் (உதாரணத்தில், பயனர்பெயர் நிர்வாகி மற்றும் கடவுச்சொல் 1q2w3e ஆகியவை நிலை வாதங்களாக அனுப்பப்படுகின்றன):

     login = client.login('admin', '1q2w3e')  

உள்நுழைவு முறையிலும் கூடுதல் விருப்ப அளவுருக்கள் உள்ளன, அவற்றின் பெயர்கள் மற்றும் இயல்புநிலை மதிப்புகள்:

continue_last_session=False, domain=None, read_only=False, payload=None

முறை உள்நுழைவு_ஏபி_விவியுடன்

Api விசையைப் பயன்படுத்தும் விருப்பம் (மேலாண்மை பதிப்பு R80.40/Management API v1.6 இலிருந்து ஆதரிக்கப்படுகிறது, "3TsbPJ8ZKjaJGvFyoFqHFA==" இது API விசை அங்கீகார முறையுடன் மேலாண்மை சேவையகத்தில் உள்ள பயனர்களில் ஒருவருக்கான API முக்கிய மதிப்பு:

     login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==') 

முறையில் api_key மூலம்_உள்நுழைக அதே விருப்ப அளவுருக்கள் முறையைப் போலவே கிடைக்கின்றன உள் நுழை.

உள்நுழைவு_ஆஸ்_ரூட் முறை

API சேவையகத்துடன் உள்ளூர் இயந்திரத்தில் உள்நுழைவதற்கான விருப்பம்:

     login = client.login_as_root()

இந்த முறைக்கு இரண்டு விருப்ப அளவுருக்கள் மட்டுமே உள்ளன:

domain=None, payload=None

இறுதியாக API தங்களை அழைக்கிறது

முறைகள் மூலம் API அழைப்புகளைச் செய்ய எங்களிடம் இரண்டு விருப்பங்கள் உள்ளன 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

இந்த முறை ஆஃப்செட்டை உள்ளடக்கிய அழைப்புகளுக்கு மட்டுமே பொருந்தும் என்பதை இப்போதே முன்பதிவு செய்கிறேன். இது ஒரு பெரிய அளவிலான தகவலைக் கொண்டிருக்கும் போது அல்லது கொண்டிருக்கும் போது அத்தகைய அனுமானம் ஏற்படுகிறது. எடுத்துக்காட்டாக, மேலாண்மை சேவையகத்தில் உருவாக்கப்பட்ட அனைத்து ஹோஸ்ட் பொருள்களின் பட்டியலுக்கான கோரிக்கையாக இது இருக்கலாம். அத்தகைய கோரிக்கைகளுக்கு, API ஆனது 50 ஆப்ஜெக்ட்களின் பட்டியலை இயல்புநிலையாக வழங்கும் (பதிலில் வரம்பை 500 ஆப்ஜெக்ட்களாக அதிகரிக்கலாம்). மேலும் பல முறை தகவலை இழுக்காமல் இருக்க, API கோரிக்கையில் ஆஃப்செட் அளவுருவை மாற்றி, இந்த வேலையை தானாகவே செய்யும் api_query முறை உள்ளது. இந்த முறை தேவைப்படும் அழைப்புகளின் எடுத்துக்காட்டுகள்: ஷோ-செஷன்கள், ஷோ-ஹோஸ்ட்கள், ஷோ-நெட்வொர்க்குகள், ஷோ-வைல்டு கார்டுகள், ஷோ-குரூப்கள், ஷோ-அட்ரஸ்-ரேஞ்ச்கள், ஷோ-எளிய-கேட்வேகள், ஷோ-எளிய-கிளஸ்டர்கள், ஷோ-அணுகல்-பாத்திரங்கள், ஷோ-நம்பகமான-வாடிக்கையாளர், நிகழ்ச்சி-தொகுப்புகள். உண்மையில், இந்த API அழைப்புகளின் பெயரில் பன்மைச் சொற்களைப் பார்க்கிறோம், எனவே இந்த அழைப்புகள் எளிதாகக் கையாளப்படும். 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
})

API அழைப்புகளின் முடிவுகளைச் செயலாக்குகிறது

இதற்குப் பிறகு, நீங்கள் வகுப்பின் மாறிகள் மற்றும் முறைகளைப் பயன்படுத்தலாம் அபிர் பதில்(சூழல் மேலாளரின் உள்ளேயும் வெளியேயும்). வகுப்பில் அபிர் பதில் 4 முறைகள் மற்றும் 5 மாறிகள் முன் வரையறுக்கப்பட்டுள்ளன;

பைதான் SDK உடன் செக் பாயிண்ட் API ஐ எளிதாக்குகிறது

வெற்றி

தொடங்குவதற்கு, API அழைப்பு வெற்றிகரமாக இருந்ததா என்பதை உறுதிசெய்து, அதன் முடிவைத் தருவது நல்லது. இதற்கு ஒரு முறை உள்ளது வெற்றி:

In [49]: api_versions.success                                                   
Out[49]: True

ஏபிஐ அழைப்பு வெற்றியடைந்தால் சரி (பதில் குறியீடு - 200) மற்றும் வெற்றிபெறவில்லை என்றால் தவறு (வேறு ஏதேனும் மறுமொழி குறியீடு) என வழங்கும். பதில் குறியீட்டைப் பொறுத்து வெவ்வேறு தகவல்களைக் காண்பிக்க API அழைப்புக்குப் பிறகு உடனடியாகப் பயன்படுத்துவது வசதியானது.

if api_ver.success: 
    print(api_versions.data) 
else: 
    print(api_versions.err_message) 

நிலை குறியீடு

API அழைப்பு செய்த பிறகு மறுமொழி குறியீட்டை வழங்கும்.

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']}

பிழை செய்தி

API கோரிக்கையைச் செயலாக்கும்போது பிழை ஏற்பட்டால் மட்டுமே இந்தத் தகவல் கிடைக்கும் (பதில் குறியீடு இல்லை 200) எடுத்துக்காட்டு வெளியீடு

In [107]: api_versions.error_message                                            
Out[107]: 'code: generic_err_invalid_parameter_namenmessage: Unrecognized parameter [1]n'

பயனுள்ள உதாரணங்கள்

மேலாண்மை API 1.6 இல் சேர்க்கப்பட்ட API அழைப்புகளைப் பயன்படுத்தும் எடுத்துக்காட்டுகள் பின்வருமாறு.

முதலில், அழைப்புகள் எவ்வாறு செயல்படுகின்றன என்பதைப் பார்ப்போம் சேர்-ஹோஸ்ட் и சேர்க்க-முகவரி-வரம்பு. சப்நெட் 192.168.0.0/24 இன் அனைத்து ஐபி முகவரிகளையும் உருவாக்க வேண்டும், அதன் கடைசி எண் 5, ஹோஸ்ட் வகையின் பொருள்களாக, மற்ற எல்லா ஐபி முகவரிகளையும் முகவரி வரம்பு வகையின் பொருள்களாக எழுத வேண்டும். இந்த வழக்கில், சப்நெட் முகவரி மற்றும் ஒளிபரப்பு முகவரியைத் தவிர்க்கவும்.

எனவே, இந்தச் சிக்கலைத் தீர்க்கும் ஸ்கிரிப்ட் கீழே உள்ளது மற்றும் ஹோஸ்ட் வகையின் 50 பொருள்களையும் முகவரி வரம்பு வகையின் 51 பொருள்களையும் உருவாக்குகிறது. சிக்கலைத் தீர்க்க, 101 API அழைப்புகள் தேவை (இறுதி வெளியீட்டு அழைப்பைக் கணக்கிடவில்லை). மேலும், timeit தொகுதியைப் பயன்படுத்தி, மாற்றங்கள் வெளியிடப்படும் வரை ஸ்கிரிப்டை இயக்க எடுக்கும் நேரத்தைக் கணக்கிடுகிறோம்.

add-host மற்றும் add-address-range ஐப் பயன்படுத்தி ஸ்கிரிப்ட்

import timeit
from cpapi import APIClient, APIClientArgs

start = timeit.default_timer()

first_ip = 1
last_ip = 4

client_args = APIClientArgs(server="192.168.47.240")

with APIClient(client_args) as client: 
     login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
     for ip in range(5,255,5):
         add_host = client.api_call("add-host", {"name" : f"h_192.168.0.{ip}", "ip-address": f'192.168.0.{ip}'})
     while last_ip < 255:
         add_range = client.api_call("add-address-range", {"name": f"r_192.168.0.{first_ip}-{last_ip}", "ip-address-first": f"192.168.0.{first_ip}", "ip-address-last": f"192.168.0.{last_ip}"})
         first_ip+=5
         last_ip+=5
     stop = timeit.default_timer() 
     publish = client.api_call("publish")
     
print(f'Time to execute batch request: {stop - start} seconds')

எனது ஆய்வகச் சூழலில், இந்த ஸ்கிரிப்ட் இயக்குவதற்கு 30 முதல் 50 வினாடிகள் வரை ஆகும், இது மேலாண்மை சர்வரில் உள்ள சுமையைப் பொறுத்து.

இப்போது API அழைப்பைப் பயன்படுத்தி அதே சிக்கலை எவ்வாறு தீர்ப்பது என்று பார்ப்போம் add-objects-batch, ஏபிஐ பதிப்பு 1.6 இல் சேர்க்கப்பட்டுள்ள ஆதரவு. ஒரு API கோரிக்கையில் ஒரே நேரத்தில் பல பொருட்களை உருவாக்க இந்த அழைப்பு உங்களை அனுமதிக்கிறது. மேலும், இவை வெவ்வேறு வகையான பொருள்களாக இருக்கலாம் (எடுத்துக்காட்டாக, ஹோஸ்ட்கள், சப்நெட்டுகள் மற்றும் முகவரி வரம்புகள்). எனவே, எங்கள் பணியை ஒரு API அழைப்பின் கட்டமைப்பிற்குள் தீர்க்க முடியும்.

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 API ஆப்ஜெக்ட்களில், ஒரு தொகுதி வகை அழைப்பு 10 மடங்கு வேகமாக இயங்கும். அதிக எண்ணிக்கையிலான பொருள்களில் வேறுபாடு இன்னும் சிறப்பாக இருக்கும்.

இப்போது எப்படி வேலை செய்வது என்று பார்ப்போம் தொகுப்பு-பொருள்கள்-தொகுதி. இந்த API அழைப்பைப் பயன்படுத்தி, எந்த அளவுருவையும் மொத்தமாக மாற்றலாம். முந்தைய எடுத்துக்காட்டில் உள்ள முகவரிகளின் முதல் பாதியை (.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")

நீங்கள் ஒரு API அழைப்பில் பல பொருள்களை நீக்கலாம் நீக்க-பொருள்கள்-தொகுதி. முன்பு உருவாக்கப்பட்ட அனைத்து ஹோஸ்ட்களையும் நீக்கும் குறியீடு உதாரணத்தை இப்போது பார்க்கலாம் add-objects-batch.

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)

செக் பாயிண்ட் மென்பொருளின் புதிய வெளியீடுகளில் தோன்றும் அனைத்து செயல்பாடுகளும் உடனடியாக API அழைப்புகளைப் பெறுகின்றன. எனவே, R80.40 இல், மீள்பார்வைக்குத் திரும்புதல் மற்றும் ஸ்மார்ட் டாஸ்க் போன்ற "அம்சங்கள்" தோன்றின, மேலும் அவற்றுக்கான API அழைப்புகள் உடனடியாகத் தயாரிக்கப்பட்டன. மேலும், லெகசி கன்சோல்களில் இருந்து யூனிஃபைட் பாலிசி பயன்முறைக்கு நகரும் போது அனைத்து செயல்பாடுகளும் API ஆதரவைப் பெறுகின்றன. எடுத்துக்காட்டாக, மென்பொருள் பதிப்பு R80.40 இல் நீண்டகாலமாக எதிர்பார்க்கப்பட்ட புதுப்பிப்பு என்பது HTTPS ஆய்வுக் கொள்கையை மரபுப் பயன்முறையிலிருந்து ஒருங்கிணைந்த கொள்கைப் பயன்முறைக்கு மாற்றுவதாகும், மேலும் இந்த செயல்பாடு உடனடியாக API அழைப்புகளைப் பெற்றது. HTTPS இன்ஸ்பெக்ஷன் பாலிசியின் உயர்மட்ட நிலைக்கு விதியைச் சேர்க்கும் குறியீட்டின் உதாரணம் இங்கே உள்ளது, இது 3 வகைகளை ஆய்வில் இருந்து விலக்குகிறது (சுகாதாரம், நிதி, அரசு சேவைகள்), அவை பல நாடுகளின் சட்டங்களின்படி ஆய்வு செய்யத் தடை செய்யப்பட்டுள்ளன.

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 கட்டுப்பாட்டு சேவையகத்திலிருந்து நேரடியாக பைதான் ஸ்கிரிப்ட்களை எவ்வாறு இயக்குவது என்பது பற்றிய தகவலைக் கொண்டுள்ளது. நீங்கள் மற்றொரு கணினியிலிருந்து API சேவையகத்துடன் இணைக்க முடியாதபோது இது வசதியாக இருக்கும். நான் ஆறு நிமிட வீடியோவைப் பதிவு செய்தேன், அதில் தொகுதியை நிறுவுவதைப் பார்க்கிறேன் cpapi மற்றும் கட்டுப்பாட்டு சேவையகத்தில் பைதான் ஸ்கிரிப்ட்களை இயக்கும் அம்சங்கள். எடுத்துக்காட்டாக, நெட்வொர்க் தணிக்கை போன்ற பணிக்கான புதிய நுழைவாயிலின் உள்ளமைவை தானியங்குபடுத்தும் ஸ்கிரிப்ட் இயக்கப்படுகிறது. பாதுகாப்பு சோதனை. நான் சமாளிக்க வேண்டிய அம்சங்களில்: பைதான் 2.7 இல் செயல்பாடு இன்னும் தோன்றவில்லை உள்ளீடு, பயனர் உள்ளிடும் தகவலைச் செயல்படுத்த, ஒரு செயல்பாடு பயன்படுத்தப்படுகிறது மூல_உள்ளீடு. இல்லையெனில், குறியீடு மற்ற இயந்திரங்களிலிருந்து தொடங்குவதற்கு சமம், செயல்பாட்டைப் பயன்படுத்துவது மட்டுமே மிகவும் வசதியானது ரூட்டாக_உள்நுழைக, உங்கள் சொந்த பயனர்பெயர், கடவுச்சொல் மற்றும் நிர்வாக சேவையகத்தின் IP முகவரியை மீண்டும் குறிப்பிட வேண்டாம்.

வீடியோவை இயக்கு

பாதுகாப்புச் சரிபார்ப்பை விரைவாக அமைப்பதற்கான ஸ்கிரிப்ட்

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","пароль","Пароль","Ключ","ключ","шифр","Шифр"]
}

முடிவுக்கு

இந்த கட்டுரை வேலைக்கான அடிப்படை சாத்தியங்களை மட்டுமே ஆராய்கிறது பைதான் எஸ்.டி.கே. மற்றும் தொகுதி cpapi(நீங்கள் யூகித்தபடி, இவை உண்மையில் ஒத்த சொற்கள்), மேலும் இந்த தொகுதியில் உள்ள குறியீட்டைப் படிப்பதன் மூலம், அதனுடன் பணிபுரிவதற்கான கூடுதல் வாய்ப்புகளை நீங்கள் கண்டுபிடிப்பீர்கள். உங்கள் சொந்த வகுப்புகள், செயல்பாடுகள், முறைகள் மற்றும் மாறிகள் ஆகியவற்றுடன் அதை நீங்கள் சேர்க்க விரும்புவது சாத்தியம். நீங்கள் எப்போதும் உங்கள் வேலையைப் பகிரலாம் மற்றும் பிரிவில் உள்ள செக் பாயிண்டிற்கான பிற ஸ்கிரிப்ட்களைப் பார்க்கலாம் கோட்ஹப் சமூகத்தில் செக்மேட்ஸ், இது தயாரிப்பு உருவாக்குநர்கள் மற்றும் பயனர்கள் இருவரையும் ஒன்றிணைக்கிறது.

மகிழ்ச்சியான குறியீட்டு மற்றும் இறுதிவரை படித்ததற்கு நன்றி!

ஆதாரம்: www.habr.com

DDoS பாதுகாப்பு, VPS VDS சர்வர்கள் கொண்ட தளங்களுக்கு நம்பகமான ஹோஸ்டிங் வாங்கவும் 🔥 DDoS பாதுகாப்புடன் கூடிய நம்பகமான இணையதள ஹோஸ்டிங், VPS, VDS சர்வர்களை வாங்குங்கள் | ProHoster