/*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 #001 - Netmiko Basic SSH To Router

Nên đọc 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 R_1 và thực hiện:

1. Show arp
2. Kiểm tra xem R_1 có bao nhiêu interface ở trạng thái up
3. Ghi thông tin của interface vào file int_down.txt nếu chúng có trạng thái down và hiện thị tổng số interface có trạng thái down.

Thực hiện:
  • Chuẩn bị:
Cấu hình trên R_1:
enable
conf t
hostname R_1
ip domain name netmiko.lab

username admin privilege 15 password admin1234

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

interface Ethernet0/0
no shutdown
ip address 192.168.0.1 255.255.255.0
exit

interface Ethernet0/1
no shutdown
ip address 172.16.100.1 255.255.255.0
exit

interface Ethernet0/2
no shutdown
ip address 172.16.200.1 255.255.255.0
exit
do wri

  • Netmiko:
1. Show arp

Code:
import netmiko # import thư viện netmiko

# định nghĩa dictionnary với các tham số đã cấu hình trong phần chuẩn bị
R_1 = { 
	"host":"192.168.0.1",
	"username":"admin",
	"password":"admin1234",
	"device_type":"cisco_ios"
	}
	
# dùng hàm ConnectHandler trong thư viện netmiko để kết nối với R_1 với các thông tin đã định nghĩa trong dictionnary
net_connect = netmiko.ConnectHandler(**R_1) 
show_arp = net_connect.send_command("show arp") # thực hiện lênh show arp
print (show_arp)


Kết quả:
C:\python>python Demo.py
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  172.16.100.1            -   aabb.cc00.1010  ARPA   Ethernet0/1
Internet  172.16.200.1            -   aabb.cc00.1020  ARPA   Ethernet0/2
Internet  192.168.0.1             -   aabb.cc00.1000  ARPA   Ethernet0/0
Internet  192.168.0.48            0   94de.80a6.fb30  ARPA   Ethernet0/0

C:\python>

2. Kiểm tra xem R_1 có bao nhiêu interface ở trạng thái up

Code:
from netmiko import ConnectHandler # cách import này chúng ta có thể gọi hàm ConnectHandler trực tiếp

R_1 = { 
	"host":"192.168.0.1",
	"username":"admin",
	"password":"admin1234",
	"device_type":"cisco_ios"
	}

# gọi hàm ConnectHandler trực tiếp
net_connect = ConnectHandler(**R_1) 
output = net_connect.send_command("show ip int brief") # thực hiện lênh show ip int brief

dem = 0 # khởi tạo biến đếm
for line in output.splitlines():
	if "Interface" in line: # bỏ dòng đầu tiên
		continue
	elif "up" in line: # nếu trạng thái up thì 
		dem += 1 # tăng lên 1

print("So interface UP cua thiet bi la:",dem)

Kết quả:
C:\python>python Demo.py

So interface UP cua thiet bi la: 3

C:\python>

3. Ghi thông tin của interface vào file int_down.txt nếu chúng có trạng thái down và hiện thị tổng số interface có trạng thái down.

Code:
from netmiko import ConnectHandler # cách import này chúng ta có thể gọi hàm ConnectHandler trực tiếp
import os # thư viện để lấy đường dẫn hiện tại

R_1 = { 
	"host":"192.168.0.1",
	"username":"admin",
	"password":"admin1234",
	"device_type":"cisco_ios"
	}

# gọi hàm ConnectHandler trực tiếp
net_connect = ConnectHandler(**R_1) 
output = net_connect.send_command("show ip int brief") # thực hiện lênh show ip int brief

path = os.getcwd() # lấy đường dẫn hiện tại gán vào biến path
filename = "int_down.txt"
int_status = "down"

dem = 0 # khởi tạo biến đếm

for line in output.splitlines():
	if "Interface" in line: # bỏ dòng đầu tiên
		continue
	elif int_status in line: # nếu trạng thái down thì 
		with open (filename,"a") as afile: # ghi file append/ghi vào cuối file
			afile.write(line) 
		dem += 1 # tăng lên 1

print("So interface DOWN cua thiet bi la:",dem)
print("Thong tin duoc luu vao file '{}' duong dan la '{}'".format(filename,path))


Kết quả:
C:\python>python Demo.py

So interface DOWN cua thiet bi la: 5
Thong tin duoc luu vao file 'int_down.txt' duong dan la 'C:\python'

C:\python>

Các bạn có thể mở file int_down.txt để xem kết quả.

Các common thường sử dụng trong phương thức netmiko:

  • net_connect.send_command() - Send command down the channel, return output back (pattern based)
  • net_connect.send_command_timing() - Send command down the channel, return output back (timing based)
  • net_connect.send_config_set() - Send configuration commands to remote device
  • net_connect.send_config_from_file() - Send configuration commands loaded from a file
  • net_connect.save_config() - Save the running-config to the startup-config
  • net_connect.enable() - Enter enable mode
  • net_connect.find_prompt() - Return the current router prompt
  • net_connect.commit() - Execute a commit action on Juniper and IOS-XR
  • net_connect.disconnect() - Close the connection
  • net_connect.write_channel() - Low-level write of the channel
  • net_connect.read_channel() - Low-level write of the channel


Xong!

Học Python Qua Ví du #003 - String, Strip, Split/So Sánh, Cắt, Nối, Tách Chuỗi Trong Python

Yêu Cầu:
1. So sánh chuỗi
2. Cắt chuỗi - slice, độ dài - len
3. Nối chuỗi
4. Strip - Cắt ký tự đầu hoặc cuối chuỗi
5. Split - Tách chuỗi

Thực hiện:
1. So sánh chuỗi

Code:
'''
ip_addr là biến kiểu string
Gán chuỗi "192.168.1.1" vào biến ip_addr
'''
ip_addr = "192.168.1.1" 
print(ip_addr == "192.168.1.1") # in ra kết quả, so sánh biến ip_addr với chuỗi "192.168.1.1"
print(ip_addr == "192.168.1.999") # in ra kết quả, so sánh biến ip_addr với chuỗi "192.168.1.999"
print(ip_addr != "8.8.8.8") # in ra kết quả, kiểm tra xem biến ip_addr có khác với chuỗi "8.8.8.8"
print("192.168." in ip_addr) # in ra kết quả, kiểm tra chuỗi "192.168." CÓ trong chuỗi ip_addr không
print("8.8." not in ip_addr) # in ra kết quả, kiểm tra chuỗi "8.8." KHÔNG có trong chuỗi ip_addr có phải không
print()
print(ip_addr) # in ra chuỗi trong biến ip_addr

Kết quả:
C:\python>python Demo.py
True
False
True
True
True

192.168.1.1

C:\python>

2. Cắt Chuỗi - slice, độ dài - len

Slice: là phương thức cắt (cắt lát) lấy các ký tự liên tiếp trong chuỗi
Code:
ip_addr = "192.168.1.1" 
print(ip_addr[0:3]) # Lấy từ vị trí đầu tiên đến vị trí thứ trước 3 1 đơn vị (tạm hiểu 3-1). và in ra màn hình
print(ip_addr[4:7]) # Lấy từ vị trí thứ 4 đến vị trí 8-1 và in ra màn hình
print(ip_addr[8:]) # Lấy từ vị trí thứ 8 đến hết chuỗi
print(ip_addr[-7:-1]) # Lấy từ vị trí thứ -5 đến vị trí thứ trước -1 1 đơn vị (không lấy ký tự cuối)
print(ip_addr[-1]) # Lấy vị trí cuối cùng của chuỗi
print()
print("Do dai cua chuoi la: ",len(ip_addr)) # in ra độ dài của chuỗi

Cách đếm: Trong python có 2 cách đếm đó là:
  • Đếm từ trái sang phải bắt đầu bằng số không 0
  • Đếm từ phải sang trái bắt đầu bằng số -1
Bảng cách đếm trong python

Kết quả:
C:\python>python Demo.py
192
168
1.1
168.1.
1

Do dai cua chuoi la:  11

C:\python>

3. Cách nối chuỗi

Code:
ip_addr = "192.168.1.1" 
str1 = "My IP Address: "
my_str = str1 + ip_addr # nối 2 chuỗi lại với nhau
print()
print(my_str)
print ("-" * 25 ) # in ra 25 dấu trừ

Kết quả:
C:\python>python Demo.py
My IP Address: 192.168.1.1
-------------------------

C:\python>

4. Strip - Cắt ký tự đầu hoặc cuối chuỗi
Code:
str1 = "   Vi du ham strip() trong python   "
print(str1.strip()) # in ra chuỗi str1 và bỏ khoảng trắng 2 bên
str2 = "---Vi du ham strip() trong python---"
print(str2.strip('-')) # in ra chuỗi str2 và bỏ dấu trừ 2 bên
str3 = "---Vi du ham strip() trong python==="
print(str3.strip('-=')) # in ra chuỗi str3 và bỏ dấu - và dấu = ở 2 bên
Kết quả:

C:\python>python Demo.py
Vi du ham strip() trong python
Vi du ham strip() trong python
Vi du ham strip() trong python

C:\python>

5. Split - Tách chuỗi

Ví dụ 1:
Code:
ip_addr = "192.168.100.254"
'''
căn cứ vào dấu chấm "." để tách thành từng cụm
trong ví dụ này sẽ tách ra làm 4 cụm là:
'192', '168', '100', '254'
dấu chấm sẽ không được in ra
'''
Tachchuoi = ip_addr.split(".")
print()
print (Tachchuoi)

Kết quả:
C:\python>python Demo.py

['192', '168', '100', '254']

C:\python>

Ví dụ 2:
Code:
arp1 = "Internet  10.220.88.29           94   5254.abbe.5b7b  ARPA   FastEthernet4"
'''
tách chuỗi ra thành từng cụm và căn cứ vào khoảng trắng để tách
trong trường hợp này chia làm 6 cụm là:
'Internet', '10.220.88.29', '94', '5254.abbe.5b7b', 'ARPA', 'FastEthernet4'
'''
Tachchuoi = arp1.split()
print()
print (Tachchuoi)

Kết quả:
C:\python>python Demo.py
['Internet', '10.220.88.29', '94', '5254.abbe.5b7b', 'ARPA', 'FastEthernet4']

C:\python>

Xong!

VMware Workstation Startup Automatically

Vì lý do nào đó chúng ta dùng máy ảo trên VMware để sử dụng thực tế trong công việc, nhưng máy ảo này không tự khởi động khi máy thật chạy mà chúng ta phải tự mở nó lên.

Hôm nay chúng tôi giới thiệu các bạn cách để máy ảo trên VMware sẽ tự động khởi động sau khi máy thật được khởi động.

  • Enable Sharing



  •  Chọn  Máy ảo muốn share và clone.



  • Chọn thời gian (time delay) để khởi động máy ảo sau khi máy thật khởi động


  • Đảm bảo service VMware Workstation Server luôn ở trạng thái Running


Khởi động lại máy để kiểm tra.
Xong!

VMware Workstation Startup Automatically

Vì lý do nào đó chúng ta dùng máy ảo trên VMware để sử dụng thực tế trong công việc, nhưng máy ảo này không tự khởi động khi máy thật chạy mà chúng ta phải tự mở nó lên.

Hôm nay chúng tôi giới thiệu các bạn cách để máy ảo trên VMware sẽ tự động khởi động sau khi máy thật được khởi động.

  • Enable Sharing



  •  Chọn  Máy ảo muốn share và clone.



  • Chọn thời gian (time delay) để khởi động máy ảo sau khi máy thật khởi động


  • Đảm bảo service VMware Workstation Server luôn ở trạng thái Running


Khởi động lại máy để kiểm tra.
Xong!

Học Python Qua Ví Dụ #002- Date, DateTime, Weekday/Lấy Ngày Giờ Trong Python

Yêu Cầu:  In ra màn hình theo các yêu cầu:
1. Lấy ngày hệ thống
2. Lấy ngày, giờ hệ thống
3. Lấy thứ (weekday) của hệ thống:

Thực hiện:

1. Lấy ngày hệ thống


Code:
from datetime import date
today = date.today()
# dd-mm-YY
Hnay = "Hom nay: "
d1 = today.strftime("%d-%m-%Y")
print(Hnay, d1)
# Textual month, day and year	
d2 = today.strftime("%B %d, %Y")
print(Hnay, d2)
# mm-dd-y
d3 = today.strftime("%m-%d-%y")
print(Hnay, d3)
# Month abbreviation, day and year	
d4 = today.strftime("%b-%d-%Y")
print(Hnay, d4)

Kết quả:
C:\python>python Demo.py
Hom nay ngay:  16-07-2020
Hom nay ngay:  July 16, 2020
Hom nay ngay:  07-16-20
Hom nay ngay:  Jul-16-2020

C:\python>

2. Lấy ngày giờ hệ thống

Code:
from datetime import datetime
# datetime object containing current date and time
now = datetime.now()
dt_str1 = now.strftime("%Y-%m-%d_%H-%M-%S")
dt_str2 = now.strftime("%Y-%B-%d_%H-%M-%S")
dt_str3 = now.strftime("%Y-%b-%d_%H-%M-%S")
print(dt_str1)
print(dt_str2)
print(dt_str3)

Kết quả:
C:\python>python Demo.py
2020-07-16_14-16-16
2020-July-16_14-16-16
2020-Jul-16_14-16-16

C:\python>

3. Lấy thứ (weekday) của hệ thống:
Code:
from datetime import datetime
now = datetime.now()
#Thứ mấy trong tuần, tên đầy đủ
print(now.strftime("%A"))
#Hoặc Lấy 3 ký tự đầu tiên của thứ
print(now.strftime("%a"))
#Hoặc Lấy 3 ký tự đầu tiên của chuỗi 
dt_str = now.strftime("%c")[0:3] 
print(dt_str)

Kết quả:
C:\python>python Demo.py
Thursday
Thu
Thu

C:\python>


Bảng định dạng các biến lấy ngày giờ.

Xong!

Cài Đặt Thư Viện Cho Python / Installing Python Modules / Installing Python Packages

Yêu cầu:

1. Cài đặt thư viện Netmiko

2. Cài đặt ntc-templates

3. Jinja2 template

4. Một số thư viện hay dùng

5. Kiểm tra các thư viện đã cài đặt trên python


Thực hiện:

1. Cài đặt thư viện Netmiko: Dùng để cài đặt và thiết lập kết nối ssh vào thiết bị

C:\Users\Admin\Downloads>pip install netmiko

Collecting netmiko
  Using cached netmiko-3.1.1-py2.py3-none-any.whl (147 kB)
Collecting pyserial
  Using cached pyserial-3.4-py2.py3-none-any.whl (193 kB)
Collecting scp>=0.13.2
  Using cached scp-0.13.2-py2.py3-none-any.whl (9.5 kB)
Collecting paramiko>=2.4.3
  Using cached paramiko-2.7.1-py2.py3-none-any.whl (206 kB)
Requirement already satisfied: setuptools>=38.4.0 in c:\program files (x86)\python38-32\lib\site-packages (from netmiko) (41.2.0)
Collecting textfsm
  Using cached textfsm-1.1.0-py2.py3-none-any.whl (37 kB)
Collecting bcrypt>=3.1.3
  Using cached bcrypt-3.1.7-cp38-cp38-win32.whl (26 kB)
Collecting cryptography>=2.5
  Using cached cryptography-2.9.2-cp38-cp38-win32.whl (1.3 MB)
Collecting pynacl>=1.0.1
  Using cached PyNaCl-1.4.0-cp38-cp38-win32.whl (193 kB)
Collecting six
  Using cached six-1.15.0-py2.py3-none-any.whl (10 kB)
Processing c:\users\admin\appdata\local\pip\cache\wheels\8e\70\28\3d6ccd6e315f65f245da085482a2e1c7d14b90b30f239e2cf4\future-0.18.2-py3-none-any.whl
Collecting cffi>=1.1
  Using cached cffi-1.14.0-cp38-cp38-win32.whl (165 kB)
Collecting pycparser
  Using cached pycparser-2.20-py2.py3-none-any.whl (112 kB)
Installing collected packages: pyserial, pycparser, cffi, six, bcrypt, cryptography, pynacl, paramiko, scp, future, textfsm, netmiko
Successfully installed bcrypt-3.1.7 cffi-1.14.0 cryptography-2.9.2 future-0.18.2 netmiko-3.1.1 paramiko-2.7.1 pycparser-2.20 pynacl-1.4.0 pyserial-3.4 scp-0.13.2 six-1.15.0 textfsm-1.1.0
C:\Users\Admin\Downloads>


2. Cài đặt ntc-templates

C:\python>git clone https://github.com/networktocode/ntc-templates

Cloning into 'ntc-templates'...

remote: Enumerating objects: 8346, done.

remote: Total 8346 (delta 0), reused 0 (delta 0), pack-reused 8346

Receiving objects: 100% (8346/8346), 2.14 MiB | 880.00 KiB/s, done.

Resolving deltas: 100% (4671/4671), done.


C:\python>



3. Jinja2 template: Dùng import dữ liệu từ danh sách vào template với những trị trí đã được định sẵn (tương tự như mail merger trong word).
C:\>pip install jinja2
Defaulting to user installation because normal site-packages is not writeable
Collecting jinja2
  Downloading Jinja2-2.11.2-py2.py3-none-any.whl (125 kB)
     |████████████████████████████████| 125 kB 939 kB/s
Collecting MarkupSafe>=0.23
  Downloading MarkupSafe-1.1.1-cp38-cp38-win32.whl (16 kB)
Installing collected packages: MarkupSafe, jinja2
Successfully installed MarkupSafe-1.1.1 jinja2-2.11.2
WARNING: You are using pip version 20.2; however, version 20.2.2 is available.
You should consider upgrading via the 'c:\program files (x86)\python38-32\python.exe -m pip install --upgrade pip' command.

C:\>

4. Một số thư viện hay dùng

- pip install netmiko
- pip install textfsm
- pip install pandas
- pip install jinja2
- pip install xlwings
- pip install pyinstaller
- pip install tabula-py

5. Kiểm tra các thư viện đã cài đặt trên python

pip freeze
Khi gõ lệnh này thì các thư viện đã cài sẽ được list ra


Xong!
/*header slide*/