مقدمه
در بخش پیشین بدون طول و تفصیل و بدون دانش برنامه نویسی، به چگونگی اجرای برخی دستورات بر روی تجهیزات سیسکو به کمک نرم افزار Postman پرداختیم. مرجع چنین دستوراتی (API Reference) به ازای تمامی تجهیزات و نرم افزارهای سیسکو (روترهای سری 4000، روتر CSR، تجهیزات سری 9000، سوییچ های نکسوس) با یک جستجوی ساده قابل دستیابی اند و توابع این مستندات از طریق همان نرم افزار Postman قابل تست و اجرا هستند.
اما در محیط واقعی نرم افزار Postman یا نرم افزارهای مشابه کمکی به خودکار سازی فرآیندهای شبکه نخواهند کرد و ما ناگزیر از بکارگیری یک زبان برنامه نویسی خواهیم بود. واضح است که یادگیری یک زبان برنامه نویسی به خصوص در فیلد شبکه که پیش از این سر و کار چندانی با برنامه نویسی نداشته ایم فرآیندی جدی و نیازمند پیگیری مستمر است و طبیعتا در ابتدا و پیش از روشن شدن امتیازات چنین دانشی احتمالا همهی افراد انگیزه ی کافی برای چنین تمرکزی نداشته باشند.
پیشنهاد من در چنین موقعیتهایی ورود بی مقدمه در یک پروژهی عملی و بعد حل کردن مرحله به مرحله ابهامات موضوع است. با این کار زمان بسیار کمتری صرف این خواهد شد که متوجه شویم آیا ممکن است به یک موضوع خاص علاقه ای داشته باشیم یا نه، هر چند انرژی چندبرابر نیاز خواهد داشت. پس از این مرحله زمان مناسبی برای شروع کامل یک دورهی آموزشی است.
از این جهت در این مطلب ابتدا به اجرای دستورات مرحلهی قبل به کمک زبان پایتون میپردازیم و سپس بهترین منابع موجود جهت یادگیری پایتون را معرفی میکنیم.
اولین ارتباط با روتر به کمک پایتون
در بخش اول این پست از طریق نرم افزار POSTMAN به یک روتر CSR متصل شدیم و لیست اینترفیسهای آن را خروجی گرفتیم. در ادامه همین کار را از طریق پایتون و libraryهای مرتبط با این موضوع پیش میبریم.
در ارتباط از طریق POSTMAN در پست قبل، ابتدا با تابع token-services، از روتر یک توکن دریافت کردیم تا در ارتباطهای بعدی نیاز به احراز هویت نداشته باشیم، همین کار را از طریق پایتون به صورت زیر انجام میدهیم:
import requests
url = 'https://192.168.200.30:55443/api/v1/auth/token-services'
auth = ('admin','ipcafe')
headers = {'Content-Type':'application/json'}
resp = requests.post(url, auth=auth, headers=headers, verify=False)
json_data = json.loads(resp.text)
token = json_data['token-id']
print(token)
خروجی کد بالا بصورت زیر خواهد بود:
BQe6QNYDBYu6VK+vCb7NoKSPKpFXouAXCtlMB6U2CGE=
کتابخانهی Requests به ما کمک میکند تا یک درخواست POST,GET و … را به یک تجهیز ارسال کنیم. همانند آنچه در پست قبل گفته شد، تابع Token-services نیاز به نام کاربری و رمز عبور روتر جهت اخذ توکن دارد و پس از اجرای آن، با استفاده از کتابخانهی JSON، مقدار برگشتی را Parse کرده و Value متناظر با پارامتر token-id را استخراج میکنیم. پیش از استفاده از تابع JSON مقدار برگشت داده شده به صورت زیر است:
{"kind": "object#auth-token", "expiry-time": "Mon Nov 2 16:13:41 2020", "token-id": "BQe6QNYDBYu6VK+vCb7NoKSPKpFXouAXCtlMB6U2CGE=", "link": "https://192.168.200.30:55443/api/v1/auth/token-services/1358283617"}
پس از اخذ این توکن، طبق دستورالعمل مستند API Reference روتر CSR، نیاز داریم تا توکن گرفته شده را در Header درخواستهای بعدی قرار دهیم، این کار را به صورت زیر انجام میدهیم.
headers={ 'Content-Type': 'application/json','X-auth-token': token}
اکنون همان تابع پست قبل را به کمک پایتون فراخوانی میکنیم:
url = 'https://192.168.200.30:55443/api/v1/interfaces'
headers={ 'Content-Type': 'application/json','X-auth-token': token}
resp = requests.get(url, headers=headers, verify=False)
json_data = json.loads(resp.text)
print(json.dumps(json_data, sort_keys=True, indent=4, separators=(',', ': ')))
با استفاده از پرینت موجود در خط آخر، خروجی را مرتب کرده و به نمایش زیر میرسیم که لیستی از پارامترهای مختلف اینترفیسهای روتر را نمایش میدهد:
{
"items": [ {
"description": "",
"icmp-redirects": true,
"icmp-unreachable": true,
"if-name": "GigabitEthernet1",
"ip-address": "192.168.200.30",
"ipv6-enable": false,
"kind": "object#interface",
"mac-address": "0050.56b6.a727",
"nat-direction": "",
"proxy-arp": true,
"subnet-mask": "255.255.255.0",
"type": "ethernet",
"verify-unicast-source": false
},
.
.
],
"kind": "collections#interface"
}
از کجا شروع کنیم؟
باوجود تمام راههای میانبر و “یادگیری در ده روز” و یک هفته، همچنان اصولی ترین روش یادگیری زبان پایتون یا هر زبان دیگری مراجعه به یکی از دورههای ویدئویی کامل است و با این توصیه، مشخصا یک پست وبلاگی نمیتواند کمکی به آموزش مقدماتی یا پیشرفتهی یک زبان بکند. اما در شروع هر کاری در صورت فراهم بودن ابزار کار با آن، احتمال ایجاد انگیزه و تسریع در انجام آن بیشتر خواهد بود. بر این اساس در این بخش به معرفی ابزار ابتدایی کار با پایتون و همچنین آموزشهای مفید موجود در اینترنت میپردازم.
قدم اول در راه اندازی پایتون بر روی یک سیستم، دانلود نسخهی مورد نیاز از سایت پایتون و کار در محیط کامندلاین است. اما ضعف اصلی محیط کامندلاین برای شخصی که در ابتدای کار با یک زبان برنامه نویسی است، عدم وجود امکاناتی مانند Auto Complete دستورات و یا نمایش متغیرهای مورد استفاده در کد هنگام فراخوانی یک متغیر است. علاوه بر این، هنگام کار با یک Library جدید، محیطی که بتواند تمام Functionهای قابل استفاده در آن و پارامترهای هر تابع را نشان دهد بسیار کمک کننده خواهد بود.
بنابراین پیشنهاد ما استفاده از یکی از پلتفرمهای آمادهی کار با پایتون است. Anaconda یکی از این ابزارهاست که برای شروع میتوانید مستقیما آن را از سایت این محصول دانلود کنید. پس از نصب این محصول، محیط کدزنی آن به نام Spyder را باز کنید. مثالی از کاربردی که در بالا گفته شد را میتوانید در عکس زیر ببینید:


اما به عنوان منبع آموزشی، بین تمام آموزشهای موجود دورهی ویدئویی The Complete Python Programming Course for Beginners با تدریس Mosh Hamedani، یکی از بهترین و کاربردی ترین دورهها برای شروع کار با این زبان است، این دوره از این لینک قابل دانلود است.
از بین دورههای به زبان فارسی نیز، دورهی ” آموزش مسئلهمحور مبانی برنامه نویسی و تفکر الگوریتمی” در سایت quera.ir دورهی بسیار کاربردی و مفیدیست که البته نقطه ضعف آن رایگان نبودنش است!
همچنین در صورتیکه به دنبال دورههای پیشرفته باشید، تمرین های پایتون سایت hackkerrank.com مفید خواهد بود.
اما در صورتیکه همچنان انگیزهی کافی برای شروع کامل یک دوره را ندارید و نیاز به یک Overview کلی دارید، پیشنهاد میشود پست وبلاگ شرکت افق دادهها در مورد زبان پایتون را مطالعه کنید:
http://www.ofoghdadeha.com/blog/cisco-devnet-part-2-programming-age
کتابخانههای پراستفادهی پایتون برای مدیران شبکه
از جمله تواناییهای مهم زبان پایتون، وجود کتابخانههای آمادهی متعدد در موضوعات مختلف است. در فیلد شبکه نیز وجود این کتابخانهها ضمن صرفه جویی در زمان، قدرت فوق العادهای را به برنامه نویس میدهد. در ادامه به معرفی برخی از این کتابخانهها میپردازم.
مشاهده و تغییر Data Formatهای مختلف را از طریق کتابخانههای زیر میتوانید انجام دهید:
- XML
- Import xmltodict
- JSON
- Import json
- YAML
- Import PyYAML
- CSV
- Import csv
- YANG
- Import pyang
ارتباط و ایجاد تغییرات از طریق Rest API را با کتابخانهی زیر انجام دهید:
- import Requests
برای ارتباط با تجهیزاتی که API ساپورت نمیکنند (مانند روترهای ISR G2 یا انواع سوییچ ها)، لازم است از کتابخانه هایی استفاده کنیم که از طریق SSH و Telnet با روتر ارتباط میگیرند، کتابخانهی Netmiko را به این صورت نصب و فراخوانی کنید.
- pip install genie
import genie
طبیعتا هنگامی که با Telnet با یک روتر ارتباط میگیریم، فرمت دادهی خروجی شبیه همان چیزی ست که هنگام ارتباط مستقیم با روتر میبینیم و پارس کردن و جابجا شدن بین خطوط آن مشکل خواهد بود. کتابخانهی زیر این محدودیت را برطرف میکند؛ به این صورت که از طریق همان Telnet یا SSH با دستگاه ارتباط میگیرد، اما خروجی را در قالب Json برمیگرداند که به سادگی قابل پارس کردن خواهد بود:
- pip install genie
-
-
- import genie
-
-