/*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===*/

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!

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*/