Network Automation menggunakan Python – Telnetlib

Network Automation Python

Sekarang di ilmu jaringan komputer terdapat cara baru untuk melakukan konfigurasi jaringan secara otomatis yang disebut dengan network automation. Jadi administrator dapat melakukan konfigurasi tanpa harus mengetikkan perintah satu persatu. Tetapi disisi lain, untuk melakukannya seorang network administrator harus memiliki skill pemrograman dasar.

Di internet sudah terdapat banyak artikel yang membahas mengenai network automation. Di artikel ini, penulis hanya ingin membagikan sedikit contoh mengenai network automation menggunakan bahasa pemrograman Python. Untuk lab dilakukan menggunakan GNS3 dan python3. Mungkin pembaca menemui banyak artikel yang membahas network automation menggunakan python2. Tetapi untuk membiasakan, penulis menggunakan python versi 3.

Di bawah ini adalah contoh network automation untuk melakukan konfigurasi Cisco router. Pastikan laptop atau komputer dapat melakukan ping ke router R1 dan R2 yang berada di GNS3. Kemudian buat script python di laptop atau komputer dengan format .py dan eksekusi.

Topologi Network Automation GNS3

Contoh 1

import telnetlib


tn = telnetlib.Telnet("192.168.124.131")

tn.read_until(b"Username: ")
tn.write(b"cisco\n")

tn.read_until(b"Password: ")
tn.write(b"cisco\n")

tn.write(b"enable\n")

tn.read_until(b"Password: ")
tn.write(b"cisco\n")

tn.write(b"conf t\n")
tn.write(b"int lo 1\n")
tn.write(b"ip add 11.11.11.1 255.255.255.0\n")
tn.write(b"end\n")
tn.write(b"exit\n")

print(tn.read_all().decode('ascii'))

tn.read_until() : menangkap ouput yg keluar dari perangkat.
tn.write() : memasukkan perintah ke perangkat.
tn.read_all().decode(‘ascii’) : menampilkan output dari perintah konfigurasi yang akan keluar ketika koneksi telnet berakhir.

Pada python 3 ditambahkan huruf b di depan string. Dan juga untuk read_all() harus dilakukan decode menggunakan ascii.

(Env) zakky.muhammad@mbp netauto % python3 code/telnetlib-1.py

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#int lo 1
R1(config-if)#ip add 11.11.11.1 255.255.255.0
R1(config-if)#end
R1#exit

Contoh 2

Pada contoh 2 ini yang membedakan hanya untuk user dan password disimpan dalam variabel. Kemudian setelah read_until(), dilakukan encode pada variabel tersebut.

import telnetlib

user = "cisco"
pwd = "cisco"


tn = telnetlib.Telnet("192.168.124.136")

tn.read_until(b"Username: ")
tn.write(user.encode('ascii') + b"\n")

tn.read_until(b"Password: ")
tn.write(pwd.encode('ascii') + b"\n")

tn.write(b"enable\n")

tn.read_until(b"Password: ")
tn.write(pwd.encode('ascii') + b"\n")

tn.write(b"conf t\n")
tn.write(b"int lo 2\n")
tn.write(b"ip add 22.22.22.2 255.255.255.0\n")
tn.write(b"end\n")
tn.write(b"exit\n")

print(tn.read_all().decode('ascii'))

tn.write(user.encode(‘ascii’) + b”\n”) : untuk melakukan encode nilai pada variabel user.
tn.write(pwd.encode(‘ascii’) + b”\n”) : untuk melakukan encode nilai pada variabel pwd.

(Env) zakky.muhammad@mbp netauto % python3 code/telnetlib-2.py 

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#int lo 2
R1(config-if)#ip add 22.22.22.2 255.255.255.0
R1(config-if)#end
R1#exit

Contoh 3

Untuk contoh ini menggunakan library getpass agar password yg dimasukkan tidak dalam bentuk plaintext.

import telnetlib
import getpass

user = "cisco"
pwd = getpass.getpass()
enpwd = getpass.getpass()


tn = telnetlib.Telnet("192.168.124.136")

tn.read_until(b"Username: ")
tn.write(user.encode('ascii') + b"\n")

tn.read_until(b"Password: ")
tn.write(pwd.encode('ascii') + b"\n")

tn.write(b"enable\n")

tn.read_until(b"Password: ")
tn.write(enpwd.encode('ascii') + b"\n")

tn.write(b"conf t\n")
tn.write(b"int lo 2\n")
tn.write(b"ip add 22.22.22.2 255.255.255.0\n")
tn.write(b"end\n")
tn.write(b"exit\n")

print(tn.read_all().decode('ascii'))
(Env) zakky.muhammad@mbp netauto % python3 code/telnetlib-3.py
Password: 
Password: 

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#int lo 2
R1(config-if)#ip add 22.22.22.2 255.255.255.0
R1(config-if)#end
R1#exit

Contoh 4

import telnetlib
import getpass

user = "cisco"


tn = telnetlib.Telnet("192.168.124.136")

tn.read_until(b"Username: ")
tn.write(user.encode('ascii') + b"\n")

tn.read_until(b"Password: ")
print("#password access")
pwd = getpass.getpass()
tn.write(pwd.encode('ascii') + b"\n")

tn.write(b"enable\n")

tn.read_until(b"Password: ")
print("#password enable: ")
enpwd = getpass.getpass()
tn.write(enpwd.encode('ascii') + b"\n")

tn.write(b"conf t\n")
tn.write(b"int lo 1\n")
tn.write(b"ip add 10.10.10.1 255.255.255.0\n")
tn.write(b"do sh ip int b\n")
tn.write(b"end\n")
tn.write(b"exit\n")
tn.write(b"exit\n")

print(tn.read_all().decode('ascii'))
(Env) zakky.muhammad@mbp netauto % python3 code/telnetlib-4.py
#password access
Password: 
#password enable: 
Password: 

R1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#int lo 1
R1(config-if)#ip add 10.10.10.1 255.255.255.0
R1(config-if)#do sh ip int b
Interface                  IP-Address      OK? Method Status                Protocol
Ethernet0/0                unassigned      YES NVRAM  administratively down down    
GigabitEthernet0/0         192.168.124.136 YES DHCP   up                    up      
GigabitEthernet1/0         unassigned      YES NVRAM  administratively down down    
GigabitEthernet2/0         unassigned      YES NVRAM  administratively down down    
GigabitEthernet3/0         unassigned      YES NVRAM  administratively down down    
Loopback1                  10.10.10.1      YES manual up                    up      
Loopback2                  22.22.22.2      YES manual up                    up      
R1(config-if)#end
R1#exit

Contoh 5

Contoh di bawah ini adalah ketika port standar telnet (port 23) di blok dan diganti ke port 3001.

import telnetlib

host = "192.168.124.136"
port = 3001
user = "cisco"
pwd = "cisco"

tn = telnetlib.Telnet(host,port)

tn.read_until(b"Username:")
tn.write(user.encode('ascii')+b"\n")

tn.read_until(b"Password:")
tn.write(pwd.encode('ascii')+b"\n")

tn.write(b"enable\n")
tn.read_until(b"Password:")
tn.write(pwd.encode('ascii')+b"\n")

tn.write(b"sh ip int b\n")
tn.write(b"exit\n")
tn.write(b"exit\n")

print(tn.read_all().decode('ascii'))
(Env) zakky.muhammad@mbp netauto % python3 code/telnetlib-5.py 
 
R1#sh ip int b
Interface                  IP-Address      OK? Method Status                Protocol
Ethernet0/0                unassigned      YES NVRAM  administratively down down    
GigabitEthernet0/0         192.168.124.136 YES DHCP   up                    up      
GigabitEthernet1/0         unassigned      YES NVRAM  administratively down down    
GigabitEthernet2/0         unassigned      YES NVRAM  administratively down down    
GigabitEthernet3/0         unassigned      YES NVRAM  administratively down down    
Loopback1                  10.10.10.1      YES manual up                    up      
Loopback2                  22.22.22.2      YES manual up                    up      
R1#exit

LANJUTKAN BACA MATERI LENGKAP


1 thought on “Network Automation menggunakan Python – Telnetlib

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.