/*auto readmore*/ /*auto readmore*/ /* an hien script*/ // an hien password /*an hien ma chuong trinh cong tru */ /*Scrollbox thanh cuon*/ /***Nhung CODE***/ /* dòng xanh dòng trắng */ /* https://cdnjs.com/libraries/prism lay thu vien, can vao ten file ma goi 1. copy link vao vi du:prism-python.min.js 2. ten ngon nua la python */ /*=== New posts ===*/ /*header slider*/ /*=== bai viet lien quan===*/ /*===tabcode===*/

Network Automation #003 - Netmiko Backup VLAN Configuration on Cisco IOS Switch

 Nên xem các bài dưới đây trước khi xem bài này:


Sơ đồ lab:


Yêu cầu:

Dùng thư viện netmiko để SSH vào và thực hiện backup cấu vlan trên switch


Chuẩn bị:

        Sw:

enable
conf t
hostname Sw1
ip domain name netmiko.lab

username admin privilege 15 password admin1234@sw1

line vty 0 4
login local
transport input ssh
crypto key generate rsa general-keys modulus 1024
ip ssh version 2

interface vlan 1
no shutdown
ip address 192.168.0.8 255.255.255.0
exit

vlan 10-20
do wri


Thực hiện:

from netmiko import ConnectHandler 
from datetime import datetime

bk_device = { 
	"host":"192.168.0.8",
	"username":"admin",
	"password":"admin1234@sw1",
	"device_type":"cisco_ios" 
	}

tftpserver = "192.168.0.48" 

def cisco_ios_sw(txt): # định nghĩa hàm backup VLAN cho switch cisco ios
	
	cmd = "copy vlan.dat tftp:"
	filename = txt + "vlan.dat"
	
	net_connect = ConnectHandler(**bk_device)

	output = net_connect.send_command_timing(cmd)
	if "Address or name of remote host []" in  output:
		output += net_connect.send_command_timing(tftpserver)
	if "Destination filename" in output:
		output += net_connect.send_command_timing(filename)

	print(output)
	print("-" * 80)	


print(f"Dang ket noi vao IP:'{bk_device['host']}' voi Username: '{bk_device['username']}'")	

now = datetime.now().strftime("%Y-%b-%d_%H%M%S")
filename = now + "_" + bk_device["device_type"] + "_" + bk_device["host"] 

cisco_ios_sw(filename)


  • Kết quả:

C:\python>python Demo.py

Dang ket noi vao IP:'192.168.0.8' voi Username: 'admin'

Address or name of remote host []? Destination filename [vlan.dat]? !!

2076 bytes copied in 0.025 secs (83040 bytes/sec)

--------------------------------------------------------------------------------

C:\python>


Xong!

Học Python Qua Ví Dụ #022 - Module Trong PyThon

Cũng giống như Function, Module cho phép tái sử dụng code lại nhiều lần. Với Function thì các hàm phải được định nghĩa trước đó và sau đó gọi hàm ra mà dùng. Với Module nó bao gồm các lớp (class), các hàm (function), các biến,...mà chúng ta đã gom/phân thành từng module. Khi sử dụng nó chúng ta chỉ cần IMPORT nó vào mà sử dụng KHÔNG CẦN phải viết lại.

Ví dụ chúng ta có file vck_func.py với nội dung:

import re
def MAC_Win2Cisco(mac_addr): 
	'''
	chuyển định dạng MAC address của Windows sang định dạng Cisco
	Dữ liệu đầu VÀO có dạng "11:22:33:44:55:66" HOẶC "11-22-33-44-55-66"
	KẾT QUẢ:"1122.3344.5566"
		
	'''
	mac_addr = re.sub("[-:]","",mac_addr)
	new_mac = []
	while len(mac_addr) > 0:
		entry = mac_addr [:4]
		mac_addr = mac_addr [4:]
		new_mac.append(entry) 

	new_mac = ".".join(new_mac)
	return new_mac


def MAC_Cisco2Win(mac_addr): 
	'''
	Chuyển định dạng MAC address của cisco sang windows
	Dữ liệu vào:"1122.3344.5566"
	KẾT QUẢ: "11:22:33:44:55:66"
	'''
	mac_addr = re.sub("[.]","",mac_addr)
	new_mac = []
	while len(mac_addr) > 0:
		entry = mac_addr [:2]
		mac_addr = mac_addr [2:]
		new_mac.append(entry) 

	new_mac = ":".join(new_mac)
	return new_mac
	

def ipv4_chk(ip_addr):
	'''
	Kiểm tra ip nhập vào có hợp lệ không
	IP hợp lệ phải có 4 otects
	Mỗi otect phải là số trong khoảng [0-255]
	'''	
	octets = ip_addr.split(".")
	if len(octets) != 4:
		return False
	
	for x in octets:
		if not x.isdigit() or int(x) < 0 or int(x) > 255:
			return False
		return True	


Để sử dụng các hàm trên chúng ta thực hiện:

  • Import vck_func 
  • Dùng hàm dir để xem trong file vck_func có những hàm nào

import vck_func
		
print(dir(vck_func))


kết quả:

C:\python>python Demo.py

['MAC_Cisco2Win', 'MAC_Win2Cisco', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'ipv4_chk', 're']

C:\python>


phần highlight màu vàng là các hàm chúng ta đã định nghĩa trong file vck_func.py

  • Ví dụ sử dụng hàm MAC_Win2Cisco

Cách 1: gọi gián tiếp, cú pháp import <tên file thư viện cần import>

Code:

import vck_func

Mac_Cisco = vck_func.MAC_Win2Cisco("aa:cc:bb:dd:ee:ff")
	
print(Mac_Cisco)


Kết quả:

C:\python>python Demo.py

aacc.bbdd.eeff

C:\python>


Cách 2: Gọi trực tiếp, cú pháp from  <tên file thư viện cần import> import <tên hàm, hoặc class>

from vck_func import MAC_Win2Cisco

Mac_Cisco = MAC_Win2Cisco("aa:cc:bb:dd:ee:ff")
	
print(Mac_Cisco)


Tùy từng trường hợp mà chúng ta có thể dùng cách 1 hoặc cách 2

Xong!

/*header slide*/