Python SDK เชธเชพเชฅเซ‡ เชšเซ‡เช• เชชเซ‹เช‡เชจเซเชŸ API เชจเซ‡ เชธเชฐเชณ เชฌเชจเชพเชตเชตเซเช‚

Python SDK เชธเชพเชฅเซ‡ เชšเซ‡เช• เชชเซ‹เช‡เชจเซเชŸ API เชจเซ‡ เชธเชฐเชณ เชฌเชจเชพเชตเชตเซเช‚API เชธเชพเชฅเซ‡เชจเซ€ เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพเชจเซ€ เชธเช‚เชชเซ‚เชฐเซเชฃ เชถเช•เซเชคเชฟ เชคเซเชฏเชพเชฐเซ‡ เชชเซเชฐเช—เชŸ เชฅเชพเชฏ เช›เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช•เซ‹เชก เชธเชพเชฅเซ‡ เชเช•เชธเชพเชฅเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชœเซเชฏเชพเชฐเซ‡ API เชชเซเชฐเชคเชฟเชธเชพเชฆเซ‹เชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช—เชคเชฟเชถเซ€เชฒ เชฐเซ€เชคเซ‡ API เชตเชฟเชจเช‚เชคเซ€เช“ เช…เชจเซ‡ เชธเชพเชงเชจเซ‹ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพเชจเซเช‚ เชถเช•เซเชฏ เชฌเชจเซ‡ เช›เซ‡. เชœเซ‹ เช•เซ‡, เชคเซ‡ เชนเชœเซ เชชเชฃ เชงเซเชฏเชพเชจเชชเชพเชคเซเชฐ เชจเชฅเซ€ เชชเชพเชฏเชฅเซ‹เชจ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เชกเซ‡เชตเชฒเชชเชฎเซ‡เชจเซเชŸ เช•เชฟเชŸ (เชคเซเชฏเชพเชฐเชฌเชพเชฆ Python SDK เชคเชฐเซ€เช•เซ‡ เช“เชณเช–เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡) เชฎเชพเชŸเซ‡ เชชเซ‹เช‡เชจเซเชŸ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ API เชคเชชเชพเชธเซ‹, เชชเชฐเช‚เชคเซ เชจเชฟเชฐเชฐเซเชฅเช•. เชคเซ‡ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“ เช…เชจเซ‡ เช“เชŸเซ‹เชฎเซ‡เชถเชจ เช‰เชคเซเชธเชพเชนเซ€เช“เชจเชพ เชœเซ€เชตเชจเชจเซ‡ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชฐเซ€เชคเซ‡ เชธเชฐเชณ เชฌเชจเชพเชตเซ‡ เช›เซ‡. เชชเชพเชฏเชฅเซ‹เชจเซ‡ เชคเชพเชœเซ‡เชคเชฐเชฎเชพเช‚ เช–เซ‚เชฌ เชœ เชฒเซ‹เช•เชชเซเชฐเชฟเชฏเชคเชพ เชฎเซ‡เชณเชตเซ€ เช›เซ‡ เช…เชจเซ‡ เชฎเซ‡เช‚ เช—เซ‡เชช เชญเชฐเชตเชพเชจเซเช‚ เช…เชจเซ‡ เชฎเซเช–เซเชฏ เชฒเช•เซเชทเชฃเซ‹เชจเซ€ เชธเชฎเซ€เช•เซเชทเชพ เช•เชฐเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚ เช›เซ‡. เชชเซ‹เช‡เชจเซเชŸ API เชชเชพเชฏเชฅเซ‹เชจ เชกเซ‡เชตเชฒเชชเชฎเซ‡เชจเซเชŸ เช•เชฟเชŸ เชคเชชเชพเชธเซ‹. เช† เชฒเซ‡เช– เชนเซ‡เชฌเซเชฐเซ‡ เชชเชฐเชจเชพ เช…เชจเซเชฏ เชฒเซ‡เช–เชฎเชพเช‚ เชเช• เช‰เชคเซเชคเชฎ เช‰เชฎเซ‡เชฐเซ‹ เชคเชฐเซ€เช•เซ‡ เชธเซ‡เชตเชพ เช†เชชเซ‡ เช›เซ‡ เชชเซ‹เช‡เชจเซเชŸ R80.10 API เชคเชชเชพเชธเซ‹. CLI, เชธเซเช•เซเชฐเชฟเชชเซเชŸเซเชธ เช…เชจเซ‡ เชตเชงเซ เชฆเซเชตเชพเชฐเชพ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ. เช…เชฎเซ‡ Python SDK เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเซเช•เซเชฐเชฟเชชเซเชŸเซเชธ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฒเช–เชตเซ€ เชคเซ‡ เชœเซ‹เชˆเชถเซเช‚ เช…เชจเซ‡ เชธเช‚เชธเซเช•เชฐเชฃ 1.6 (R80.40 เชฅเซ€ เชถเชฐเซ‚ เช•เชฐเซ€เชจเซ‡ เชธเชชเซ‹เชฐเซเชŸเซ‡เชก) เชฎเชพเช‚ เชจเชตเซ€ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ API เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพเชจเซ‡ เชจเชœเซ€เช•เชฅเซ€ เชœเซ‹เชˆเชถเซเช‚. เชฒเซ‡เช–เชจเซ‡ เชธเชฎเชœเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ APIs เช…เชจเซ‡ Python เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเชพ เชฎเซ‚เชณเชญเซ‚เชค เชœเซเชžเชพเชจเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡.

เชšเซ‡เช• เชชเซ‹เชˆเชจเซเชŸ เชธเช•เซเชฐเชฟเชฏเชชเชฃเซ‡ API เชตเชฟเช•เชธเชพเชตเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ เช…เชจเซ‡ เช† เช•เซเชทเชฃเซ‡ เชจเซ€เชšเซ‡เชจเชพเชจเซ‡ เชฌเชนเชพเชฐ เชชเชพเชกเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡:

Python SDK เชนเชพเชฒเชฎเชพเช‚ เชซเช•เซเชค เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ API เช…เชจเซ‡ เชธเชพเชฅเซ‡ เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชธเชฎเชฐเซเชฅเชจ เช†เชชเซ‡ เช›เซ‡ Gaia API. เช…เชฎเซ‡ เช† เชฎเซ‹เชกเซเชฏเซเชฒเชฎเชพเช‚ เชธเซŒเชฅเซ€ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชตเชฐเซเช—เซ‹, เชชเชฆเซเชงเชคเชฟเช“ เช…เชจเซ‡ เชšเชฒเซ‹เชจเซ‡ เชœเซ‹เชˆเชถเซเช‚.

Python SDK เชธเชพเชฅเซ‡ เชšเซ‡เช• เชชเซ‹เช‡เชจเซเชŸ API เชจเซ‡ เชธเชฐเชณ เชฌเชจเชพเชตเชตเซเช‚

เชฎเซ‹เชกเซเชฏเซเชฒ เชธเซเชฅเชพเชชเชฟเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชฎเซ‹เชกเซเชฏเซเชฒ cpapi เชฅเซ€ เชเชกเชชเชฅเซ€ เช…เชจเซ‡ เชธเชฐเชณเชคเชพเชฅเซ€ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‡ เช›เซ‡ เช—เซ€เชฅเชฌ เชชเชฐ เชธเชคเซเชคเชพเชตเชพเชฐ เชšเซ‡เช• เชชเซ‹เช‡เชจเซเชŸ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€ เชจเซ€ เชฎเชฆเชฆ เชธเชพเชฅเซ‡ เชซเชณเชจเซเช‚ เชจเชพเชจเซเช‚ เชฌเซ€เชœ. เชตเชฟเช—เชคเชตเชพเชฐ เชธเซเชฅเชพเชชเชจ เชธเซ‚เชšเชจเชพเช“ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ README.md. เช† เชฎเซ‹เชกเซเชฏเซเชฒ Python เช†เชตเซƒเชคเซเชคเชฟเช“ 2.7 เช…เชจเซ‡ 3.7 เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช…เชจเซเช•เซ‚เชณ เช›เซ‡. เช† เชฒเซ‡เช–เชฎเชพเช‚, Python 3.7 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช‰เชฆเชพเชนเชฐเชฃเซ‹ เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เชœเซ‹ เช•เซ‡, เชชเชพเชฏเชฅเซ‹เชจ SDK เชจเซ‡ เชšเซ‡เช• เชชเซ‹เชˆเชจเซเชŸ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ เชธเชฐเซเชตเชฐ (เชธเซเชฎเชพเชฐเซเชŸ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ) เชฅเซ€ เชธเซ€เชงเซเช‚ เชœ เชšเชฒเชพเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡ เชฎเชพเชคเซเชฐ เชชเชพเชฏเชฅเซ‹เชจ 2.7 เชจเซ‡ เชธเชชเซ‹เชฐเซเชŸ เช•เชฐเซ‡ เช›เซ‡, เชคเซ‡เชฅเซ€ เช›เซ‡เชฒเซเชฒเซ‹ เชตเชฟเชญเชพเช— เชธเช‚เชธเซเช•เชฐเชฃ 2.7 เชฎเชพเชŸเซ‡ เช•เซ‹เชก เชชเซเชฐเชฆเชพเชจ เช•เชฐเชถเซ‡. เชฎเซ‹เชกเซเชฏเซเชฒ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซเชฏเชพ เชชเช›เซ€ เชคเชฐเชค เชœ, เชนเซเช‚ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เช“เชฎเชพเช‚ เช‰เชฆเชพเชนเชฐเชฃเซ‹ เชœเซ‹เชตเชพเชจเซ€ เชญเชฒเชพเชฎเชฃ เช•เชฐเซเช‚ เช›เซเช‚ เช‰เชฆเชพเชนเชฐเชฃเซ‹_python2 ะธ เช‰เชฆเชพเชนเชฐเชฃเซ‹_python3.

เชชเซเชฐเชพเชฐเช‚เชญ

เช…เชฎเซ‡ cpapi เชฎเซ‹เชกเซเชฏเซเชฒเชจเชพ เช˜เชŸเช•เซ‹ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเซ€ เชถเช•เซ€เช เชคเซ‡ เชฎเชพเชŸเซ‡, เช…เชฎเชพเชฐเซ‡ เชฎเซ‹เชกเซเชฏเซเชฒเชฎเชพเช‚เชฅเซ€ เช†เชฏเชพเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ cpapi เช“เช›เชพเชฎเชพเช‚ เช“เช›เชพ เชฌเซ‡ เช†เชตเชถเซเชฏเช• เชตเชฐเซเช—เซ‹:

APIClient ะธ APIClientArgs

from cpapi import APIClient, APIClientArgs

ะšะปะฐัั APIClientArgs API เชธเชฐเซเชตเชฐ เช…เชจเซ‡ เชตเชฐเซเช— เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฃ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡ APIClient API เชธเชพเชฅเซ‡ เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช›เซ‡.

เช•เชจเซ‡เช•เซเชถเชจ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชจเช•เซเช•เซ€ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

API เชจเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชตเชฟเชตเชฟเชง เชชเชฐเชฟเชฎเชพเชฃเซ‹เชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชตเชฐเซเช—เชจเซ‹ เชฆเชพเช–เชฒเซ‹ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ APIClientArgs. เชธเซˆเชฆเซเชงเชพเช‚เชคเชฟเช• เชฐเซ€เชคเซ‡, เชคเซ‡เชจเชพ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชชเซ‚เชฐเซเชตเชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช›เซ‡ เช…เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ เช•เช‚เชŸเซเชฐเซ‹เชฒ เชธเชฐเซเชตเชฐ เชชเชฐ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชšเชฒเชพเชตเซ€ เชฐเชนเซเชฏเชพ เชนเซ‹เชฏ, เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡เชฎเชจเซ‡ เชธเซเชชเชทเซเชŸ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€.

client_args = APIClientArgs()

เชชเชฐเช‚เชคเซ เชœเซเชฏเชพเชฐเซ‡ เชคเซƒเชคเซ€เชฏ-เชชเช•เซเชท เชนเซ‹เชธเซเชŸ เชชเชฐ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เชนเซ‹เชฏ, เชคเซเชฏเชพเชฐเซ‡ เชคเชฎเชพเชฐเซ‡ เช“เช›เชพเชฎเชพเช‚ เช“เช›เซเช‚ IP เชธเชฐเชจเชพเชฎเซเช‚ เช…เชฅเชตเชพ API เชธเชฐเซเชตเชฐ (เชœเซ‡ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ เชธเชฐเซเชตเชฐ เชคเชฐเซ€เช•เซ‡ เชชเชฃ เช“เชณเช–เชพเชฏ เช›เซ‡) เชจเชพ เชนเซ‹เชธเซเชŸ เชจเชพเชฎเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชจเซ€เชšเซ‡เชจเชพ เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚, เช…เชฎเซ‡ เชธเชฐเซเชตเชฐ เช•เชจเซ‡เช•เซเชถเชจ เชชเชฐเชฟเชฎเชพเชฃ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ€เช เช›เซ€เช เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชธเซเชŸเซเชฐเชฟเช‚เช— เชคเชฐเซ€เช•เซ‡ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ เชธเชฐเซเชตเชฐเชจเซเช‚ IP เชธเชฐเชจเชพเชฎเซเช‚ เชธเซ‹เช‚เชชเซ€เช เช›เซ€เช.

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 เชตเชฐเซเช—เชจเชพ เช‰เชฆเชพเชนเชฐเชฃเซ‹เชฎเชพเช‚ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเชˆ เชถเช•เชพเชฏ เชคเซ‡เชตเซ€ เชฆเชฒเซ€เชฒเซ‹ เชšเซ‡เช• เชชเซ‹เช‡เชจเซเชŸ เชเชกเชฎเชฟเชจเชฟเชธเซเชŸเซเชฐเซ‡เชŸเชฐเซเชธ เชฎเชพเชŸเซ‡ เชธเชพเชนเชœเชฟเช• เช›เซ‡ เช…เชจเซ‡ เชตเชงเชพเชฐเชพเชจเซ€ เชŸเชฟเชชเซเชชเชฃเซ€เช“เชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€.

APIClient เช…เชจเซ‡ เชธเช‚เชฆเชฐเซเชญ เชฎเซ‡เชจเซ‡เชœเชฐ เชฆเซเชตเชพเชฐเชพ เช•เชจเซ‡เช•เซเชŸ เชฅเชˆ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

ะšะปะฐัั APIClient เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เชธเซŒเชฅเซ€ เช…เชจเซเช•เซ‚เชณ เชฐเซ€เชค เชธเช‚เชฆเชฐเซเชญ เชตเซเชฏเชตเชธเซเชฅเชพเชชเช• เชฆเซเชตเชพเชฐเชพ เช›เซ‡. APIClient เช•เซเชฒเชพเชธเชจเชพ เชฆเชพเช–เชฒเชพเชฎเชพเช‚ เชชเชพเชธ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชคเซ‡ เช•เชจเซ‡เช•เซเชถเชจ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เช›เซ‡ เชœเซ‡ เช…เช—เชพเช‰เชจเชพ เชชเช—เชฒเชพเชฎเชพเช‚ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เชนเชคเชพ.

with APIClient(client_args) as client:

เชธเช‚เชฆเชฐเซเชญ เชฎเซ‡เชจเซ‡เชœเชฐ API เชธเชฐเซเชตเชฐ เชชเชฐ เช†เชชเชฎเซ‡เชณเซ‡ เชฒเซ‹เช—เชฟเชจ เช•เซ‰เชฒ เช•เชฐเชถเซ‡ เชจเชนเซ€เช‚, เชชเชฐเช‚เชคเซ เชคเซ‡ เชฌเชนเชพเชฐ เชจเซ€เช•เชณเชคเซ€ เชตเช–เชคเซ‡ เชฒเซ‹เช—เช†เช‰เชŸ เช•เซ‰เชฒ เช•เชฐเชถเซ‡. เชœเซ‹ เช•เซ‹เชˆ เช•เชพเชฐเชฃเซ‹เชธเชฐ 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)

เชฎเชนเซ‡เชฐเชฌเชพเชจเซ€ เช•เชฐเซ€เชจเซ‡ เชจเซ‹เช‚เชง เช•เชฐเซ‹ เช•เซ‡ เชญเชตเชฟเชทเซเชฏเชฎเชพเช‚ เชตเชฐเซเช— APIClient เชฆเชฐเซ‡เช• API เช•เซ‰เชฒ เชคเชชเชพเชธเชถเซ‡ (เชชเชฆเซเชงเชคเชฟเช“ api_call ะธ api_query, เช…เชฎเซ‡ เชคเซ‡เชฎเชจเชพ เชตเชฟเชถเซ‡ เชฅเซ‹เชกเซ€ เช†เช—เชณ เชตเชพเชค เช•เชฐเซ€เชถเซเช‚) API เชธเชฐเซเชตเชฐ เชชเชฐ sha1 เชซเชฟเช‚เช—เชฐเชชเซเชฐเชฟเชจเซเชŸ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ. เชชเชฐเช‚เชคเซ เชœเซ‹, API เชธเชฐเซเชตเชฐ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเชจเซ€ sha1 เชซเชฟเช‚เช—เชฐเชชเซเชฐเชฟเชจเซเชŸ เชคเชชเชพเชธเชคเซ€ เชตเช–เชคเซ‡, เชเช• เชญเซ‚เชฒ เชฎเชณเซ€ เช†เชตเซ‡ เช›เซ‡ (เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เช…เชœเชพเชฃเซเชฏเซเช‚ เช›เซ‡ เช…เชฅเชตเชพ เชฌเชฆเชฒเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡), เชชเชฆเซเชงเชคเชฟ เชšเซ‡เช•_เชซเชฟเช‚เช—เชฐเชชเซเชฐเชฟเชจเซเชŸ เชธเซเชฅเชพเชจเชฟเช• เชฎเชถเซ€เชจ เชชเชฐ เช†เชชเชฎเซ‡เชณเซ‡ เชคเซ‡เชจเชพ เชตเชฟเชถเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เช‰เชฎเซ‡เชฐเชตเชพ/เชฌเชฆเชฒเชตเชพเชจเซ€ เชคเช• เชชเซ‚เชฐเซ€ เชชเชพเชกเชถเซ‡. เช† เชšเซ‡เช•เชจเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เช…เช•เซเชทเชฎ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ (เชชเชฐเช‚เชคเซ APIClientArgs เชฆเชฒเซ€เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, 127.0.0.1 เชธเชพเชฅเซ‡ เช•เชจเซ‡เช•เซเชŸ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡, API เชธเชฐเซเชตเชฐ เชชเชฐ เชœ เชธเซเช•เซเชฐเชฟเชชเซเชŸเซ‹ เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซ‹ เชœ เช†เชจเซ€ เชญเชฒเชพเชฎเชฃ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ - เช…เชธเซเชฐเช•เซเชทเชฟเชค_เช“เชŸเซ‹_เชธเซเชตเซ€เช•เชพเชฐเซ‹ (APIClientArgs เชตเชฟเชถเซ‡ เชตเชงเซ เชชเชนเซ‡เชฒเชพเช‚ โ€œเชกเชฟเชซเชพเชˆเชจเชฟเช‚เช— เช•เชจเซ‡เช•เซเชถเชจ เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐเซเชธโ€เชฎเชพเช‚ เชœเซเช“).

client_args = APIClientArgs(unsafe_auto_accept=True)

API เชธเชฐเซเชตเชฐ เชชเชฐ เชฒเซ‰เช—เชฟเชจ เช•เชฐเซ‹

ะฃ APIClient API เชธเชฐเซเชตเชฐเชฎเชพเช‚ เชฒเซ‰เช— เช‡เชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ 3 เชœเซ‡เชŸเชฒเซ€ เชชเชฆเซเชงเชคเชฟเช“ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชฆเชฐเซ‡เช• เชคเซ‡เชจเซ‹ เช…เชฐเซเชฅ เชธเชฎเชœเซ‡ เช›เซ‡ เชธเซ€เชกเซ€(เชธเชคเซเชฐ-เช†เชˆเชกเซ€), เชœเซ‡ เชนเซ‡เชกเชฐเชฎเชพเช‚ เชฆเชฐเซ‡เช• เช…เชจเซเช—เชพเชฎเซ€ API เช•เซ‰เชฒเชฎเชพเช‚ เช†เชชเชฎเซ‡เชณเซ‡ เชตเชชเชฐเชพเชฏ เช›เซ‡ (เช† เชชเชฐเชฟเชฎเชพเชฃเชจเชพ เชนเซ‡เชกเชฐเชฎเชพเช‚ เชจเชพเชฎ เช›เซ‡ X-chkp-sid), เชคเซ‡เชฅเซ€ เช† เชชเชฐเชฟเชฎเชพเชฃ เชชเชฐ เช†เช—เชณ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€.

เชชเซเชฐเชตเซ‡เชถ เชชเชฆเซเชงเชคเชฟ

เชฒเซ‰เช—เชฟเชจ เช…เชจเซ‡ เชชเชพเชธเชตเชฐเซเชกเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ‹ เชตเชฟเช•เชฒเซเชช (เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚, เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเชพเชฎ เชเชกเชฎเชฟเชจ เช…เชจเซ‡ เชชเชพเชธเชตเชฐเซเชก 1q2w3e เชธเซเชฅเชฟเชคเชฟเชจเซ€ เชฆเชฒเซ€เชฒเซ‹ เชคเชฐเซ€เช•เซ‡ เชชเชธเชพเชฐ เชฅเชพเชฏ เช›เซ‡):

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

เชฒเซ‰เช—เชฟเชจ เชชเชฆเซเชงเชคเชฟเชฎเชพเช‚ เชตเชงเชพเชฐเชพเชจเชพ เชตเซˆเช•เชฒเซเชชเชฟเช• เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชชเชฃ เช‰เชชเชฒเชฌเซเชง เช›เซ‡; เช…เชนเซ€เช‚ เชคเซ‡เชฎเชจเชพ เชจเชพเชฎ เช…เชจเซ‡ เชกเชฟเชซเซ‰เชฒเซเชŸ เชฎเซ‚เชฒเซเชฏเซ‹ เช›เซ‡:

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

api_key เชชเชฆเซเชงเชคเชฟ เชธเชพเชฅเซ‡ เชฒเซ‹เช—เชฟเชจ เช•เชฐเซ‹

api เช•เซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ‹ เชตเชฟเช•เชฒเซเชช (เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ เชตเชฐเซเชเชจ R80.40/Management API v1.6 เชฅเซ€ เชถเชฐเซ‚ เช•เชฐเซ€เชจเซ‡ เชธเชชเซ‹เชฐเซเชŸเซ‡เชก, "3TsbPJ8ZKjaJGvFyoFqHFA==" เช† API เช•เซ€ เช…เชงเชฟเช•เซƒเชคเชคเชพ เชชเชฆเซเชงเชคเชฟ เชธเชพเชฅเซ‡ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ เชธเชฐเซเชตเชฐ เชชเชฐเชจเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชฎเชพเช‚เชจเชพ เชเช• เชฎเชพเชŸเซ‡ API เช•เซ€ เชฎเซ‚เชฒเซเชฏ เช›เซ‡:

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

เชชเชฆเซเชงเชคเชฟเชฎเชพเช‚ login_with_api_key เชชเชฆเซเชงเชคเชฟเชจเซ€ เชœเซ‡เชฎ เชธเชฎเชพเชจ เชตเซˆเช•เชฒเซเชชเชฟเช• เชชเชฐเชฟเชฎเชพเชฃเซ‹ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ เชชเซเชฐเชตเซ‡เชถ.

login_as_root เชชเชฆเซเชงเชคเชฟ

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 เช•เซ‰เชฒเซเชธเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชชเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡

เช† เชชเช›เซ€ เชคเชฎเซ‡ เชตเชฐเซเช—เชจเชพ เชšเชฒเซ‹ เช…เชจเซ‡ เชชเชฆเซเชงเชคเชฟเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ APIเชชเซเชฐเชคเชฟเชธเชพเชฆ(เชธเช‚เชฆเชฐเซเชญ เชฎเซ‡เชจเซ‡เชœเชฐเชจเซ€ เช…เช‚เชฆเชฐ เช…เชจเซ‡ เชฌเชนเชพเชฐ เชฌเช‚เชจเซ‡). เชตเชฐเซเช—เชฎเชพเช‚ APIเชชเซเชฐเชคเชฟเชธเชพเชฆ 4 เชชเชฆเซเชงเชคเชฟเช“ เช…เชจเซ‡ 5 เชšเชฒเซ‹ เชชเซ‚เชฐเซเชตเชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช›เซ‡; เช…เชฎเซ‡ เชธเซŒเชฅเซ€ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชฎเซเชฆเซเชฆเชพเช“ เชชเชฐ เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เชงเซเชฏเชพเชจ เช†เชชเซ€เชถเซเช‚.

Python SDK เชธเชพเชฅเซ‡ เชšเซ‡เช• เชชเซ‹เช‡เชจเซเชŸ API เชจเซ‡ เชธเชฐเชณ เชฌเชจเชพเชตเชตเซเช‚

เชธเชซเชณเชคเชพ

เชถเชฐเซเช†เชคเชฎเชพเช‚, API เช•เซ‰เชฒ เชธเชซเชณ เชนเชคเซ‹ เช…เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎ เชชเชพเช›เซเช‚ เช†เชตเซเชฏเซเช‚ เชคเซ‡เชจเซ€ เช–เชพเชคเชฐเซ€ เช•เชฐเชตเซ€ เช เชธเชพเชฐเซ‹ เชตเชฟเชšเชพเชฐ เชนเชถเซ‡. เช† เชฎเชพเชŸเซ‡ เชเช• เชชเชฆเซเชงเชคเชฟ เช›เซ‡ เชธเชซเชณเชคเชพ:

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

เชœเซ‹ API เช•เซ‰เชฒ เชธเชซเชณ เชฅเชฏเซ‹ เชนเซ‹เชฏ เชคเซ‹ เชธเชพเชšเซ‹ เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡ (เชชเซเชฐเชคเชฟเชธเชพเชฆ เช•เซ‹เชก - 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.

เชธเซ‡เชŸ_เชธเชซเชณเชคเชพ_เชธเซเชฅเชฟเชคเชฟ

เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชธเชซเชณเชคเชพเชจเซ€ เชธเซเชฅเชฟเชคเชฟเชจเซเช‚ เชฎเซ‚เชฒเซเชฏ เชฌเชฆเชฒเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเซ€ เชถเช•เซ‡ เช›เซ‡. เชคเช•เชจเซ€เช•เซ€ เชฐเซ€เชคเซ‡, เชคเชฎเซ‡ เชคเซเชฏเชพเช‚ เช•เช‚เชˆเชชเชฃ เชฎเซ‚เช•เซ€ เชถเช•เซ‹ เช›เซ‹, เชเช• เชจเชฟเชฏเชฎเชฟเชค เชธเซเชŸเซเชฐเชฟเช‚เช— เชชเชฃ. เชชเชฐเช‚เชคเซ เชเช• เชตเชพเชธเซเชคเชตเชฟเช• เช‰เชฆเชพเชนเชฐเชฃ เชšเซ‹เช•เซเช•เชธ เชธเชพเชฅเซ‡เชจเซ€ เชถเชฐเชคเซ‹ เชนเซ‡เช เชณ เช† เชชเชฐเชฟเชฎเชพเชฃเชจเซ‡ False เชชเชฐ เชฐเซ€เชธเซ‡เชŸ เช•เชฐเชตเชพเชจเซเช‚ เช›เซ‡. เชจเซ€เชšเซ‡, เชœเซเชฏเชพเชฐเซ‡ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ เชธเชฐเซเชตเชฐ เชชเชฐ เช•เชพเชฐเซเชฏเซ‹ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเชพ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เช‰เชฆเชพเชนเชฐเชฃ เชชเชฐ เชงเซเชฏเชพเชจ เช†เชชเซ‹, เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เช† เชตเชฟเชจเช‚เชคเซ€เชจเซ‡ เช…เชธเชซเชณ เช—เชฃเซ€เชถเซเช‚ (เช…เชฎเซ‡ เชธเชซเชณเชคเชพ เชšเชฒเชจเซ‡ เช†เชจเชพ เชชเชฐ เชธเซ‡เชŸ เช•เชฐเซ€เชถเซเช‚. เช–เซ‹เชŸเซเช‚, เช เชนเช•เซ€เช•เชค เชนเซ‹เชตเชพ เช›เชคเชพเช‚ เช•เซ‡ API เช•เซ‰เชฒ เชธเชซเชณ เชฅเชฏเซ‹ เชนเชคเซ‹ เช…เชจเซ‡ เช•เซ‹เชก 200 เชชเชฐเชค เช•เชฐเซเชฏเซ‹ เชนเชคเซ‹).

for task in task_result.data["tasks"]:
    if task["status"] == "failed" or task["status"] == "partially succeeded":
        task_result.set_success_status(False)
        break

เชชเซเชฐเชคเชฟเชญเชพเชต()

เชชเซเชฐเชคเชฟเชธเชพเชฆ เชชเชฆเซเชงเชคเชฟ เชคเชฎเชจเซ‡ เชชเซเชฐเชคเชฟเชญเชพเชต เช•เซ‹เชก (เชธเซเชŸเซ‡เชŸเชธ_เช•เซ‹เชก) เช…เชจเซ‡ เชชเซเชฐเชคเชฟเชญเชพเชต เชฌเซ‹เชกเซ€ (เชฌเซ‹เชกเซ€) เชธเชพเชฅเซ‡ เชถเชฌเซเชฆเช•เซ‹เชถ เชœเซ‹เชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡.

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 เช•เซ‰เชฒเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ API 1.6 เชฎเชพเช‚ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เชนเชคเชพ.

เชชเซเชฐเชฅเชฎ, เชšเชพเชฒเซ‹ เชœเซ‹เชˆเช เช•เซ‡ เช•เซ‹เชฒเซเชธ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เชเชก-เชนเซ‹เชธเซเชŸ ะธ เช‰เชฎเซ‡เชฐเซ‹-เชธเชฐเชจเชพเชฎเซเช‚-เชถเซเชฐเซ‡เชฃเซ€. เชšเชพเชฒเซ‹ เช•เชนเซ€เช เช•เซ‡ เช†เชชเชฃเซ‡ เชธเชฌเชจเซ‡เชŸ 192.168.0.0/24 เชจเชพ เชฌเชงเชพ IP เชเชกเซเชฐเซ‡เชธ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชœเซ‡เชฎเชพเช‚เชฅเซ€ เช›เซ‡เชฒเซเชฒเซเช‚ เช“เช•เซเชŸเซ‡เชŸ 5 เช›เซ‡, เชนเซ‹เชธเซเชŸ เชŸเชพเชˆเชชเชจเชพ เช“เชฌเซเชœเซ‡เช•เซเชŸ เชคเชฐเซ€เช•เซ‡, เช…เชจเซ‡ เช…เชจเซเชฏ เชคเชฎเชพเชฎ เช†เชˆเชชเซ€ เชเชกเซเชฐเซ‡เชธเชจเซ‡ เชเชกเซเชฐเซ‡เชธ เชฐเซ‡เชจเซเชœ เชชเซเชฐเช•เชพเชฐเชจเชพ เช“เชฌเซเชœเซ‡เช•เซเชŸ เชคเชฐเซ€เช•เซ‡ เชฒเช–เซ‹. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชธเชฌเชจเซ‡เชŸ เชธเชฐเชจเชพเชฎเซเช‚ เช…เชจเซ‡ เชฌเซเชฐเซ‹เชกเช•เชพเชธเซเชŸ เชธเชฐเชจเชพเชฎเซเช‚ เชฌเชพเช•เชพเชค เชฐเชพเช–เซ‹.

เชคเซ‡เชฅเซ€, เชจเซ€เชšเซ‡ เชเช• เชธเซเช•เซเชฐเชฟเชชเซเชŸ เช›เซ‡ เชœเซ‡ เช† เชธเชฎเชธเซเชฏเชพเชจเซเช‚ เชจเชฟเชฐเชพเช•เชฐเชฃ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชนเซ‹เชธเซเชŸ เชชเซเชฐเช•เชพเชฐเชจเชพ 50 เช“เชฌเซเชœเซ‡เช•เซเชŸ เช…เชจเซ‡ เชเชกเซเชฐเซ‡เชธ เชฐเซ‡เชจเซเชœ เชชเซเชฐเช•เชพเชฐเชจเชพ 51 เช“เชฌเซเชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเซ‡ เช›เซ‡. เชธเชฎเชธเซเชฏเชพเชจเซ‡ เช‰เช•เซ‡เชฒเชตเชพ เชฎเชพเชŸเซ‡, 101 API เช•เซ‰เชฒเซเชธ เช†เชตเชถเซเชฏเช• เช›เซ‡ (เช…เช‚เชคเชฟเชฎ เชชเชฌเซเชฒเชฟเชถ เช•เซ‰เชฒเชจเซ€ เช—เชฃเชคเชฐเซ€ เช•เชฐเชคเชพ เชจเชฅเซ€). เช‰เชชเชฐเชพเช‚เชค, เชŸเชพเช‡เชฎเช‡เชŸ เชฎเซ‹เชกเซเชฏเซเชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, เช…เชฎเซ‡ เชซเซ‡เชฐเชซเชพเชฐเซ‹ เชชเซเชฐเช•เชพเชถเชฟเชค เชฅเชพเชฏ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€ เชธเซเช•เซเชฐเชฟเชชเซเชŸเชจเซ‡ เชเช•เซเชเชฟเช•เซเชฏเซเชŸ เช•เชฐเชตเชพเชฎเชพเช‚ เชฒเชพเช—เชคเชพ เชธเชฎเชฏเชจเซ€ เช—เชฃเชคเชฐเซ€ เช•เชฐเซ€เช เช›เซ€เช.

เชเชก-เชนเซ‹เชธเซเชŸ เช…เชจเซ‡ เชเชก-เชเชกเซเชฐเซ‡เชธ-เชฐเซ‡เชจเซเชœเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเซเช•เซเชฐเชฟเชชเซเชŸ

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 เช•เซ‰เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเชฎเชพเชจ เชธเชฎเชธเซเชฏเชพเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชนเชฒ เช•เชฐเชตเซ€ เชเชก-เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธ-เชฌเซ‡เชš, เชœเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เช†เชงเชพเชฐ API เช†เชตเซƒเชคเซเชคเชฟ 1.6 เชฎเชพเช‚ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹. เช† เช•เซ‰เชฒ เชคเชฎเชจเซ‡ เชเช• API เชตเชฟเชจเช‚เชคเซ€เชฎเชพเช‚ เชเช• เชธเชพเชฅเซ‡ เช…เชจเซ‡เช• เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เชคเชฆเซเชชเชฐเชพเช‚เชค, เช† เชตเชฟเชตเชฟเชง เชชเซเชฐเช•เชพเชฐเชจเชพ เชชเชฆเชพเชฐเซเชฅเซ‹ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชฏเชœเชฎเชพเชจเซ‹, เชธเชฌเชจเซ‡เชŸ เช…เชจเซ‡ เชธเชฐเชจเชพเชฎเชพเช‚ เชฐเซ‡เชจเซเชœ). เช†เชฎ, เช…เชฎเชพเชฐเซเช‚ เช•เชพเชฐเซเชฏ เชเช• API เช•เซ‰เชฒเชจเชพ เชฎเชพเชณเช–เชพเชฎเชพเช‚ เช‰เช•เซ‡เชฒเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เชเชก-เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธ-เชฌเซ‡เชšเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเซเช•เซเชฐเชฟเชชเซเชŸ

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 เช•เซ‰เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฌเชนเซเชตเชฟเชง เช‘เชฌเซเชœเซ‡เช•เซเชŸ เช•เชพเชขเซ€ เชถเช•เซ‹ เช›เซ‹ เชกเชฟเชฒเซ€เชŸ-เช“เชฌเซเชœเซ‡เช•เซเชŸเซเชธ-เชฌเซ‡เชš. เชนเชตเซ‡ เชšเชพเชฒเซ‹ เช•เซ‹เชก เช‰เชฆเชพเชนเชฐเชฃ เชœเซ‹เชˆเช เชœเซ‡ เช…เช—เชพเช‰ เชฌเชจเชพเชตเซ‡เชฒเชพ เชฌเชงเชพ เชนเซ‹เชธเซเชŸเชจเซ‡ เช•เชพเชขเซ€ เชจเชพเช–เซ‡ เช›เซ‡ เชเชก-เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธ-เชฌเซ‡เชš.

เชกเชฟเชฒเซ€เชŸ-เช“เชฌเซเชœเซ‡เช•เซเชŸเซเชธ-เชฌเซ‡เชšเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธเชจเซ‡ เช•เชพเชขเซ€ เชจเชพเช–เชตเซเช‚

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 เช…เชจเซ‡ เช•เช‚เชŸเซเชฐเซ‹เชฒ เชธเชฐเซเชตเชฐ เชชเชฐ Python เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชšเชฒเชพเชตเชตเชพเชจเซ€ เชธเซเชตเชฟเชงเชพเช“. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชเช• เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชšเชฒเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชœเซ‡ เชจเซ‡เชŸเชตเชฐเซเช• เช“เชกเชฟเชŸเซ€เช‚เช— เชœเซ‡เชตเชพ เช•เชพเชฐเซเชฏ เชฎเชพเชŸเซ‡ เชจเชตเชพ เช—เซ‡เชŸเชตเซ‡เชจเซ€ เช—เซ‹เช เชตเชฃเซ€เชจเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เช•เชฐเซ‡ เช›เซ‡. เชธเซเชฐเช•เซเชทเชพ เชคเชชเชพเชธ. เชฎเชพเชฐเซ‡ เชœเซ‡ เชธเซเชตเชฟเชงเชพเช“เชจเซ‹ เชธเชพเชฎเชจเซ‹ เช•เชฐเชตเซ‹ เชชเชกเซเชฏเซ‹ เชนเชคเซ‹ เชคเซ‡ เชชเซˆเช•เซ€: เชซเช‚เช•เซเชถเชจ เชนเชœเซ€ เชธเซเชงเซ€ เชชเชพเชฏเชฅเซ‹เชจ 2.7 เชฎเชพเช‚ เชฆเซ‡เช–เชพเชฏเซเช‚ เชจเชฅเซ€ เช‡เชจเชชเซเชŸ, เชคเซ‡เชฅเซ€ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชœเซ‡ เชฎเชพเชนเชฟเชคเซ€ เชฆเชพเช–เชฒ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡เชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชซเช‚เช•เซเชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช•เชพเชšเซ‹_เช‡เชจเชชเซเชŸ. เชจเชนเชฟเช‚เชคเชฐ, เช•เซ‹เชก เช…เชจเซเชฏ เชฎเชถเซ€เชจเซ‹เชฅเซ€ เชฒเซ‹เช‚เชš เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเชฎเชพเชจ เช›เซ‡, เชซเช•เซเชค เชคเซ‡ เช•เชพเชฐเซเชฏเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชตเชงเซ เช…เชจเซเช•เซ‚เชณ เช›เซ‡ login_as_root, เชœเซ‡เชฅเซ€ เชคเชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเชพเชฎ, เชชเชพเชธเชตเชฐเซเชก เช…เชจเซ‡ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ เชธเชฐเซเชตเชฐเชจเซเช‚ 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","ะฟะฐั€ะพะปัŒ","ะŸะฐั€ะพะปัŒ","ะšะปัŽั‡","ะบะปัŽั‡","ัˆะธั„ั€","ะจะธั„ั€"] }

เชจเชฟเชทเซเช•เชฐเซเชท

เช† เชฒเซ‡เช– เช•เชพเชฎเชจเซ€ เชฎเชพเชคเซเชฐ เชฎเซ‚เชณเชญเซ‚เชค เชถเช•เซเชฏเชคเชพเช“เชจเซ€ เชคเชชเชพเชธ เช•เชฐเซ‡ เช›เซ‡ เชชเชพเชฏเชฅเซ‹เชจ SDK เช…เชจเซ‡ เชฎเซ‹เชกเซเชฏเซเชฒ cpapi(เชœเซ‡เชฎ เชคเชฎเซ‡ เช…เชจเซเชฎเชพเชจ เชฒเช—เชพเชตเซเชฏเซเช‚ เชนเชถเซ‡, เช† เชตเชพเชธเซเชคเชตเชฎเชพเช‚ เชธเชฎเชพเชจเชพเชฐเซเชฅเซ€ เช›เซ‡), เช…เชจเซ‡ เช† เชฎเซ‹เชกเซเชฏเซเชฒเชฎเชพเช‚ เช•เซ‹เชกเชจเซ‹ เช…เชญเซเชฏเชพเชธ เช•เชฐเซ€เชจเซ‡ เชคเชฎเซ‡ เชคเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ€ เชตเชงเซ เชคเช•เซ‹ เชถเซ‹เชงเซ€ เชถเช•เชถเซ‹. เชถเช•เซเชฏ เช›เซ‡ เช•เซ‡ เชคเชฎเซ‡ เชคเซ‡เชจเซ‡ เชคเชฎเชพเชฐเชพ เชชเซ‹เชคเชพเชจเชพ เชตเชฐเซเช—เซ‹, เช•เชพเชฐเซเชฏเซ‹, เชชเชฆเซเชงเชคเชฟเช“ เช…เชจเซ‡ เชšเชฒเซ‹ เชธเชพเชฅเซ‡ เชชเซ‚เชฐเช• เชฌเชจเชพเชตเชตเชพ เชฎเชพเช‚เช—เซ‹ เช›เซ‹. เชคเชฎเซ‡ เชนเช‚เชฎเซ‡เชถเชพ เชคเชฎเชพเชฐเซเช‚ เช•เชพเชฐเซเชฏ เชถเซ‡เชฐ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เชตเชฟเชญเชพเช—เชฎเชพเช‚ เชšเซ‡เช• เชชเซ‹เชˆเชจเซเชŸ เชฎเชพเชŸเซ‡ เช…เชจเซเชฏ เชธเซเช•เซเชฐเชฟเชชเซเชŸเซ‹ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹ เช•เซ‹เชกเชนเชฌ เชธเชฎเซเชฆเชพเชฏเชฎเชพเช‚ เชšเซ‡เช•เชฎเซ‡เชŸเซเชธ, เชœเซ‡ เช‰เชคเซเชชเชพเชฆเชจ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเช“ เช…เชจเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฌเช‚เชจเซ‡เชจเซ‡ เชเช•เชธเชพเชฅเซ‡ เชฒเชพเชตเซ‡ เช›เซ‡.

เชนเซ‡เชชเซ€ เช•เซ‹เชกเชฟเช‚เช— เช…เชจเซ‡ เช…เช‚เชค เชธเซเชงเซ€ เชตเชพเช‚เชšเชตเชพ เชฌเชฆเชฒ เช†เชญเชพเชฐ!

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹