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.
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”