วันเสาร์ที่ 29 กรกฎาคม พ.ศ. 2560

Python for Network Engineer : Telnet and Configure Cisco Devices


พอดีได้ลองทำ เลยมาเขียนแปะไว้ เผื่อท่านใดอยากลองเล่น

ผมลองเขียน Python โดยให้ตัวโปรแกรมสามารถ Telnet เข้าไปที่ Router และสั่งตั้งค่าตาม Code ที่เราเขียนไว้เป็นแบบอย่างง่ายๆ เบสิคๆ เลยครับ เพื่อให้ได้เห็นภาพแบบง่ายๆ และได้ไอเดียไปต่อยอดได้

ผมสร้าง Lab บน EVE-NG ขึ้นมา แบบง่ายๆ ผมต่อ Router ออกมาที่เครื่อง Notebook ผม


อย่างแรก ให้ดาวน์โหลด Python Interpreter ที่
https://www.python.org/downloads/



ใช้ Ver 2.x หรือ 3.x ก็ได้ครับ ใช้ได้เหมือนกัน จะต่างกันที่ Code บางตัว
แต่... ไม่ต้องห่วงครับ ในเว็บมี Document ให้ทั้ง Ver 2.x และ 3.x
  • Ver. 3.6 : https://docs.python.org/3.6/contents.html
  • Ver. 2.7 : https://docs.python.org/2.7/contents.html

ถัดมา ผมลงตัว PyCham ซึ่งเป็นตัว Editor มีประโยชน์มากๆ สำหรับใช้เขียนโปรแกรม Python ดาวน์โหลดได้ที่
https://www.jetbrains.com/pycharm/download/#section=windows

ใช้ Community Edition ก็เพียงพอครับ


หลังจากดาวน์โหลดมาแล้ว เปิดโปรแกรม PyCharm ขึ้นมา


ผมจะใช้ Python เพื่อให้ Telnet ไปที่อุปกรณ์ และ ลองสั่งให้ตั้งค่าที่ตัวอุปกรณ์ดูนะครับ

ผมใช้ Code ตามนี้เลย

import getpass
import telnetlib

HOST = "192.168.84.132"
user = input("Enter your remote account: ")
password = getpass.getpass()

tn = telnetlib.Telnet(HOST)

tn.read_until(b"Username: ")
tn.write(user.encode('ascii') + b"\n")if password:
    tn.read_until(b"Password: ")
    tn.write(password.encode('ascii') + b"\n")
tn.write(b"enable\n")
tn.write(b"cisco\n")
tn.write(b"config ter\n")
tn.write(b"inter lo10\n")
tn.write(b"ip add 10.10.10.10 255.255.255.255\n")
tn.write(b"inter lo11\n")
tn.write(b"ip add 11.11.11.11 255.255.255.255\n")
tn.write(b"inter lo12\n")
tn.write(b"ip add 12.12.12.12 255.255.255.255\n")
print(tn.read_all().decode('ascii'))

มีส่วนที่ต้องแก้ไข ก็คือ
  • HOST = "หมายเลข IP address"
  • tn.write(b"ใส่คำสั่งที่ต้องการตั้งค่า\n")
ส่วนที่เหลือผมปรับมาให้บางส่วนละ สามารถลองนำไปใช้ได้เลย ปรับแค่ 2 ส่วนด้านบนก็พอครับ

ซึ่งผมเขียนให้สร้าง Interface Loopback10 , Loopback11 , Loopback12 และตั้งค่า IP address บนแต่ละ Interface Loopback

จากนั้นเอา Code ลองไป Run ใน PyCharm ดูครับว่าสามารถใช้งานได้ ไม่ติด Error ใดๆ


ในเคสที่ผม Run นี้ ไม่ติด Error ใดๆ แสดงว่า Code น่าจะใช้งานได้ เดี๋ยวต้องไปลองดู อันนี้ Save เป็นไฟล์เก็บไว้ก่อน ผมตั้งชื่อว่า "telnet.py"


ถัดมา ผมตั้งค่า IP address กับเปิด Telnet บน Router ก่อน



Router>enable
Router#configure terminal
Router(config)#enable password cisco
Router(config)#username supakorn password cisco
Router(config)#line vty 0 4
Router(config-line)# login local
Router(config-line)# transport input telnet

ลองทดสอบดูก่อนว่าสามารถ Telnet ได้จริง ผมลอง Telnet หา IP address ของตัวเอง


Router#telnet 192.168.84.132
Trying 192.168.84.132 ...

Open User Access Verification
Username: supakorn
Password:

Router>en
Password:
Router#

แบบนี้ แสดงว่า Telnet ได้ปกติ เดี๋ยวเราลอง Run ผ่าน Python ดูครับ

Code ที่ผมเขียนนี้ คือให้สร้าง Interface Loopback10 , Loopback11 , Loopback12 และตั้งค่า IP address บนแต่ละ Interface Loopback

ผมลอง "show ip interface brief" บน Router ดูก่อน   

Router#sh ip int br
Interface              IP-Address      OK? Method Status                Protocol
Ethernet0/0            unassigned      YES unset  administratively down down    
Ethernet0/1            192.168.84.132  YES DHCP   up                    up      
Ethernet0/2            unassigned      YES unset  administratively down down    
Ethernet0/3            unassigned      YES unset  administratively down down    

สังเกตุว่ายังไม่มี Interface Loopback นะครับ

เดี๋ยวลอง Run Python ที่เขียนเอาไว้ดู เอาแบบง่ายๆ ก็ ดับเบิ้ลคลิก ที่ไฟล์ได้เลยครับ

หลังจาก ดับเบิ้ลคลิก "telnet.py" ก็จะแสดงให้ใส่ username/password สำหรับ Telnet

ทีนี้ลองมาดูฝั่ง Router บ้างครับ (ผมทำการ "debug telnet" ไว้บน Router)

*Jul 29 14:11:54.398: Telnet2: 1 1 251 1
*Jul 29 14:11:54.398: TCP2: Telnet sent WILL ECHO (1)
*Jul 29 14:11:54.398: Telnet2: 2 2 251 3
*Jul 29 14:11:54.398: TCP2: Telnet sent WILL SUPPRESS-GA (3)
*Jul 29 14:11:54.398: Telnet2: 80000 80000 253 24
*Jul 29 14:11:54.398: TCP2: Telnet sent DO TTY-TYPE (24)
*Jul 29 14:11:54.398: Telnet2: 10000000 10000000 253 31
*Jul 29 14:11:54.398: TCP2: Telnet sent DO WINDOW-SIZE (31)
*Jul 29 14:11:54.399: TCP2: Telnet received DONT ECHO (1)
*Jul 29 14:11:54.399: TCP2: Telnet sent WONT ECHO (1)
*Jul 29 14:11:54.400: TCP2: Telnet received DONT SUPPRESS-GA (3)
*Jul 29 14:11:54.400: TCP2: Telnet sent WONT SUPPRESS-GA (3)
*Jul 29 14:11:54.400: TCP2: Telnet received WONT TTY-TYPE (24)
*Jul 29 14:11:54.400: TCP2: Telnet sent DONT TTY-TYPE (24)
*Jul 29 14:11:54.400: TCP2: Telnet received WONT WINDOW-SIZE (31)
*Jul 29 14:11:54.400: TCP2: Telnet sent DONT WINDOW-SIZE (31)
*Jul 29 14:11:54.414: TCP2: Telnet received DONT ECHO (1)
*Jul 29 14:11:54.414: TCP2: Telnet received DONT SUPPRESS-GA (3)
*Jul 29 14:11:54.414: TCP2: Telnet received WONT TTY-TYPE (24)
*Jul 29 14:11:54.414: TCP2: Telnet received WONT WINDOW-SIZE (31)

จะเห็นว่ามี Session Telnet เข้ามาที่ Router ครับ ทีนี้ไปลองดูบน Router ว่า Interface Loopback ได้ถูก configure ไปแล้วหรือไม่

Router#show ip int br
Interface                  IP-Address      OK? Method Status                Protocol
Ethernet0/0                unassigned      YES unset  administratively down down    
Ethernet0/1                192.168.84.132  YES DHCP   up                    up      
Ethernet0/2                unassigned      YES unset  administratively down down    
Ethernet0/3                unassigned      YES unset  administratively down down    
Loopback10                 10.10.10.10     YES manual up                    up      
Loopback11                 11.11.11.11     YES manual up                    up      
Loopback12                 12.12.12.12     YES manual up                    up      

มาแล้วครับ Interface Loopback !!!! 

อาจจะไม่ได้เขียนวิธีการ และ ไม่ได้อธิบายโดยละเอียดไว้นะครับ..
แต่เท่านี้ก็หวังว่าจะเป็นตัวอย่างแบบง่ายๆ ให้ได้ไอเดีย เผื่อใครอยากจะไปลองเล่นดูครับ

เราสามารถค่อยทยอยปรับ หรือ เขียนให้ Advance ขึ้นไปอีกได้ อย่างเช่น... 
เราใส่ Command ไว้เป็น Text File แล้วให้ตัวโปรแกรมไปเอา Command จากใน Text File มาเพื่อตั้งค่าลงบนอุปกรณ์ เป็นต้น

ไม่มีความคิดเห็น:

แสดงความคิดเห็น