[PyHack] Bài 2: Kiểm tra MAC mà người dùng đã đổi xem đúng không
Tiếp tục bài 1, sau khi ta đã viết được hàm thay đổi địa chỉ MAC trên terminal. Ta cần kiểm tra MAC hiện tại có đúng theo ý địa chỉ MAC mà người dùng chỉ định hay không.
Để làm được điều đó, đầu tiên, ta phải lấy kết quả của lệnh “ifconfig” gán vào một biến string. Sau đó, ta sẽ tìm MAC trong đống dữ liệu đó.
Lấy kết quả của lệnh ifconfig
Trong module subprocess có 1 hàm gọi là check_output
, hàm này sẽ kiểm tra lệnh của bạn và có thể gán kết quả đó cho một biến khác.
TÌm MAC
Trong lập trình, có một thuật toán gọi là Regular Expression hay còn gọi tắt là RegEx. RegEX là biểu thức chính quy được dùng để xử lý chuỗi nâng cao thông qua biểu thức riêng của nó, những biểu thức này sẽ có những nguyên tắc riêng và bạn buộc phải tuân theo nguyên tắc đó thì biểu thức của bạn mới hoạt động được.
Các bạn vào Pythex để có thể test thuật toán này online nhé. Bấm vào chữ Regular expression cheatsheet để tìm hiểu thêm các biểu thức có trong Pythex.
Các bạn copy đoạn text mà lệnh ifconfig trả ra rồi paste vào chỗ Your test string. Trên phần Your regular expression thì nhập ww:ww:ww:ww:ww:ww
Ta da! Chúng ta đã tìm được vị trí của MAC rồi đó, dễ không?
Sử dụng RegEx trong python
Thuật toán của RegEx có trong module re của python. Chúng ta dùng hàm re.search("cú pháp", biến)
Giờ chúng ta thêm lệnh if để kiểm tra xem có đọc được MAC của interface hay không.
Khi chương trình không thể đọc MAC của interface.
Làm gọn code
Chúng ta sẽ bỏ code nãy giờ vào hàm get_current_mac()
và return kết quả vào biếncurrent_mac, sau đó in nó ra. Do curret_mac là kiểu Non-type nên mình mới ép nó qua string.
Kiểm tra MAC
Sau khi lấy được địa chỉ MAC hiện tại rồi, ta sẽ đem nó so sánh với địa MAC mới mà người dùng chỉ định. Để xem xem khi thay đổi MAC thì địa chỉ MAC hiện tại có giống với địa chỉ MAC mà người dùng nhập hay không. Nếu giống nhau thì thành công, còn khác nhau thì thất bại.
Và đây là khi các bạn nhập sai interface.
Còn nhớ lỗi không thay đổi được MAC khi cặp số đầu tiên là số lẻ không? Lần trước còn xuất hiện lỗi, nhưng lần này thì hết rồi.