Regex cho địa chỉ mac Python

Ghi chú. Hướng dẫn sau đây hoạt động trên mọi Bản phân phối Linux, nhưng bạn sẽ cần quyền truy cập root để thực thi các lệnh hệ thống cần thiết để thay đổi Địa chỉ MAC thành công

Địa chỉ MAC là gì?

Để tìm hiểu cách thay đổi Địa chỉ MAC, điều cần thiết là tìm hiểu về Địa chỉ MAC là gì. Tất cả chúng ta đều sử dụng các thiết bị điện tử khác nhau như điện thoại thông minh, máy tính để bàn, máy tính xách tay, máy tính bảng và nhiều thiết bị khác để duyệt internet, để giải trí, trong số các tác vụ khác. Mỗi thiết bị điện tử này đều có Địa chỉ MAC riêng. MAC là viết tắt của Địa chỉ kiểm soát truy cập phương tiện. Mỗi thiết bị cần một Địa chỉ MAC để được xác định duy nhất bởi những người khác trên mạng. Ví dụ: khi bạn xem video trên Youtube, bạn gửi yêu cầu video qua thiết bị của mình và yêu cầu này được truyền qua cổng mặc định của bạn [thường là qua bộ định tuyến cho mạng gia đình riêng]. Bộ định tuyến sau đó gửi yêu cầu này đến World Wide Web và nhận được phản hồi. Bây giờ, World Wide Web [công khai] không biết bạn là ai vì thiết bị của bạn có Địa chỉ IP riêng chỉ được bộ định tuyến của bạn nhận ra, do đó, phản hồi mà bộ định tuyến nhận được sau đó sẽ được cung cấp cho bạn vì bộ định tuyến biết bạn.

Địa chỉ MAC là địa chỉ phần cứng 48 bit được mã hóa cứng trên Thẻ Giao diện Mạng [NIC] tại thời điểm sản xuất. Địa chỉ MAC còn được gọi là Địa chỉ vật lý của thiết bị. Địa chỉ MAC được sử dụng để truyền các gói trong mạng

Ví dụ: 00. 1A. 3F. F1. 4C. C6 là địa chỉ MAC. Ba octet đầu tiên [00. 1A. 3F] của địa chỉ xác định nhà sản xuất và được gọi là OUI [Mã định danh duy nhất của tổ chức]. Ba octet cuối cùng là Bộ điều khiển giao diện mạng cụ thể

Đọc thêm về NIC tại đây

Tại sao chúng ta cần thay đổi Địa chỉ MAC?

Có một số lý do khiến bạn muốn thay đổi Địa chỉ MAC của thiết bị. Hãy xem xét từng cái một

  • Tăng tính ẩn danh. Khi ở trên mạng công cộng, bạn có thể muốn thay đổi Địa chỉ MAC để ẩn danh, nếu không thì có khả năng mạng bạn đang truy cập có thể ghi lại Địa chỉ MAC của bạn và do đó để lại dấu vết
  • Mạo danh các thiết bị khác. Khi bạn muốn thực hiện một cuộc tấn công [cho mục đích thử nghiệm], việc thay đổi Địa chỉ MAC có thể hữu ích để mạo danh bất kỳ thiết bị hợp pháp nào
  • Bỏ qua bộ lọc. Nếu Địa chỉ MAC được đưa vào danh sách đen để sử dụng mạng và để khắc phục điều này là thay đổi Địa chỉ MAC và đánh lừa các bộ lọc

Làm cách nào để thay đổi Địa chỉ MAC?

Để thay đổi Địa chỉ MAC, chúng ta cần thực hiện một vài lệnh hệ thống. Bước đầu tiên là xác định giao diện có Địa chỉ MAC bạn muốn thay đổi và bạn có thể thực hiện việc này bằng lệnh sau trong Linux

dcode@dcode-pop-os:~$ ifconfig

Lệnh trên tạo ra đầu ra sau

enp0s3: flags=4163  mtu 1500
inet 10.0.2.5 netmask 255.255.255.0 broadcast 10.0.2.255
ether 08:00:27:35:21:ff txqueuelen 1000 [Ethernet]
RX packets 13962 bytes 17732985 [17.7 MB]
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7969 bytes 975852 [975.8 KB]
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Trước hết, để thay đổi Địa chỉ MAC, chúng ta cần biết tên giao diện và Địa chỉ MAC hiện có. Thông tin này có thể thu được bằng cách thực hiện lệnh ifconfig. Chúng ta có thể lấy tên giao diện và Địa chỉ MAC hiện có từ đầu ra do ifconfig tạo ra. Chẳng hạn, từ đầu ra ở trên, enp0s3 là tên của giao diện và trường ether trên dòng thứ ba có Địa chỉ MAC [08. 00. 27. 35. 21. ff trong trường hợp của chúng tôi]

Bây giờ chúng ta đã biết tên giao diện có Địa chỉ MAC mà chúng ta muốn thay đổi, chúng ta có thể chuyển sang lệnh tiếp theo

dcode@dcode-pop-os:~$ sudo ifconfig enp0s3 down

Lệnh trên khi được thực thi sẽ đưa giao diện xuống. Điều đó có nghĩa là bạn sẽ không thể kết nối với internet nữa. Trước tiên, chúng ta cần gỡ giao diện xuống [vô hiệu hóa nó] nếu chúng ta cần thay đổi Địa chỉ MAC. Sau đó, lệnh tiếp theo được thực thi sẽ thay đổi Địa chỉ MAC

dcode@dcode-pop-os:~$ sudo ifconfig enps03 hw ether 00:11:22:33:44:55

Lệnh trên thay đổi Địa chỉ MAC hiện có [08. 00. 27. 35. 21. FF] sang Địa chỉ MAC mới [00. 11. 22. 33. 44. 55] được chỉ định trong chính lệnh. Bây giờ Địa chỉ MAC của giao diện enp0s3 đã được thay đổi nhưng để sử dụng nó, chúng ta cần kích hoạt lại giao diện bằng lệnh sau

dcode@dcode-pop-os:~$ sudo ifconfig enp0s3 up

Sau khi thực hiện lệnh trên, bạn kích hoạt lại giao diện để có thể truy cập internet. Để kiểm tra xem Địa chỉ MAC có bị thay đổi thành những gì chúng tôi đã chỉ định hay không, hãy thực hiện lệnh ifconfig

dcode@dcode-pop-os:~$ ifconfig
enp0s3: flags=4163 mtu 1500
inet 10.0.2.5 netmask 255.255.255.0 broadcast 10.0.2.255
ether 00:11:22:33:44:55 txqueuelen 1000 [Ethernet]
RX packets 13997 bytes 17737735 [17.7 MB]
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8892 bytes 1059117 [1.0 MB]
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Từ đầu ra, chúng ta có thể thấy rằng Địa chỉ MAC đã được thay đổi thành 00. 11. 22. 33. 44. 55 từ 08. 00. 27. 35. 21. ff

Sử dụng Python để thay đổi địa chỉ MAC

Cho đến bây giờ, chúng tôi đã nhập các lệnh và thực thi chúng theo cách thủ công nhưng chúng tôi có thể tự động hóa toàn bộ quy trình bằng Python để chúng tôi chỉ cần cung cấp tập lệnh với tên giao diện và Địa chỉ MAC mới

Mô-đun được sử dụng

  • quy trình con
  • argparse
  • lại

Mô-đun quy trình con được sử dụng để thực thi các lệnh hệ thống bằng Python. Nó chứa một số chức năng có thể được sử dụng. Chúng ta sẽ tập trung vào một chức năng cụ thể được sử dụng để thực thi các lệnh hệ thống. Nó được gọi là hàm call[]

Cách sử dụng

subprocess.call[[‘ifconfig’]]

Hướng dẫn này thực thi lệnh ifconfig bằng Python

Mô-đun argparse giúp viết các giao diện dòng lệnh thân thiện với người dùng một cách thuận tiện. Chương trình xác định các đối số mà nó yêu cầu và argparse sẽ tìm ra cách phân tích các đối số này. Nó cũng tạo các thông báo trợ giúp và sử dụng cũng như đưa ra các lỗi khi người dùng nhập bất kỳ đối số không hợp lệ nào

Cách sử dụng

dcode@dcode-pop-os:~$ python3 programs_name.py -op1 option -op2 option

Với sự trợ giúp của argparse, chúng tôi có thể cung cấp cho người dùng khả năng chuyển các giá trị đầu vào bằng các đối số dòng lệnh. Ngay cả khi bạn không hiểu bây giờ, nó sẽ rõ ràng khi chúng ta bắt đầu viết mã 😃

Tiếp theo, mô-đun re cung cấp các hoạt động đối sánh Biểu thức chính quy. Bạn sẽ biết những gì chúng tôi sử dụng mô-đun lại khi chúng tôi tiến lên phía trước

Mã hóa tập lệnh Python

Đây là nơi chúng tôi bắt đầu viết mã bằng Python

Bước 1. Nhập các mô-đun đã thảo luận ở trên

Nhập các mô-đun cần thiết

Bước 2. Triển khai chức năng cho phép người dùng truyền đối số dòng lệnh

Để thêm tính năng này vào tập lệnh của chúng tôi, chúng tôi sẽ cần sử dụng mô-đun argparse mà chúng tôi đã nhập ở Bước 1

Thêm chức năng đối số dòng lệnh

Đoạn mã trên cho phép người dùng cung cấp đầu vào cho giá trị giao diện và Địa chỉ MAC mới như sau

________số 8

HOẶC LÀ

dcode@dcode-pop-os:~$ python3 mac_changer.py --interface interface_name --mac new_mac_address

interface_name = Tên của giao diện có Địa chỉ MAC bạn muốn thay đổi

new_mac_address=Địa chỉ MAC mà bạn muốn thay thế cho địa chỉ cũ

Các tùy chọn lưu trữ các giá trị do người dùng cung cấp. Khi bạn in nó ra kết quả như sau

enp0s3: flags=4163  mtu 1500
inet 10.0.2.5 netmask 255.255.255.0 broadcast 10.0.2.255
ether 08:00:27:35:21:ff txqueuelen 1000 [Ethernet]
RX packets 13962 bytes 17732985 [17.7 MB]
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7969 bytes 975852 [975.8 KB]
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
0

Truy cập riêng lẻ hai đối số được thực hiện như sau

enp0s3: flags=4163  mtu 1500
inet 10.0.2.5 netmask 255.255.255.0 broadcast 10.0.2.255
ether 08:00:27:35:21:ff txqueuelen 1000 [Ethernet]
RX packets 13962 bytes 17732985 [17.7 MB]
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7969 bytes 975852 [975.8 KB]
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
1

Ghi chú. Đối số dest trong phương thức add_argument[] cung cấp tên theo đó parse_args[] lưu trữ các giá trị tương ứng của nó trong biến tùy chọn

Điều cuối cùng trong Bước 2 là chúng ta đã tạo một biến command_args và gọi hàm get_args[]

enp0s3: flags=4163  mtu 1500
inet 10.0.2.5 netmask 255.255.255.0 broadcast 10.0.2.255
ether 08:00:27:35:21:ff txqueuelen 1000 [Ethernet]
RX packets 13962 bytes 17732985 [17.7 MB]
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7969 bytes 975852 [975.8 KB]
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
2

Câu lệnh trên sẽ lưu trữ các tùy chọn được trả về bởi get_args[] do đó cho phép chúng ta truy cập vào các giá trị đối số bên ngoài phạm vi của hàm

Bước 3. Viết hàm thay đổi địa chỉ MAC

Bây giờ chúng ta có hai giá trị mà chúng ta cần để thay đổi Địa chỉ MAC [giao diện và Địa chỉ MAC mới], chúng ta sẽ viết một hàm thay đổi Địa chỉ MAC bằng các lệnh hệ thống

Viết hàm thay đổi địa chỉ MAC

Hãy nhìn vào hàm mà chúng ta vừa viết, nó nhận 2 đối số [interface và new_mac]. Hai giá trị được cung cấp cho hàm change_mac[] bởi biến command_args. Nó cũng kiểm tra xem Địa chỉ MAC được cung cấp có hợp lệ hay không. Sau đó, sử dụng mô-đun quy trình con, chúng tôi thực hiện các lệnh hệ thống. Ghi chú. Bạn yêu cầu quyền truy cập root để thực hiện các lệnh này

Bây giờ, tại thời điểm này, chúng tôi đã hoàn thành một tập lệnh Python thay đổi Địa chỉ MAC, nhưng chúng tôi vẫn cần đảm bảo rằng Địa chỉ MAC mới đã được áp dụng. Và để làm được điều đó, chúng ta cần viết một hàm khác trả về Địa chỉ MAC hiện tại của giao diện

Bước 4. Viết hàm lấy địa chỉ MAC hiện tại

Hàm này lấy giao diện làm đầu vào và trả về Địa chỉ MAC hiện tại của giao diện đó. Chúng tôi đang viết chức năng này để kiểm tra xem địa chỉ MAC mới đã được áp dụng hay chưa

Viết hàm lấy địa chỉ MAC

Vì vậy, hàm get_current_mac[] trích xuất Địa chỉ MAC hiện tại của giao diện được cung cấp. Bây giờ, hãy phá vỡ chức năng này

enp0s3: flags=4163  mtu 1500
inet 10.0.2.5 netmask 255.255.255.0 broadcast 10.0.2.255
ether 08:00:27:35:21:ff txqueuelen 1000 [Ethernet]
RX packets 13962 bytes 17732985 [17.7 MB]
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7969 bytes 975852 [975.8 KB]
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
3

Câu lệnh trên tương tự như sub. call[] trong hàm change_mac[] nhưng có một điểm khác biệt. phụ. Các hàm check_output[] trả về đầu ra của lệnh trong khi các hàm phụ. call[] không trả lại bất cứ thứ gì. Đầu ra trả về được lưu trữ trong đầu ra biến

Ngoài ra, đối số universal_newlines = True được sử dụng vì nếu giá trị này được đặt thành Sai thì đầu ra được trả về tính bằng byte

Tài liệu chính thức -> Theo mặc định, chức năng này sẽ trả về dữ liệu dưới dạng byte được mã hóa. Mã hóa thực tế của dữ liệu đầu ra có thể phụ thuộc vào lệnh được gọi, do đó, việc giải mã thành văn bản thường sẽ cần được xử lý ở cấp ứng dụng. Hành vi này có thể bị ghi đè bằng cách đặt universal_newlines thành True

Tuyên bố tiếp theo là,

enp0s3: flags=4163  mtu 1500
inet 10.0.2.5 netmask 255.255.255.0 broadcast 10.0.2.255
ether 08:00:27:35:21:ff txqueuelen 1000 [Ethernet]
RX packets 13962 bytes 17732985 [17.7 MB]
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7969 bytes 975852 [975.8 KB]
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
4

Đây là nơi mô-đun re đang được sử dụng. lại là viết tắt của Biểu thức chính quy và chúng thường được sử dụng trong các ứng dụng khớp chuỗi. Ở đó. hàm search[] chấp nhận biểu thức chính quy và chuỗi trong đó mẫu được cho là khớp. Trong trường hợp của chúng tôi, chuỗi được lưu trữ bên trong biến đầu ra. \w\w. \w\w. \w\w. \w\w. \w\w. Biểu thức \w\w khớp với Địa chỉ MAC trong biến đầu ra có đầu ra của lệnh ifconfig. Xem hình bên dưới để hiểu rõ hơn

Trình diễn Regex

Như bạn có thể thấy rằng biểu thức chính quy khớp hoàn hảo với Địa chỉ MAC [Được đánh dấu bằng màu xanh lá cây trong hộp Kết quả khớp]. Bảng biểu thức chính quy

Hơn nữa, có những cơ hội mà tái. search[] có thể tìm thấy nhiều chuỗi khớp với biểu thức chính quy [biểu thức chính quy]. Do đó, câu lệnh dưới đây sẽ đảm bảo chỉ trả về phần tử được so khớp đầu tiên. Điều gì xảy ra nếu nó khớp với nhiều hơn một chuỗi và trả về chuỗi không mong muốn?

enp0s3: flags=4163  mtu 1500
inet 10.0.2.5 netmask 255.255.255.0 broadcast 10.0.2.255
ether 08:00:27:35:21:ff txqueuelen 1000 [Ethernet]
RX packets 13962 bytes 17732985 [17.7 MB]
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7969 bytes 975852 [975.8 KB]
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
5

Điều này tổng hợp hàm get_current_mac[]

Bây giờ, điều duy nhất còn lại là kiểm tra xem Địa chỉ MAC do người dùng cung cấp đã được áp dụng hay chưa. Đối với điều này, bạn có thể thấy rằng chúng tôi đã gọi hàm get_current_mac[] hai lần, một lần trước khi gọi hàm change_mac[] và một lần sau khi gọi hàm change_mac[]. Điều này đảm bảo rằng chúng tôi nắm bắt cả Địa chỉ MAC [trước và sau khi thay đổi]. Sau đó, chúng tôi so sánh chang_mac và command_args. new_mac và nếu cả hai khớp thì Địa chỉ MAC đã được thay đổi thành công

Làm cách nào để xác thực địa chỉ MAC bằng biểu thức chính quy trong Python?

regex = “^[[0-9A-Fa-f]{2}[. -]]{5}[[0-9A-Fa-f]{2}]. [[0-9a-fA-F]{4}\\. .
Ở đâu. .
Khớp chuỗi đã cho với Biểu thức chính quy. .
Trả về true nếu chuỗi khớp với biểu thức chính quy đã cho, ngược lại trả về false

D+ trong regex Python là gì?

Cái này đang làm gì vậy? . Vì vậy, \D+ khớp với một hoặc nhiều ký tự không phải là chữ số . Đây là những gì chúng tôi đang sử dụng thay cho dấu gạch nối theo nghĩa đen, để cố gắng khớp các dấu phân cách khác nhau.

\b trong regex Python là gì?

Bên trong một phạm vi ký tự, \b đại diện cho ký tự xóa lùi , để tương thích với chuỗi ký tự của Python. Khớp với chuỗi trống, nhưng chỉ khi nó không ở đầu hoặc cuối của một từ.

Điều này có nghĩa là gì trong regex [[ ]]\ 1?

Tham chiếu ngược \1 [dấu gạch chéo ngược một] tham chiếu nhóm chụp đầu tiên . \1 khớp chính xác cùng một văn bản được khớp bởi nhóm chụp đầu tiên. / trước nó là một ký tự chữ. Nó chỉ đơn giản là dấu gạch chéo về phía trước trong thẻ HTML đóng mà chúng tôi đang cố khớp.

Chủ Đề