Wednesday, November 5, 2008

Tools of the Trade (Programming Languages)


မၾကာမၾကာလုပ္ရတဲ့အလုပ္ေတြကုိ Program တစ္ခုေရးထားျပီးျပန္သံုးရင္ အခ်ိန္ကုန္ လူသက္သာတယ္ဆုိတာ ကြန္ပ်ဴတာနဲ႔ အလုပ္လုပ္ေနတဲ့သူတုိင္းသိၾကမွာပါ။ Networking နဲ႔အသက္ေမြးေနတဲ့သူေတြအတြက္ အလုိေလ်ာက္အလုပ္လုပ္ဖုိ႔ ပရုိဂရမ္ေသးေသး ေလးေတြေရးဖုိ႔မၾကာခဏၾကဳံရပါတယ္။ အသုံးမ်ားၾကတဲ့ Programming Language ေတြကေတာ့ Perl, Expect, TCL (တစ္ကယ္လ္ လုိ႔အသံထြက္ပါ) နဲ႔ Python တုိ႔ျဖစ္ပါတယ္။

Cisco ရဲ့ EEM (Embedded Event Manager) မွာ TCL ကုိသုံးပါတယ္။ Cisco က EEM ကုိအသံုးျပဳဖုိ႔ အရမ္းေၾကာ္ျငာ ႏွုိးေဆာ္ေပမယ့္ အသုံးမ်ားတာ သိပ္မေတြ႔ရေသးပါဘူး။ EEM အေၾကာင္းကုိ ဒီမွာ ဖတ္ၾကည့္ႏုိင္ျပီး၊ လူေတြ၀ုိင္းေရးထားၾကတဲ့ ဥပမာေတြကုိေတာ့ ဒီမွာ ေလ့လာႏုိင္ပါတယ္။

အထက္ကေဖၚျပခဲ့တဲကြန္ပ်ဴတာ ဘာသာစကားေတြထဲမွာ Network Engineer ေတြအသုံးအမ်ားဆံုးကေတာ့ Perl ျဖစ္ပါတယ္။ Perl မွာ အဆင္သင့္သုံးဖုိ႔ Library ေတြေထာင္နဲ႔ခ်ီရွိပါတယ္။ အင္တာနက္ေပၚမွာလည္း အသင့္ေရးျပီးသားပရုိရဂရမ္ေတြ(ဥပမာ)၊ ေလ့လာစရာေနရာေတြ (ဥပမာ)အမ်ားၾကီးရွိပါတယ္။

Expect ကုိေတာ့ ကၽြန္ေတာ္ ေသေသခ်ာခ်ာမသံုးဖူးေပမယ့္ Networking ေလာကမွာ အသံုးမ်ားပါတယ္။ အထူးသျဖင့္ Network Management နဲ႔ Router ေတြ၊ Switch ေတြရဲ့ အျမင့္ဆုံး ၀န္ေဆာင္ႏုိင္မွု (load testing) ကုိ စမ္းသပ္တဲ့ေနရာမွာ အသုံးမ်ားတယ္လုိ သိရပါတယ္။

Python ကေတာ့ အခုေနာက္ပုိင္းမွာ Google က ေနရာတုိင္းလုိလုိမွာ အၾကီးအက်ယ္အသံုးျပဳလုိ႔ ပုိလူသံုးမ်ားလာပါတယ္။ Network Programming မွာလည္း လြယ္လြယ္ကူကူ စမ္းသပ္လုိ႔ရပါတယ္။ ဟုိအရင္ေခါတ္က Basic လုိ တစ္ခုခုိင္းရင္ ခ်က္ခ်င္းအေျဖရတာေၾကာင့္ ျမန္ျမန္နဲ႔ လြယ္လြယ္စမ္းခ်င္တဲ့ေနရာေတြမွာ အသံုးတဲ့ပါတယ္။

TCP socket တစ္ခုက ဖြင့္တဲ့ ဥပမာကုိ နည္းနည္းေရးသြားပါမယ္။ ေနာင္ပုိင္းထြက္တဲ့ Linux distribution တုိင္းလုိလုိမွာ Python ပါျပီးသား ျဖစ္ပါတယ္။
ဒီဥပမာက Linux shell ကေန PIX Firewall (192.168.1.1) ကုိ Telnet သုံး Login လုပ္ျပီးတဲ့အခါမွာ "show ver" ဆုိတဲ့ command တစ္ခုကုိ run မွာ ျဖစ္ပါတယ္။ ပရုိဂရမ္မွာ တစ္လုိင္းရုိက္တုိင္း Firewall ဆီက တစ္ခုျပန္လာတာကုိ ေတြ႔ရပါလိမ့္မယ္။

္from socket import * - socket နဲ႔ ဆုိင္တဲ့ Library ေတြကုိ import လုပ္တာျဖစ္ပါတယ္။
s = socket(AF_INET, SOCK_STREAM) - TCP socket တစ္ခုကုိ memory မွာ တည္ေဆာက္ပါမယ္။
s.connect(("192.168.1.1", 23)) - TCP Socket က Firewall ရဲ့ port 23 (telnet) ကုိလွမ္းဆက္သြယ္ပါတယ္။
print s.recv(1024) - Firewall ကျပန္လာတဲ့ Login Prompt ကုိ ျမင္ေအာင္ျပေပးတာျဖစ္ပါတယ္။
s.send("password\n") - Firewall ကုိ Password ပုိ႔ေပးျပီး Login လုပ္တာျဖစ္ပါတယ္။
print s.recv(1024) - Login လုပ္တာေအာင္ျမင္သြားလုိ႔ Firewall ရဲ့ user prompt ကုိ ေရာက္သြားတာကုိ ျမင္ေအာင္ျပေပးပါတယ္။
s.send("show ver\n") - Firewall မွာ "show ver" ဆုိတဲ့ commad ကုိ Run ပါတယ္။
print s.recv(1024) - "show ver" ရဲ့ အေျဖကုိ ျမင္ေအာင္ျပေပးတာျဖစ္ပါတယ္။

အထက္က Program ကုိ တလုိင္းျခင္းရုိက္လုိက္ရင္ ဒီလုိေတြ႔ရပါလိမ့္မယ္။


[root@bart ~]# python
Python 2.5.1 (r251:54863, Jun 15 2008, 23:59:20)
[GCC 4.1.2 20070925 (Red Hat 4.1.2-33)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from socket import *
>>> s = socket(AF_INET, SOCK_STREAM)
>>> s.connect(("192.168.1.1", 23))
>>> print s.recv(1024)
User Access Verification

Password:
>>> s.send("password\n")
>>> print s.recv(1024)

Type help or '?' for a list of available commands.
COMM-FW>
>>> s.send("show ver\n")
>>> print s.recv(1024)
show ver

Cisco PIX Firewall Version 6.3(4)
Cisco PIX Device Manager Version 3.0(4)

Compiled on Fri 02-Jul-04 00:07 by morlee

COMM-FW up 11 days 7 hours

Hardware: PIX-501, 16 MB RAM, CPU Am5x86 133 MHz
Flash E28F640J3 @ 0x3000000, 8MB
BIOS Flash E28F640J3 @ 0xfffd8000, 128KB

0: ethernet0: address is 0015.2b2d.e2ed, irq 9
1: ethernet1: address is 0015.2b2d.e2ee, irq 10
Licensed Features:
Failover: Disabled
VPN-DES: Enabled
VPN-3DES-AES: Enabled
Maximum Physical Interfaces: 2
Maximum Interfaces: 2
Cut-through Proxy: Enabled
Guards: Enabled
URL-filtering: Enabled
Inside Hosts: 10
<--- More --->
>>>

Post a Comment