Note: 此教學可應用在大部分的 Linux 作業系統。在執行命令時,必須要有 root 訪問權限才可以成功修改 MAC Address。
前言
在閱讀本篇文章前,可以先閱讀之前的文章,其中可以了解 MAC 位址是什麼,以及為什麼需要修改 MAC 位址,最後也有在 Linux 系統(我使用的是 Kali Linux)成功下指令將 MAC 位址進行修改。接下來我們會將指令寫成程式腳本,使得我們可以自動化的執行這些指令,只需要提供腳本介面名稱(Interface Name)以及 MAC 位址(MAC Address)即可幫你完成指令動作。
用 Python 修改 MAC 位址
開發環境
- 虛擬機:Virtaul Box
- 作業系統:Kali Linux
- IDE:PyCharm
- 語言:Python 3.8
使用模組(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 位址進行修改。
相關文章