در حال بارگزاری...

آموزش اسکریپت نویسی (TCL) سیسکو - اول

در این زنجیره مطالب قصد داریم یک زبان اسکریپت نویسی که در دستگاه های سیسکو مورد استفاده قرار می گیرد را معرفی و آموزش دهیم. اما دقت داشته باشید که این به معنی برنامه نویسی برای تغییر خود IOS نیست چرا که اصولا یک محصول OpenSource نیست که بتوانیم در آن تغییراتی را ایجاد کنیم. در ادامه با ما همراه باشید.

زبان TCL که گاهی به صورت تیکل هم تلفظ می شود بستری است که توسط IOS برای ما فراهم شده تا بتوانیم بوسیله آن رو پلتفرم IOS و  IOS-XR برنامه هایی بنویسیم که اعمال مورد نظر ما را انجام دهند. که این امر بدون وجود این زبان اسکریپت نویسی بسیار پیچیده و حتی غیر ممکن بود. یک مثال خیلی ساده می تواند به این شکل مطرح شود که چگونه می توان یک SNMP OID را نظارت کرد تا در زمان وقوع شرایط مد نظر ما اتفاقی بیفتد و کاری را انجام دهد. البته یک راه حل بسیار جامع تر برای این مثال EEM است که در آینده در مطلبی جدا به آن خواهیم پرداخت اما راه حل سریع و مطمئن استفاده از TCL است.

برای بیشتر آشنا شدن با کاربرد و مواردی که نیاز داریم به یک زبان اسکریپت نویسی بر روی پلتفرم IOS می خواهیم در ادامه چند مثال کوتاه بزنیم.

مثال ۱) زمانی که اندازه cpu مورد استفاده به 30% رسید یک ایمیل برای من ارسال کن و پنج پروسه ایی که بیشترین استفاده را از cpu دارند را بفرست. (sh process cpu sorted)

مثال ۲)‌ این مثال برای زمانی است که ARP flooding/looping رخ داده که می توانند باعث کرش کردن روتر شود. اگر استفاده روتر از cpu به 80% رسید. از میان پروسه های در حال اجرا ۲ مورد بالایی که بیشترین منابع را در اختیار دارند را بررسی کرده و ببین که شامل ARP-Input می شوند یا خیر. اگر نتیجه صحیح بود با دستور show int <interface-name> آن دست روتر که بیشترین broadcast را  دریافت می کند پیدا کرده و آنرا خاموش کن. پس از ۳ دقیقه مجددا پروسه های در حال اجرا را بررسی کرده و از پایین بودن مقدار استفاده از cpu که اطمینان حاصل شد با بررسی دسترسی به میل سرور یک ایمیل به مدیر شبکه ارسال کرده و رویداد رخ داده را اطلاع دهد.

مثال ۳) شما در بخش خود مسئول بیش از ۲۰۰ روتر هستید. فرض کنید می خواهید اطمینان حاصل کنید که تمام اینترفیس های WAN با IPSec VPN کانفیگ شده اند. در هر روتر دو لینک WAN وجود دارد که حدودا ۴۰۰ اینترفیس می شود. شما می توانید اینکار را از سه روش زیر انجام دهید:

 ۱- وصل شدن به هر روتر، مشاهده کردن  running-config و بررسی آن به صورت دستی
 ۲- به صورت دستی فایل های پشتیبان کانفیگ ها را باز کرده و بررسی کنید.
 ۳- یا به سادگی روتر را باز کنید اسکریپت tcl خود را روی آن paste کنید و آن همه بررسی ها را انجام داده و در انتها به شما بگوید کدام یک از اینترفیس ها کانفیگ نشده و حتی آن ها را نیز کانفیگ کند!

بسته به دیدگاه و تجربه شما در زمینه شبکه ممکن است این مثال ها را در کار خود دیده باشید یا اصلا برایتان واضح نباشد. اما اگر به عنوان یک مدیر شبکه که حداقل مسئول ۱۰۰ روتر و بیشتر هستید حتما و بسیار ضروری است که اسکریپت نویسی با tcl و EEM را حتما در برنامه یادگیری خود قرار دهید.

کتابی که برای یادگیری این زبان از پایه پیشنهاد می شود:
Tcl and Tk Programming for the Absolute Beginner

51xC4 U97AL. SX402 BO1204203200

اما به یاد داشته باشید که برنامه نویسی امری است که نیازمند تجربه و تمرین مکرر است. و مشخصا هیچ کتابی وجود ندارد که به شما‌ آموزش دهد که چگونه مشکلات خود را با برنامه نویسی حل کنید. در بهترین حالت آن ها به شما سینتکس و مفاهیم مختص آن زبان را یاد می دهند. پس حتما نیازمند تمرین و یادگیری پیوسته هستید. همچنین به یاد داشته باشید برنامه نویسی بر روی پلتفرم IOS نیازمند فرآیندهای پیچیده و تخصصی برنامه نویسی نیست و صرفا قرار است مشکل ما را بر طرف کند نه مشکل جدیدی ایجاد کند!

کارهایی که با زبان tcl انجام می دهیم در اکثر اوقات شامل پردازش بر روی رشته ها و بدست آوردن مقدار مورد نظر و سپس مقایسه آن با مقادیری از پیش تعریف شده است که در نهایت منجر به  عملی می شود که باید انجام شود.

یک مورد که باید قبل از ادامه به آن اشاره کرد این است که برنامه نویسی و اسکریپت نویسی مشابه هستند و ممکن است این کلمات در این مقاله به جای یکدیگر مورد استفاده قرار گیرند. پس دچار سر در گمی نشوید.

متغییرها:

متغییرها یکی از مفاهیم بنیادین در هر زبان برنامه نویسی هستند. شما هیچ گاه نمی توانید یک برنامه را ببینید که از متغییرها استفاده نکرده باشند. متغییرها مکانی برای نگه داری مقادیر هستند. به همین خاطر به آن ها متغییر می گویند مانند ظرفی که یک بار در آن چیزی ریخته می شود و بار دیگر چیز دیگری قرار می گیرد. اما ظرف همچنان ظرف است.
در اینجا یک متغییر تعریف شده و مقدار آن برابر با ۴ در نظر گرفته شده است.

firtvar = 4

مواردی که ممکن است ما از متغییر ها استفاده کنیم شامل دو مورد کلی می شود:

 ۱- زمانی که ورودی از کاربر میگیریم.
 ۲- زمانی که نیاز دارید از یک مقدار بیش از یک بار در برنامه خود استفاده کنید.

ورودی کاربر باید در جایی نگه داری شود به همین علت باید از متغییر ها استفاده شود. اکنون قبل از وارد شدن به جزئیات بیشتر بیاید بر روی روتر خود tcl را امتحان کنیم. با وارد کردن دستور tclsh در مد exec وارد محیط اسکریپت نویسی tcl شوید.

R1#tclsh
#R1(tcl)
"R1(tcl)#puts "hi, i am in tcl
hi, i am in tcl
#R1(tcl)

کلمه puts یک keyword است و هر چیزی که به آن داده شود را بر روی صفحه نمایش می دهد. مقدار دهی متغییر با استفاده از دستور set سپس نام متغییر و مقدار در ادامه انجام می شود.

R1(tcl)#set firstvar 10
10

اکنون متغییر firstvar مقدار ۱۰ را در خود دارد و برای مشاهده مقدار آن از دستور puts استفاده می کنیم.

R1(tcl)#puts $firstvar
10

نکته مهم در اینجا این بود که هنگام استفاده از مقادیر متغییر ها باید قبل از نام آن از علامت $ استفاده کنید. به نظر شما در صورت عدم استفاده از این علامت چه اتفاقی میافتد؟ امتحان کنید.

اکنون بیاید دو متغییر تعریف کنیم و مقادیری را به آن ها نسبت دهیم تا محاسبات ریاضی بر روی آن ها انجام دهیم. در زبان tcl برای انجام محاسبات ریاضی از کلمه expr استفاده می کند.

R1(tcl)#set var1 100
100
R1(tcl)#set var2 200
200
R1(tcl)#set var3 [expr $var1 + $var2]
300
R1(tcl)#puts $var3
300
#R1(tcl)

در محیط tcl می توان دستورات IOS با استفاده از دو کلمه exec و ios_config در دو مد privilege و config اجرا کرد.

exec -> to run privilege mode commands

ios_config -> to run all config mode commands.

به عنوان مثال:

R1(tcl)#exec sh ip int brief
"R1(tcl)#ios_config "int fa0/0" "ip add 1.1.1.1 255.255.255.0" "no sh

در بخش بعدی این آموزش اولین برنامه واقعی خود را می نویسیم.