/*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 #002 - Netmiko Backup Cisco Configuration To TFTP Server

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


Sơ đồ lab:




Dùng thư viện netmiko để thực hiện backup cấu hình của các router/switch:

Yêu cầu:

1. Tên file backup để mặc định các thông tin thiết bị như nội dung file device_list.csv:
2. Định nghĩa hàm backup theo từng vendor riêng, thực hiện chương kiểm tra vendor và gọi các hàm tương ứng, tên file backup có dạng thoigian_vendor_IPAddr. Thông tin thiết bị file deviceS_list.csv có nội dung như dưới:
3. Netniko support những vendor nào

Chuẩn bị:


Thực hiện:

1. Tên file backup để mặc định các thông tin thiết bị như nội dung file device_list.csv:

Code:
from netmiko import ConnectHandler 

bk_device = {} # định nghĩa Dictionary rỗng

with open ("device_list.csv","r") as rfile: # mở file

	keys = rfile.readline().split(",")# lấy dòng đầu tiên/dòng tiêu đề chuyển thành list
	values = rfile.read() # các dòng còn lại là giá trị cần gán vào dict

#print(keys)
#print(values)

for values in values.splitlines(): # trả về một chuỗi tương ứng là một dòng trong biến values
	values = values.split(",") # mỗi dòng chuyển thành list
	for i in range(1,len(keys)-1,1): # lặp để lấy giá trị ( trừ 1 là bỏ cột remark)
		bk_device[keys[i]] = values[i]  # gán từng cặp keys và values tương ứng cho dict
		
	# print(bk_device)
	# thiết lập kết nối đến thiết bị và backup cấu hình
	print(f"Dang ket noi vao IP:'{values[1]}' voi Username: '{values[2]}'")	
	net_connect = ConnectHandler(**bk_device) 
	
	output = net_connect.send_command_timing("copy running-config tftp:") # thực hiện backup cấu hình
	
	if "Address or name of remote host []" in  output:
		output += net_connect.send_command_timing("192.168.0.48") # nhập địa chỉ TFTP server
	if "Destination filename" in output:
		output += net_connect.send_command_timing("\n") # Enter để chọn tên mặc định
	print(output)
	print("-" * 80)

Kết quả:
C:\python>python Demo.py
Dang ket noi vao IP:'192.168.0.1' voi Username: 'admin'
Address or name of remote host []? Destination filename [r1-confg]? !!
1250 bytes copied in 0.111 secs (11261 bytes/sec)

--------------------------------------------------------------------------------
Dang ket noi vao IP:'192.168.0.2' voi Username: 'admin'
Address or name of remote host []? Destination filename [r2-confg]? !!
1041 bytes copied in 0.088 secs (11830 bytes/sec)

--------------------------------------------------------------------------------
Dang ket noi vao IP:'192.168.0.3' voi Username: 'admin'
Address or name of remote host []? Destination filename [r3-confg]? !!
1041 bytes copied in 0.086 secs (12105 bytes/sec)

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

C:\python>

2. Định nghĩa hàm backup theo từng vendor riêng, thực hiện chương kiểm tra vendor và gọi các hàm tương ứng, tên file backup có dạng thoigian_vendor_IPAddr. 

Chúng tôi tạm tách ra làm phần code để các bạn dễ hiểu
  • Định nghĩa hàm backup
from netmiko import ConnectHandler 

bk_device = {} 
tftpserver = "192.168.0.48" 

def cisco_ios(txt): # hàm backup cho cisco ios
	
	cmd = "copy running-config tftp:"
	filename = txt
	
	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)	


def cisco_asa(txt):
	print("Chua viet cisco_asa")

def juniper_srx(txt):
	print("Chua viet juniper_srx")

  • Mở file deviceS_list.csv, định nghĩa tên file backup và gọi hàm backup tương ứng cho từng vendor
from datetime import datetime

with open ("deviceS_list.csv","r") as rfile: # mở file

	keys = rfile.readline().split(",")
	values = rfile.read() 

#print(keys)
#print(values)

for values in values.splitlines(): 
	values = values.split(",") 
	for i in range(1,len(keys)-1,1): 
		bk_device[keys[i]] = values[i]  
		
	print(f"Dang ket noi vao IP:'{values[1]}' voi Username: '{values[2]}'")	

	now = datetime.now().strftime("%Y-%b-%d_%H%M%S") # lấy ngày giờ hiện tại (thoigian)
	filename = now + "_" + values[4] + "_" + values[1] # tên file backup là: thoigian_vendor_IPAddr

	if values[4] == "cisco_ios" : 
		cisco_ios(filename) # gọi hàm backup cisco_ios đã được định nghĩa trước đó
	elif values[4] == "cisco_asa" :
		cisco_asa(filename)
	elif values[4] == "juniper_srx" :
		juniper_srx(filename)
	else:	
		print("thiet bi khac")

  • Code chính (gộp 2 phần trên lại và đây là code chạy):
from netmiko import ConnectHandler 
from datetime import datetime

bk_device = {} 
tftpserver = "192.168.0.48" 

def cisco_ios(txt): # hàm backup cho cisco ios
	
	cmd = "copy running-config tftp:"
	filename = txt
	
	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)	


def cisco_asa(txt):
	print("Chua viet cisco_asa")

def juniper_srx(txt):
	print("Chua viet juniper_srx")


with open ("deviceS_list.csv","r") as rfile: # mở file

	keys = rfile.readline().split(",")
	values = rfile.read() 

#print(keys)
#print(values)

for values in values.splitlines(): 
	values = values.split(",") 
	for i in range(1,len(keys)-1,1): 
		bk_device[keys[i]] = values[i]  
		
	print(f"Dang ket noi vao IP:'{values[1]}' voi Username: '{values[2]}'")	

	now = datetime.now().strftime("%Y-%b-%d_%H%M%S") # lấy ngày giờ hiện tại (thoigian)
	filename = now + "_" + values[4] + "_" + values[1] # tên file backup là: thoigian_vendor_IPAddr

	if values[4] == "cisco_ios" : 
		cisco_ios(filename) # gọi hàm backup cisco_ios đã được định nghĩa trước đó
	elif values[4] == "cisco_asa" :
		cisco_asa(filename)
	elif values[4] == "juniper_srx" :
		juniper_srx(filename)
	else:	
		print("thiet bi khac")


  • Kết Quả:


3. Netniko support những vendor nào

Chúng ta cố tình gán giá trị của device_type là abcXYZ, key KHÔNG CÓ trong hàm thư viện để chương trình sinh ra lỗi và sẽ liệt kê cho chúng ta biết netmiko hiện tại đang hỗ trợ nhưng vendor nào.

Code:
from netmiko import ConnectHandler 

R1 = { 
	"host":"192.168.0.1",
	"username":"admin",
	"password":"admin1234@r1",
	"device_type":"abcXYZ" # cố tình đưa từ sai vào
	}
	
net_connect = ConnectHandler(**R1) 

Kết quả:
C:\python>python Demo.py
Traceback (most recent call last):
  File "Demo.py", line 10, in <module>
    net_connect = ConnectHandler(**R1)
  File "C:\Program Files (x86)\Python38-32\lib\site-packages\netmiko\ssh_dispatcher.py", line 261, in ConnectHandler
    raise ValueError(
ValueError: Unsupported device_type: currently supported platforms are:
a10
accedian
alcatel_aos
alcatel_sros
apresia_aeos
arista_eos
aruba_os
avaya_ers
avaya_vsp
brocade_fastiron
brocade_netiron
brocade_nos
brocade_vdx
brocade_vyos
calix_b6
checkpoint_gaia
ciena_saos
cisco_asa
cisco_ios
cisco_nxos
cisco_s300
cisco_tp
cisco_wlc
cisco_xe
cisco_xr
cloudgenix_ion
coriant
dell_dnos9
dell_force10
dell_isilon
dell_os10
dell_os6
dell_os9
dell_powerconnect
dlink_ds
eltex
eltex_esr
endace
enterasys
extreme
extreme_ers
extreme_exos
extreme_netiron
extreme_nos
extreme_slx
extreme_vdx
extreme_vsp
extreme_wing
f5_linux
f5_ltm
f5_tmsh
flexvnf
fortinet
generic_termserver
hp_comware
hp_procurve
huawei
huawei_olt
huawei_smartax
huawei_vrpv8
ipinfusion_ocnos
juniper
juniper_junos
juniper_screenos
keymile
keymile_nos
linux
mellanox
mellanox_mlnxos
mikrotik_routeros
mikrotik_switchos
mrv_lx
mrv_optiswitch
netapp_cdot
netscaler
nokia_sros
oneaccess_oneos
ovs_linux
paloalto_panos
pluribus
quanta_mesh
rad_etx
ruckus_fastiron
ruijie_os
sophos_sfos
ubiquiti_edge
ubiquiti_edgeswitch
ubiquiti_unifiswitch
vyatta_vyos
vyos
watchguard_fireware

C:\python>


Xong!

Hy vọng sẽ giúp được các bạn trong công việc của mình.

Học Python Qua Ví Dụ #004 - String Formating & F-string/Định Dạng Chuỗi Trong Python

Yêu cầu: 
1. Sử dụng hàm format để in ra các chuỗi theo căn chỉnh lề Trái, Phải, Giữa
2. Sử dụng hàm f-string để in ra các chuỗi

Thực hiện:
1.  Sử dụng hàm format để in ra các chuỗi theo căn chỉnh lề Trái, Phải, Giữa

Ví dụ 1:
Code:
ip_addr1 = "192.168.1.1"
ip_addr2 = "172.16.0.1"
ip_addr3 = "10.0.0.1"
print()
print("-" * 60) # in 60 ký tự "-"
'''
dùng cặp dấu {} để báo là biến
các giá trị của biến trong phần format sẽ tự động đưa vào cặp dấu {} tương ứng, thứ tự từ trái sang phải.
'''
print("{}{}{}".format(ip_addr1,ip_addr2,ip_addr3))

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

C:\python>

Nhận xét: Chúng ta thấy các chuỗi được in ra liên tiếp nhau không có khoảng cách giữa các chuỗi 

Ví dụ 2:
Code:

ip_addr1 = "192.168.1.1"
ip_addr2 = "172.16.0.1"
ip_addr3 = "10.0.0.1"
ip_addr11 = "192.168.111.1"
ip_addr22 = "172.168.222.1"
ip_addr33 = "10.10.10.1"

print()
'''
- Trong cặp dấu {} có thể là chuỗi hoặc biến
- In ra chuỗi "Can le TRAI", căn lề TRÁI chuỗi và trong phạm vi 20 ký tự
- In ra chuỗi "Can GIUA", căn lề GIỮA chuỗi và trong phạm vi 20 ký tự
- In ra chuỗi "Can le PHAI", căn lề PHẢI chuỗi và trong phạm vi 20 ký tự
'''
print("{:<20}{:^20}{:>20}".format("Can le TRAI","Can GIUA","Can le PHAI"))
print("-" * 60) # in 60 ký tự "-"
print("{:<20}{:^20}{:>20}".format(ip_addr1,ip_addr2,ip_addr3))
print("{:<20}{:^20}{:>20}".format(ip_addr33,ip_addr22,ip_addr11))

Kết quả:
C:\python>python Demo.py
Can le TRAI             Can GIUA              Can le PHAI
------------------------------------------------------------
192.168.1.1              172.16.0.1                        10.0.0.1
10.10.10.1             172.168.222.1           192.168.111.1

C:\python>

2. Sử dụng hàm f-string để in ra các chuỗi

Code:
<20 an="" giua="" le="" phai=""><20 ip_addr2:="" ip_addr3:=""><20 ip_addr22:="" ip_addr33:="">ip_addr1 = "192.168.1.1"
ip_addr2 = "172.16.0.1"
ip_addr3 = "10.0.0.1"
ip_addr11 = "192.168.111.1"
ip_addr22 = "172.168.222.1"
ip_addr33 = "10.10.10.1"

print()
'''
- Trong cặp dấu {} có thể là chuỗi hoặc biến
- In ra chuỗi "Can le TRAI", căn lề TRÁI chuỗi và trong phạm vi 20 ký tự
- In ra chuỗi "Can GIUA", căn lề GIỮA chuỗi và trong phạm vi 20 ký tự
- In ra chuỗi "Can le PHAI", căn lề PHẢI chuỗi và trong phạm vi 20 ký tự
'''
print(f"{'=============== Dung F-String ===============':^60}")
print(f"{'Can le TRAI':<20}{'Can GIUA':^20}{'Can le PHAI':>20}")
print(f"{'-' * 60}") # in 60 ký tự "-"
print(f"{ip_addr1:<20}{ip_addr2:^20}{ip_addr3:>20}")
print(f"{ip_addr11:<20}{ip_addr22:^20}{ip_addr11:>20}")

Noted: Về f-string có khác format string tí đưa trực tiếp chuỗi hoặc biến vào cặp dấu {} luôn, và thêm chữ f trước cặp  {}bỏ format phía sau.

Kết quả:
C:\python>python Demo.py
       =============== Dung F-String ===============
Can le TRAI               Can GIUA                Can le PHAI
------------------------------------------------------------
192.168.1.1                 172.16.0.1                     10.0.0.1
192.168.111.1          172.168.222.1              10.10.10.1

C:\python>

Xong!

CentOS, Cài Đặt CentOS Cho Người Mới Bắt Đầu/Step by step

CentOS - Community ENTerprise Operating System là hệ điều hành mở dựa trên Linux Kennel và có nguồn gốc từ Red Hat Enterprise Linux (RHEL)

Mục đích bài lab này hướng dẫn cách cài đặt CentOS cho người chưa biết gì về CentOS (cài tích hợp Gnome GUI Desktop), và cài đặt và cho phép kết nối đến CentOS thông qua SSH service nhằm chuẩn bị cho bài lab Cài Zabbix trên CentOS.

Nội dung bài lab:

1. Download CentOS
2. Cài đặt CentOS
3. Cài đặt SSH

Thực hiện:

1. Download CentOS tại đây sau đó ghi ra đĩa, hoặc tạo USB Boot nếu cài trên máy thật, nếu trên VMware chỉ cần mount file ISO, sau đó tiến hành cài đặt.

2. Cài đặt CentOS

Chọn Install CentOS 7

Chọn ngôn ngữ muốn cài đặt, trong Lab này chúng tôi chọn English

Chọn múi giờ là Hồ Chí Minh City

Chọn phần mềm, ứng dụng cần cài đặt tích hợp khi cài CentOS, chọn Gnome Desktopchọn tất cả các mục trong phần Add-On For Select Environment

Điền vào hostname cần cài đặt, cài đặt IP Address và chọn Automatically connect to this network when it is available để đảm bảo card mạng luôn được kết nối khi host CentOS mở.

Trong mục Installation Destination chọn Automatically Configure Partitioning (vì đây là hướng dẫn cho các bạn mới bắt đầu làm quên CentOS như chúng tôi, hơn nữa đây là bài LAB để bước chuẩn bị cho lab việc cài Zabbix trên nền CentOS. Xin hẹn các bạn một chuyên đề khác chúng tôi sẽ thảo luật và nói về các phân vùng trong CentOS như: boot, root, swap, Ext4,.. )

Chọn Begin Installation để tiến hành cài đặt

Trong quá trình cài đặt chúng ta có thể cài đặt password cho user root, root là user mặc định của CentOS có quyền quản trị cao nhất.

Và chúng ta có thể tạo thêm user mới tên là Admin và thiết lập user này với quyền Administrator

CentOS yêu cầu khởi động lại để hoàn thành tiến trình cài đặt, chúng tôi chọn Reboot

Đăng nhập với user Admin và password vừa tạo, đây là Gnome Desktop trong CentOS

3. Cài đặt SSH

Vào CentOS terminal, chuyển qua user root để cài SSH server
sudo -i
sudo yum install -y openssh-server;


Khởi động SSH và đặt SSH tự động chạy khi khởi động
sudo systemctl start sshd.service
sudo systemctl enable sshd

Stop SSH server và tắt SSH tự động chạy khi khởi động (không áp dụng 2 câu lệnh này trong lab này)
sudo systemctl stop sshd
sudo systemctl disable sshd

Kiểm tra trạng thái của SSH service bằng lệnh: sudo systemctl status sshd
[root@CentOS ~]# sudo systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2020-06-13 16:12:45 +07; 12min ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 104827 (sshd)
    Tasks: 1
   CGroup: /system.slice/sshd.service
           â””─104827 /usr/sbin/sshd -D
Jun 13 16:12:45 CentOS.ForZabbix.LAB systemd[1]: Starting OpenSSH server daemon...
Jun 13 16:12:45 CentOS.ForZabbix.LAB sshd[104827]: Server listening on 0.0.0.0 port 22.
Jun 13 16:12:45 CentOS.ForZabbix.LAB sshd[104827]: Server listening on :: port 22.
Jun 13 16:12:45 CentOS.ForZabbix.LAB systemd[1]: Started OpenSSH server daemon.

đảm bảo rằng SSH đang ở trạng thái Active (running) thì chúng ta mới có thể kết nối với CentOS bằng SSH được.

HOẶC chúng ta cũng có thể dùng lệnh netstat -plntu để kiểm tra.
[root@CentOS ~]# sudo netstat -plntu | grep ':22'
tcp         0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      104827/sshd       
tcp6       0      0 :::22                           :::*                    LISTEN      104827/sshd    

hoặc
[root@CentOS ~]# sudo netstat -plntu | grep ssh
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      95540/sshd       
tcp6       0      0 :::22                   :::*                    LISTEN      95540/sshd  

Đảm bảo port 22 của SSH phải được cho phép trên firewall của CentOS, chúng ta thực hiện
sudo firewall-cmd --add-port=22/tcp --permanent
sudo firewall-cmd --reload
sudo systemctl restart sshd 

[root@CentOS ~]# sudo firewall-cmd --add-port=22/tcp --permanent
success
[root@CentOS ~]# sudo firewall-cmd --reload
success
[root@CentOS ~]# sudo systemctl restart sshd
[root@CentOS ~]# 

Xong!

Cài đặt ngày giờ trên CentOS. Tham khảo tại đây
P/s: Để tăng thêm tính bảo mật chúng ta cũng có thể thay đổi port mặc định này. Tham thảo tại đây

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!
/*header slide*/