Zakky Muhammad

Information Technology

Hi, i'm Zakky!

Information Technology Enthusiast


Working in a company based on Indonesia. Very enthusiastic about linux, system security and application project. Sometimes works as a freelancer.

email: zkymuhammad@gmail.com

Resume

  Education

Informatics Engineering

AMIKOM University (Bachelor Degree) - Graduation 2016

Learn and got many experiences in information technology. Studying for 4 years. Learning many things such as computer network, programming, graphic design & multimedia, e-commerce, business management & much more. Enthusiastic about Linux & Open Source and Hacking & Security seminar or workshop. Started actively to be an IT writer either in blog or pdf.

Computer and Network Engineering

SMK Negeri 1 Pacitan - Graduation 2012

Learn and got many knowledge and experiences in Linux Server and System Administration either Linux or Windows. Got special opportunity to participate in Vocational High School Contest in Surabaya as IT Networking Support participant. Have achievement of The Best Final Project.

  Work Experience

Shopee International (SeaGroup).

Engineer, Corporate IT - Aug 2019 - Current

Working in IT Seagroup as IT Helpdesk. Working in IT Department to maintain all IT infrastructure in the office and help users to support their job.

Favehotel Kusumanegara.

IT Supervisor - Jan 2017 - Aug 2019

Working in Archipelago International property based on Yogyakarta, Indonesia. Manage and responsible for all IT infrastructure in Hotel. Also responsible for digital content and graphic design. Hotel Industry is the first professional job.

Freelance.

Website & Desktop App - Nov 2014 - Current

Working with some webiste projects. Including web design & web app. Have ever worked with desktop app that build with adobe flash.

AMIKOM University.

Practical Assistant - 2014

Assist the teacher to teach the students in laboratory. The course is Linux Operating System.

T&T Computer.

Computer Technician - 2010

Learned and worked about three months. Worked as computer technician. Experience in computer installation and troubleshooting.

  Testimonials

SKILLS

   Professional Skills

  • 73% Complete
    Comunication 73%
  • 80% Complete
    Management 80%
  • 95% Complete
    Confidence 95%
  • 88% Complete
    Presenter 88%

   IT Skills

  • 85% Complete
    Computer Network 85%
  • 75% Complete
    Mikrotik 75%
  • 80% Complete
    Cisco Meraki 80%
  • 78% Complete
    Cisco 78%
  • 70% Complete
    Hacking & Security 70%
  • 85% Complete
    Linux 85%

   Code Skills

  • 75% Complete
    Python 70%
  • 70% Complete
    MySQL 70%

Portfolio

Internet Network

Wireless Connection

Wireless LAN installation in National Land Agency Office Pacitan

Desktop App

Desktop App - Adobe Flash - Thesis Project

Social Science interactive module application as Junior High School learning media

Web Design

Website Front End

The Islamic University of Indonesia Magister Program Website Design

Web App

Front End

Black Java Coffee Jogja Website

School Website

Website

Creating Website for SMK Nurudh Dholam Pacitan

Blog

Selain menggunakan Telnetlib seperti yang dibahas pada artikel sebelumnya, tools lain atau library python yang dapat digunakan adalah Paramiko. Berikut topologi yang digunakan untuk praktek:

Sebelum menuliskan kode paramiko, jangan lupa install library

Contoh 1

import paramiko
import time

ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname="192.168.124.139",username="cisco",password="cisco")

conn = ssh_client.invoke_shell()

conn.send('enable')
conn.send("cisco")
conn.send("conf t")
conn.send("int lo 1")
conn.send("ip add 11.11.11.1 255.255.255.0")
#time.sleep(1)   ---> hilangkan pagar / komentar nya

output = conn.recv(65535)
print(output)

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

b'\r\nR2>enableciscoconf tint lo 1ip add 11.11.11.1 255.255.255.0'

conn.send() : digunakan untuk memasukkan perintah.
time.sleep() : memberikan jeda pada perintah untuk ditampilakn output-nya secara sempurna

Contoh 2

import paramiko
import time

host_list = ["192.168.124.138","192.168.124.139"]

n = 1

for host in host_list:
	ssh_client = paramiko.SSHClient()
	ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
	ssh_client.connect(hostname=host,username="cisco",password="cisco")

	conn = ssh_client.invoke_shell()

	conn.send("enable")
	conn.send("cisco")
	conn.send("conf t")
	conn.send("int lo 1")
	conn.send("ip add 10.10.10.{} 255.255.255.0".format(n))
	conn.send("no sh")

	#time.sleep(2)   ---> hilangkan pagar / komentar nya

	output = conn.recv(65535)
	print(output)

	ssh_client.close()

	n = n + 1
(Env) zakky.muhammad@mbp netauto % python3 code/paramiko-2.py

b'\r\nR1>enableciscoconf tint lo 1ip add 10.10.10.1 255.255.255.0no sh'
b'\r\nR2>enableciscoconf tint lo 1ip add 10.10.10.2 255.255.255.0no sh'

Pada contoh ke-2 ini perbedaannya hanya di host. Jika di contoh ke-1 hanya menggunakan 1 host, yang di contoh ke-2 ini menggunakan lebih dari 1 host yang dimasukkan ke dalam list.

Nilai n hanya digunakan sebagai increment untuk alamat IP, dimana alamat IP masing-masing host akan berawalan 10.10.10.n. Nilai n akan bernilai awal 1. Seiring pengulangan berjalan, makan nilai n akan bertambah.

Contoh 3

import paramiko
import time

ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname="192.168.124.138",username="cisco",password="cisco",port="2121")

conn = ssh_client.invoke_shell()

conn.send("enable")
conn.send("cisco")
conn.send("conf t")
conn.send("int lo 1")
conn.send("ip add 10.10.10.5 255.255.255.0")
conn.send("no sh")

#time.sleep(2)   ---> hilangkan pagar / komentar nya

output = conn.recv(65535)
print(output)

ssh_client.close()
(Env) zakky.muhammad@mbp netauto % python3 code/paramiko-3.py

b'\r\nR1>enableciscoconf tint lo 1ip add 10.10.10.5 255.255.255.0no sh'

LANJUTKAN BACA MATERI LENGKAP --> Network Automation

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 --> Network Automation

Kita dapat menangkap error menggunakan raise. Berikut ini beberapa contoh penggunaan raise.

Contoh 1

print("satu")
raise ValueError
print("dua")
=====>
satu
ValueError
=====>

Contoh 2

print("satu")
raise ValueError("Ada nilai yang error")
print("dua")
=====>
satu
ValueError: Ada nilai yang error
=====>

Contoh 3

x = 0

if x == 0:
	raise ValueError("Nilai Error")
=====>
ValueError: Nilai Error
=====>

Contoh 4

a = "string"

if not type(a) is int:
	raise TypeError("Tipe Varibel Salah")
=====>
TypeError: Tipe Varibel Salah
=====>

LANJUTKAN BACA MATERI LENGKAP --> Seri: Belajar Bahasa Python Lengkap

Blok kode pada statement finally akan tetap diekekusi walaupun terjadi error pada blok try/except. Lihat pada contoh kode di bawah ini:

try:
	bagi = 8 / 0

	print(bagi)

except ZeroDivisionError:
	print("error: pembagian nol")

finally:
	print("Blok finally tetap dieksekusi")
=====>
error: pembagian nol
Blok finally tetap dieksekusi
=====>

Walaupun di dalam blok kode except juga terjadi error, blok finally akan tetap dieksekusi.

try:
	print("angka 1")
	print(8/0)

except ZeroDivisionError:
	print(sebuah_variabel)

finally:
	print("Blok finally tetap dieksekusi")
=====>
angka 1
Blok finally tetap dieksekusi

ZeroDivisionError: division by zero

During handling of the above exception, another exception occurred:

NameError: name 'sebuah_variabel' is not defined
=====>

LANJUTKAN BACA MATERI LENGKAP --> Seri: Belajar Bahasa Python Lengkap

Exception dapat di-hadle menggunakan try/except. Jika terjadi exception, maka block except akan dieksekusi dan blok try tidak dieksekusi. Begitu juga sebaliknya, jika tidak terjadi exception, maka hanya blok try yang akan dieksekusi.

try:
	angka1 = 9
	angka2 = 0

	print(angka1/angka2)

except ZeroDivisionError:
	print("Terjadi pembagian angka 0")
=====>
Terjadi pembagian angka 0
=====>

Satu blok except juga dapat menampung lebih dari satu exception.

try:
	angka1 = 9
	
	print(angka1 + "buah")

except ZeroDivisionError:
	print("Terjadi pembagian angka 0")
except (ValueError, TypeError):
	print("Terjadi error pada value atau tipe")
=====>
Terjadi error pada value atau tipe
=====>

Blok except tanpa error yang dispesifikasikan akan menangkap semua jenis error.

try:
	angka1 = 9
	
	print(angka1 + "buah")

except:
	print("terdapat error ... hmmm")
=====>
terdapat error ... hmmm
=====>

LANJUTKAN BACA MATERI LENGKAP --> Seri: Belajar Bahasa Python Lengkap

1 2 3 4 5 6

Contact

  Address

Bantul, Yogyakarta - Indonesia

  Phone

ask by email or social media

  Mail

zkymuhammad@gmail.com