MAC Changer (二): 使用 Python 修改 MAC 位址

Note: 此教學可應用在大部分的 Linux 作業系統。在執行命令時,必須要有 root 訪問權限才可以成功修改 MAC Address。

前言

在閱讀本篇文章前,可以先閱讀之前的文章,其中可以了解 MAC 位址是什麼,以及為什麼需要修改 MAC 位址,最後也有在 Linux 系統(我使用的是 Kali Linux)成功下指令將 MAC 位址進行修改。接下來我們會將指令寫成程式腳本,使得我們可以自動化的執行這些指令,只需要提供腳本介面名稱(Interface Name)以及 MAC 位址(MAC Address)即可幫你完成指令動作。

用 Python 修改 MAC 位址

開發環境

使用模組(Python 模組)

subprocess 使用方法

subprocess 模組可使 Python 執行系統命令。它包含幾個可以使用的功能,詳情請參考官方文件。我們在這邊將使用執行系統命令的功能。它稱為 call() 函數(Function)。

import subprocess  # 引入subprocess函式庫

subprocess.call(['ifconfig'])

該指令使用 Python 執行 ifconfig 命令,執行結果可以看下圖,可以看到其結果與直接在終端機(Terminal)執行 ifconfig 會得到一樣的結果。

optparse 使用方法

optparse 是一個靈活且功能強大的函式庫,用於解析命令行選項。可以使用 optparse 函式庫去解析程式所定義的參數,並且還會生成幫助(Help)及用法訊息。以下範例引入了 optparse 函式庫,並且設置了兩個所需的參數 interface 和 mac。add_option 用來加入選項,dest 是儲存的變數,help是幫助提示。

# mac_changer.py使用optparse片段程式

import optparse  # 引入optparse函式庫

parser = optparse.OptionParser()
parser.add_option("-i", "--interface", dest="interface", help="Interface to change its MAC address")
parser.add_option("-m", "--mac", dest="new_mac", help="New MAC address")
(options, arguments) = parser.parse_args()

完成了上面程式後,打開終端機並到該程式的目錄下面,我們將從終端機(Terminal)下指令執行程式,如下(在此執行 help 指令):

root@kali:~# python mac_changer.py -help

實作

以下為完整程式碼:

在上述程式中,我們將功能拆解成兩部分,分別使用兩個函式(Function)實作。

get_arguments() 函式實作了允許使用者傳遞命令行參數的功能,為了實作此函式內容,我們需要將 optparse 模組導入使用。而在 optparse 使用方法中,我們有嘗試輸入 help 指令,可以看到一些指令資訊。此程式碼允許使用者提供介面名稱(Interface Name)和新 MAC 位址(MAC Address)的輸入,如下所示:

root@kali:~# python3 mac_changer.py -i interface_name -m new_mac_address

interface_name = 將要更改其 MAC 位址的介面的名稱。

new_mac_address = 新的 MAC 位址,將要用來替換舊的 MAC 位址。

在 get_arguments() 函式中,參數 options 儲存了用戶提供的值。可以試著在程式中加入 print,將參數試著印出來,並觀察其值:

print(options)

Output: 
Namespace(interface='eth0', new_mac='00:11:22:33:44:66')

若要分別 print 兩個參數可以參考以下方法:

print(options.interface)
print(options.new_mac)

Output: 
eth0
00:11:22:33:44:55

備註: add_argument() 方法中的 dest 參數提供了名稱,parse_args() 會根據該名稱將其對應的值儲存在options 變量中。

change_mac(interface, new_mac) 函式實作了更改 MAC 位址的功能,為了實作此功能,們需要將 subprocess 模組導入使用。

看一下編寫的函式,它接受兩個參數(interface 和 new_mac)。這兩個值由 options 變量提供給change_mac() 函數。注意:可能會需要 root 用戶訪問權限才能執行這些命令,目前程式中未使用 sudo 指令。

以上我們已經完成了更改 MAC 位址的 Python 腳本,下圖直接執行一次程式。

首先先在終端機(Terminal)輸入 ifconfig 指令,觀察到 eth0 介面目前的 MAC 位址是 00:11:33:44:55:66。現在我們要將 eth0 介面的 MAC 位址修改為 00:11:22:33:44:66,可以透過以下指令執行:

root@kali:~# python mac_changer.py -i eth0 -m 00:11:22:33:44:66

最後,將得到我們想要的結果。

程式連結:Github

結語

本篇文章實現使用 Python 修改 MAC 位址,簡單敘述使用到的 Python 模組,最後過測試也成功將 MAC 位址進行修改。

相關文章

Leave a Reply

發佈留言必須填寫的電子郵件地址不會公開。