APIs سان رابطي جي مڪمل طاقت ظاهر ٿئي ٿي جڏهن پروگرام ڪوڊ سان گڏ استعمال ڪيو وڃي، جڏهن اهو ممڪن ٿئي ٿو ته متحرڪ طور تي API درخواستون ۽ اوزار پيدا ڪرڻ API جوابن جو تجزيو ڪرڻ لاءِ. بهرحال، اهو اڃا تائين اڻڄاتل رهي ٿو پٿون سافٽ ويئر ڊولپمينٽ کٽ (هتي پٿون SDK جي طور تي حوالو ڏنو ويو آهي). چيڪ پوائنٽ مينيجمينٽ API، پر بيڪار. اهو خاص طور تي ڊولپرز ۽ آٽوميشن جي شوقينن جي زندگي کي آسان بڻائي ٿو. پٿون تازو ئي تمام گهڻي مقبوليت حاصل ڪئي آهي ۽ مون ان خال کي ڀرڻ ۽ بنيادي خصوصيتن جو جائزو وٺڻ جو فيصلو ڪيو. چيڪ پوائنٽ API پٿون ڊولپمينٽ کٽ. هي مضمون هيبري تي هڪ ٻئي مضمون ۾ هڪ بهترين اضافي طور ڪم ڪري ٿو چيڪ پوائنٽ R80.10 API. CLI ذريعي ڪنٽرول، اسڪرپٽ ۽ وڌيڪ. اسان ڏسنداسين ته ڪيئن لکجي اسڪرپٽس کي استعمال ڪندي Python SDK ۽ ويجھو نظر وٺو نئين مئنيجمينٽ API ڪارڪردگي تي نسخو 1.6 ۾ (سپورٽ شروع ٿيندڙ R80.40). مضمون کي سمجهڻ لاءِ، توهان کي APIs ۽ Python سان ڪم ڪرڻ جي بنيادي ڄاڻ جي ضرورت پوندي.
چيڪ پوائنٽ فعال طور تي ترقي ڪري رهيو آهي API ۽ هن وقت هيٺيون جاري ڪيون ويون آهن:
Python SDK في الحال صرف انتظام API سان رابطي جي حمايت ڪري ٿو ۽ Gaia API. اسان هن ماڊل ۾ سڀ کان اهم طبقن، طريقن ۽ متغيرن کي ڏسنداسين.
ماڊل انسٽال ڪرڻ
ماڊلول cpapi کان جلدي ۽ آساني سان انسٽال github تي سرڪاري چيڪ پوائنٽ مخزن مدد سان pip. تفصيلي تنصيب جون هدايتون موجود آهن README.md. هي ماڊل پائٿون ورزن 2.7 ۽ 3.7 سان ڪم ڪرڻ لاءِ ٺاهيل آهي. هن آرٽيڪل ۾، پٿون 3.7 استعمال ڪندي مثال ڏنا ويندا. بهرحال، پٿون SDK سڌو سنئون چيڪ پوائنٽ مئنيجمينٽ سرور (سمارٽ مئنيجمينٽ) مان هلائي سگھجي ٿو، پر اهي صرف پٿون 2.7 کي سپورٽ ڪن ٿا، تنهن ڪري آخري سيڪشن 2.7 ورزن لاءِ ڪوڊ مهيا ڪندو. ماڊل کي انسٽال ڪرڻ کان پوءِ فوري طور تي، مان سفارش ڪريان ٿو ڏسجي مثالن کي ڊائريڪٽرن ۾ مثال_python2 и مثال_python3.
شروع ڪرائڻ
اسان کي سي پي پي ماڊل جي اجزاء سان ڪم ڪرڻ جي قابل ٿيڻ لاء، اسان کي ماڊل مان درآمد ڪرڻ جي ضرورت آهي. cpapi گهٽ ۾ گهٽ ٻه گهربل طبقا:
API ڪلائنٽ и APIClientArgs
from cpapi import APIClient, APIClientArgs
ڪلاس APIClientArgs API سرور، ۽ طبقي سان ڪنيڪشن پيٽرولر لاء ذميوار آهي API ڪلائنٽ API سان رابطي لاءِ ذميوار آهي.
ڪنيڪشن جي ماپ جو تعين ڪرڻ
API سان ڳنڍڻ لاءِ مختلف پيرا ميٽرن کي بيان ڪرڻ لاءِ، توهان کي ڪلاس جو هڪ مثال ٺاهڻو پوندو APIClientArgs. اصول ۾، ان جا پيرا ميٽر اڳ ۾ بيان ڪيا ويا آهن ۽ جڏهن اسڪرپٽ کي ڪنٽرول سرور تي هلائي رهيا آهن، انهن کي بيان ڪرڻ جي ضرورت ناهي.
client_args = APIClientArgs()
پر جڏهن ٽئين پارٽي جي ميزبان تي هلندي، توهان کي گهٽ ۾ گهٽ IP پتي يا API سرور جي ميزبان جو نالو بيان ڪرڻ جي ضرورت آهي (جنهن کي مئنيجمينٽ سرور پڻ سڏيو ويندو آهي). هيٺ ڏنل مثال ۾، اسان وضاحت ڪريون ٿا سرور ڪنيڪشن پيٽرول ۽ ان کي تفويض ڪريو IP پتو مئنيجمينٽ سرور جو هڪ اسٽرنگ طور.
اچو ته سڀني پيرا ميٽرز ۽ انهن جي ڊفالٽ قدرن کي ڏسو جيڪي استعمال ڪري سگھجن ٿيون جڏهن 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 ۽ context مينيجر ذريعي ڳنڍڻ
ڪلاس API ڪلائنٽ ان کي استعمال ڪرڻ جو سڀ کان وڌيڪ آسان طريقو حوالو مينيجر جي ذريعي آهي. اهو سڀ ڪجهه منظور ٿيڻ جي ضرورت آهي APIClient ڪلاس جي مثال ۾ ڪنيڪشن پيٽرولر جيڪي اڳئين قدم ۾ بيان ڪيا ويا آهن.
with APIClient(client_args) as client:
حوالو مينيجر خودڪار طور تي API سرور ڏانهن لاگ ان ڪال نه ڪندو، پر اهو هڪ لاگ آئوٽ ڪال ڪندو جڏهن ان کان ٻاهر نڪرندو. جيڪڏهن ڪجهه سببن لاءِ لاگ آئوٽ گهربل نه آهي API ڪالن سان ڪم ڪرڻ کان پوءِ، توهان کي ضرورت آهي ڪم ڪرڻ شروع ڪرڻ کان سواءِ ڪنٽينيڪٽ مئنيجر:
client = APIClient(clieng_args)
ڪنيڪشن چيڪ ڪندي
چيڪ ڪرڻ جو آسان طريقو اهو آهي ته ڇا ڪنيڪشن مخصوص پيٽرولن سان ملندو آهي طريقو استعمال ڪندي چيڪ_فنگر پرنٽ. جيڪڏهن سرور API سرٽيفڪيٽ جي فنگر پرنٽ لاءِ sha1 hash sum جي تصديق ناڪام ٿئي ٿي (طريقو واپس آيو ڪوڙي)، پوء اهو عام طور تي ڪنيڪشن جي مسئلن جي سبب آهي ۽ اسان پروگرام جي عمل کي روڪي سگهون ٿا (يا صارف کي ڪنيڪشن ڊيٽا کي درست ڪرڻ جو موقعو ڏيو):
if client.check_fingerprint() is False:
print("Could not get the server's fingerprint - Check connectivity with the server.")
exit(1)
مهرباني ڪري نوٽ ڪريو ته مستقبل ۾ ڪلاس API ڪلائنٽ هر API ڪال چيڪ ڪندو (طريقو api_call и api_query، اسان انهن بابت ٿورو اڳتي ڳالهائينداسين) sha1 فنگر پرنٽ سرٽيفڪيٽ API سرور تي. پر جيڪڏهن، API سرور سرٽيفڪيٽ جي sha1 فنگر پرنٽ جي جانچ ڪندي، هڪ غلطي معلوم ٿئي ٿي (سرٽيفڪيٽ نامعلوم آهي يا تبديل ڪيو ويو آهي)، طريقو چيڪ_فنگر پرنٽ خودڪار طريقي سان مقامي مشين تي ان بابت معلومات شامل ڪرڻ/تبديل ڪرڻ جو موقعو فراهم ڪندو. هي چيڪ مڪمل طور تي غير فعال ٿي سگهي ٿو (پر اهو صرف ان صورت ۾ سفارش ڪري سگهجي ٿو جڏهن اسڪرپٽس API سرور تي هلن ٿيون، جڏهن 127.0.0.1 سان ڳنڍي رهيا آهن)، APIClientArgs دليل استعمال ڪندي - unsafe_auto_accept (APIClientArgs جي باري ۾ وڌيڪ ڏسو اڳ ۾ "ڪنيڪشن جي وضاحت ڪرڻ" ۾).
У API ڪلائنٽ API سرور ۾ لاگ ان ٿيڻ لاءِ 3 طريقا آھن، ۽ انھن مان ھر ھڪ معنيٰ سمجھي ٿو عيد(session-id)، جيڪو خود بخود استعمال ڪيو ويندو آهي هر ايندڙ API ڪال ۾ هيڊر ۾ (هن پيراميٽر جي هيڊر ۾ نالو آهي X-chkp-sid)، تنهنڪري هن پيٽرولر کي وڌيڪ عمل ڪرڻ جي ڪا ضرورت ناهي.
لاگ ان جو طريقو
لاگ ان ۽ پاسورڊ استعمال ڪندي اختيار (مثال طور، صارف جو نالو منتظم ۽ پاسورڊ 1q2w3e پوزيشني دليلن طور منظور ڪيو ويو آهي):
login = client.login('admin', '1q2w3e')
اضافي اختياري پيرا ميٽر لاگ ان طريقي ۾ پڻ موجود آهن؛ هتي انهن جا نالا ۽ ڊفالٽ قدر آهن:
آپشن استعمال ڪندي api key (مديري ورزن R80.40/Management API v1.6 کان شروع ٿيندڙ سپورٽ، "3TsbPJ8ZKjaJGvFyoFqHFA==" هي آهي API ڪيئي قدر استعمال ڪندڙن مان هڪ لاءِ مئنيجمينٽ سرور تي API ڪيئي اختيار ڪرڻ واري طريقي سان):
مون کي فوري طور تي هڪ رزرويشن ڪرڻ ڏيو ته هي طريقو صرف انهن ڪالن لاءِ لاڳو آهي جن جي اوٽ پٽ ۾ آفسٽ شامل آهي. اهڙو اندازو تڏهن ٿئي ٿو جڏهن ان ۾ معلومات جي وڏي مقدار هجي يا هجي. مثال طور، هي مئنيجمينٽ سرور تي سڀني ٺاهيل ميزبان شين جي فهرست لاءِ درخواست ٿي سگهي ٿي. اهڙين درخواستن لاءِ، API ڊيفالٽ طور 50 شين جي لسٽ ڏئي ٿو (توهان جواب ۾ حد وڌائي 500 شيون ڪري سگهو ٿا). ۽ معلومات کي ڪيترائي ڀيرا نه ڇڪڻ لاء، API جي درخواست ۾ آفسيٽ پيٽرولر کي تبديل ڪندي، اتي هڪ api_query طريقو آهي جيڪو خودڪار طريقي سان ڪم ڪري ٿو. ڪالن جا مثال جتي ھن طريقي جي ضرورت آھي: شو-سيشن، شو-ميزبان، شو-نيٽ ورڪ، شو-وائلڊ ڪارڊ، شو-گروپ، شو-پتا-رينجز، شو-سادو-گيٽ ويز، ڏيکاريو-سادو-ڪلسٽر، شو-پهچ-رول، ڏيکاريو-قابل اعتماد-ڪلائنٽ، ڏيکاريو پيڪيجز. حقيقت ۾، اسان انهن API ڪالن جي نالي ۾ جمع لفظ ڏسون ٿا، تنهن ڪري اهي ڪالز آسان ٿي ويندا api_query
ان کان پوءِ توھان استعمال ڪري سگھوٿا ڪلاس جا متغير ۽ طريقا API جواب(ٻنهي جي حوالي سان مئنيجر جي اندر ۽ ٻاهر). ڪلاس ۾ API جواب 4 طريقا ۽ 5 متغير اڳ ۾ بيان ڪيا ويا آھن؛ اسان وڌيڪ تفصيل سان سڀ کان وڌيڪ اھم تي رھنداسين.
واپسي صحيح آهي جيڪڏهن 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.
set_success_status
انهي حالت ۾، اهو ضروري ٿي سگهي ٿو ته ڪاميابي جي حيثيت جي قيمت کي تبديل ڪرڻ لاء. ٽيڪنيڪل طور تي، توهان اتي ڪجھ به رکي سگهو ٿا، جيتوڻيڪ هڪ باقاعده تار. پر هڪ حقيقي مثال هن پيٽرول کي ري سيٽ ڪيو ويندو غلط سان ڪجهه حالتن جي تحت. هيٺ ڏنل، مثال تي ڌيان ڏيو جڏهن انتظامي سرور تي ڪم هلندڙ آهن، پر اسين هن درخواست کي ناڪام سمجهنداسين (اسان ڪاميابي جي متغير کي سيٽ ڪنداسين. ڪوڙي, ان حقيقت جي باوجود ته 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
جواب ()
جوابي طريقو توهان کي ڊڪشنري کي جوابي ڪوڊ (status_code) ۽ جوابي جسم (body) سان ڏسڻ جي اجازت ڏئي ٿو.
اها معلومات صرف تڏهن موجود آهي جڏهن 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 آهي، ميزبان قسم جي شين جي طور تي، ۽ ٻين سڀني IP پتي کي ايڊريس جي حد جي قسم جي شين جي طور تي لکو. انهي صورت ۾، سب نيٽ ايڊريس ۽ براڊ ڪاسٽ ايڊريس کي خارج ڪريو.
تنهن ڪري، هيٺ ڏنل هڪ اسڪرپٽ آهي جيڪو هن مسئلي کي حل ڪري ٿو ۽ ميزبان جي قسم جي 50 شيون ۽ ايڊريس جي حد جي قسم جي 51 شيون ٺاهي ٿو. مسئلو حل ڪرڻ لاءِ، 101 API ڪالون گھربل آھن (فائنل پبلش ڪال جي ڳڻپ نه ڪندي). انهي سان گڏ، ٽائمٽ ماڊل استعمال ڪندي، اسان ان وقت جو اندازو لڳايو آهي جيڪو اسڪرپٽ تي عمل ڪرڻ ۾ وٺندو آهي جيستائين تبديليون شايع نه ٿينديون آهن.
اسڪرپٽ استعمال ڪندي 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 ڪال استعمال ڪندي ساڳيو مسئلو ڪيئن حل ڪجي شامل ڪرڻ واريون شيون، سپورٽ جنهن لاءِ API ورزن 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 ڪال ۾ گھڻن شيون ختم ڪري سگھو ٿا حذف-شيون-بيچ. ھاڻي اچو ته ھڪڙو ڪوڊ مثال ڏسو جيڪو سڀني ھوسٽن کي ختم ڪري ٿو جيڪو اڳ ۾ ٺاھيو ويو آھي شامل ڪرڻ واريون شيون.
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 ۾ اهڙيون ”فيچرز“ جيئن Revert to revision ۽ Smart Task ظاهر ٿيا، ۽ لاڳاپيل API ڪالون انهن لاءِ فوري طور تي تيار ڪيون ويون. ان کان علاوه، سڀ ڪارڪردگي جڏهن Legacy ڪنسولز کان متحد پاليسي موڊ ڏانهن منتقل ٿئي ٿي API جي مدد پڻ حاصل ڪري ٿي. مثال طور، سافٽ ويئر ورزن R80.40 ۾ ڊگھي انتظار جي تازه ڪاري هئي HTTPS انسپيڪشن پاليسي کي Legacy mode کان Unified Policy mode ڏانهن منتقل ڪيو ويو، ۽ هن ڪارڪردگي کي فوري طور تي API ڪالون مليون. هتي ڪوڊ جو هڪ مثال آهي جيڪو HTTPS انسپيڪشن پاليسي جي مٿين پوزيشن ۾ هڪ ضابطو شامل ڪري ٿو جيڪو 3 قسمن جي چڪاس کان خارج ڪري ٿو (صحت، ماليات، سرڪاري خدمتون)، جيڪي ڪيترن ئي ملڪن ۾ قانون جي مطابق چڪاس کان منع ٿيل آهن.
سڀ ڪجهه ساڳيو آهي README.md پٿون اسڪرپٽ کي سڌو سنئون ڪنٽرول سرور مان ڪيئن هلائڻ جي معلومات تي مشتمل آهي. اهو آسان ٿي سگهي ٿو جڏهن توهان ٻئي مشين کان API سرور سان ڳنڍڻ ۾ ناڪام آهيو. مون هڪ ڇهن منٽن جي وڊيو رڪارڊ ڪئي جنهن ۾ مان ماڊل کي انسٽال ڪندي ڏسان ٿو cpapi ۽ ڪنٽرول سرور تي پٿون اسڪرپٽ هلائڻ جون خاصيتون. مثال طور، ھڪ اسڪرپٽ ھلايو ويندو آھي جيڪو ھڪڙي ڪم لاءِ نئين گيٽ وي جي ٺاھ جوڙ کي خودڪار ڪري ٿو جيئن نيٽ ورڪ آڊيٽنگ سيڪيورٽي چيڪ اپ. انهن خاصيتن مان جن سان مون کي معاملو ڪرڻو هو: فنڪشن اڃا تائين پٿون 2.7 ۾ ظاهر نه ٿيو آهي ان پٽ، تنهنڪري معلومات کي پروسيس ڪرڻ لاءِ جيڪو صارف داخل ڪري ٿو، هڪ فنڪشن استعمال ڪيو ويندو آهي raw_input. ٻي صورت ۾، ڪوڊ ساڳيو آهي جيئن ٻين مشينن مان لانچ ڪرڻ لاء، صرف ان کي استعمال ڪرڻ وڌيڪ آسان آهي فنڪشنل لاگ ان_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","пароль","Пароль","Ключ","ключ","шифр","Шифр"]
}
ٿڪل
هي مضمون صرف ڪم جي بنيادي امڪانن جي جانچ ڪري ٿو پٿن ايس ڊي آر ۽ ماڊل cpapi(جيئن توهان اندازو لڳايو هوندو، اهي اصل ۾ مترادف آهن) ۽ هن ماڊل ۾ ڪوڊ پڙهڻ سان توهان ان سان ڪم ڪرڻ ۾ اڃا به وڌيڪ امڪان ڳوليندا. اهو ممڪن آهي ته توهان ان کي پنهنجي طبقن، افعال، طريقن ۽ متغيرن سان پورو ڪرڻ چاهيندا. توھان ھميشہ پنھنجو ڪم شيئر ڪري سگھو ٿا ۽ سيڪشن ۾ چيڪ پوائنٽ لاءِ ٻيون لکتون ڏسي سگھو ٿا ڪوڊ هب ڪميونٽي ۾ چيڪ ميٽس، جيڪو ٻنهي پراڊڪٽ ڊولپرز ۽ صارفين کي گڏ ڪري ٿو.