Python 指令碼從 MAC 地址獲取裝置廠商名稱
在網路世界中,MAC 地址在識別連線到網路的裝置方面發揮著至關重要的作用。MAC(媒體訪問控制)地址是分配給每個網路介面卡 (NIC) 或網路介面卡的唯一識別符號。它由六組兩位十六進位制數字組成,用冒號或連字元分隔。MAC 地址通常用於各種目的,包括網路管理、安全和故障排除。
在本文中,我們將探討如何建立一個 Python 指令碼,從給定的 MAC 地址檢索裝置廠商名稱。我們將探討兩種方法:使用 API 查詢 MAC 地址廠商資料庫和使用本地 MAC 廠商資料庫。透過利用 Python 的功能和相關的 API,我們可以輕鬆地自動化此過程並獲取廠商名稱。
瞭解 MAC 地址
在繼續從 MAC 地址檢索裝置廠商名稱之前,讓我們花一點時間來了解 MAC 地址在網路中的結構和意義。
MAC 地址結構
MAC 地址由 48 位(6 位元組)組成,以十六進位制表示。它通常寫成六組兩位十六進位制數字,用冒號或連字元分隔。例如,00:1A:2B:3C:4D:5E 或 00-1A-2B-3C-4D-5E。MAC 地址的前三組稱為組織唯一識別符號 (OUI),表示裝置廠商或製造商。後三組是裝置特定的識別符號。
MAC 地址的重要性
MAC 地址對於幾個網路任務至關重要,包括 −
地址解析協議 (ARP) − MAC 地址用於 ARP 過程中將 IP 地址對映到本地網路上的物理 MAC 地址。
交換和橋接 − 網路交換機和橋接使用 MAC 地址確定本地網路內資料包的目標。
DHCP − 動態主機配置協議 (DHCP) 伺服器使用 MAC 地址為網路裝置分配 IP 地址。
網路安全 − MAC 地址可用於訪問控制,根據裝置 MAC 地址允許或拒絕網路訪問。
瞭解 MAC 地址的意義有助於我們理解從 MAC 地址檢索裝置廠商名稱的重要性。它使我們能夠識別與特定 MAC 地址關聯的製造商或組織,為網路管理和故障排除提供有價值的資訊。
接下來,我們將探討兩種使用 Python 檢索裝置廠商名稱的方法。
使用 MAC 地址 API 檢索裝置廠商名稱
要從 MAC 地址檢索裝置廠商名稱,我們可以利用 MAC 地址廠商查詢 API。這些 API 提供了一個與裝置廠商關聯的 MAC 地址範圍資料庫,並允許我們使用 MAC 地址查詢資料庫。
步驟 1:安裝所需的庫
要進行 API 請求並處理響應,我們需要安裝 requests 庫。開啟您的終端或命令提示符並執行以下命令 -
pip install requests
步驟 2:匯入所需的庫
在您的 Python 指令碼中,匯入 requests 庫 −
import requests
步驟 3:發出 API 請求
我們將使用 "macaddress.io" API,它為 MAC 地址廠商查詢提供免費層。要使用此 API,請在 https://macaddress.io/ 註冊免費帳戶並獲取 API 金鑰。
mac_address = "00:1A:2B:3C:4D:5E"
api_key = "YOUR_API_KEY"
url = f"https://api.macaddress.io/v1?apiKey={api_key}&output=json&search={mac_address}"
response = requests.get(url)
將 "YOUR_API_KEY" 替換為您從 macaddress.io 獲取的實際 API 金鑰。
步驟 4:處理 API 響應
收到 API 的響應後,我們可以從 JSON 資料中提取廠商名稱 −
if response.status_code == 200:
data = response.json()
vendor_name = data["vendorDetails"]["companyName"]
print("Device Vendor Name:", vendor_name)
else:
print("Failed to retrieve device vendor name.")
確保處理 API 請求失敗或返回錯誤狀態碼的情況。
透過遵循這些步驟,您可以使用 API 檢索與 MAC 地址關聯的裝置廠商名稱。但是,值得注意的是,API 使用可能受限於速率限制或需要在免費層之外付費訂閱。
在下一節中,我們將探討使用本地 MAC 廠商資料庫的另一種方法。
使用本地 MAC 廠商資料庫
或者,您可以使用本地 MAC 廠商資料庫從 MAC 地址檢索裝置廠商名稱,而不是依賴外部 API。這種方法不需要發出 API 請求,並允許您離線執行查詢。
步驟 1:獲取本地 MAC 廠商資料庫
您可以下載和使用多個可用的開源 MAC 廠商資料庫。一個流行的選擇是 IEEE 標準協會提供的 "OUI.txt" 檔案。此檔案包含 MAC 地址字首及其關聯的廠商名稱的綜合列表。
您可以從 IEEE 標準協會網站 (https://standards.ieee.org/products-services/regauth/oui/) 下載 "OUI.txt" 檔案。確保閱讀並遵守您選擇使用的資料庫的許可條款和條件。
步驟 2:解析 MAC 廠商資料庫
獲得 MAC 廠商資料庫檔案後,您需要將其解析並載入到 Python 指令碼中。以下是如何實現此目的的示例 −
mac_database_file = "path/to/OUI.txt"
mac_vendors = {}
with open(mac_database_file, "r") as f:
for line in f:
if "(hex)" in line:
parts = line.strip().split("(hex)")
mac_prefix = parts[0].strip()
vendor_name = parts[1].strip()
mac_vendors[mac_prefix] = vendor_name
此程式碼逐行讀取 MAC 廠商資料庫檔案,提取 MAC 地址字首和關聯的廠商名稱,並將它們儲存在字典中以進行高效查詢。
步驟 3:檢索裝置廠商名稱
現在我們已載入了 MAC 廠商資料庫,我們可以使用 MAC 地址檢索裝置廠商名稱 −
mac_address = "00:1A:2B:3C:4D:5E"
mac_prefix = mac_address[:8].upper().replace(":", "")
vendor_name = mac_vendors.get(mac_prefix, "Unknown")
print("Device Vendor Name:", vendor_name)
我們提取 MAC 地址的前 6 個位元組(8 個字元),將其轉換為大寫,刪除冒號,並將其用作鍵在字典中查詢廠商名稱。如果在資料庫中找到 MAC 地址字首,我們將檢索關聯的廠商名稱。否則,我們預設為 "Unknown"。
透過遵循這些步驟,您可以使用本地 MAC 廠商資料庫從 MAC 地址檢索裝置廠商名稱。這種方法提供離線功能,並且不需要發出 API 請求。
在下一節中,我們將討論指令碼的一些注意事項和潛在改進。
注意事項和潛在改進
雖然我們開發的 Python 指令碼功能齊全,但需要牢記一些注意事項和潛在改進
資料庫更新
隨著新裝置和廠商的新增,MAC 廠商資料庫不斷發展。定期更新您的本地 MAC 廠商資料庫以確保結果準確非常重要。您可以訪問 IEEE 標準協會網站或其他可靠來源下載最新版本的資料庫。
錯誤處理
在當前實現中,如果資料庫中找不到 MAC 地址,我們將預設為 "Unknown" 作為廠商名稱。但是,最好實施適當的錯誤處理以處理 MAC 地址無效或資料庫中不存在的情況。您可以引發自定義異常或返回有意義的錯誤訊息以增強指令碼的魯棒性。
快取
如果您需要頻繁查詢 MAC 地址的廠商名稱,您可以考慮實施快取機制。這可以透過儲存先前查詢的 MAC 地址及其關聯的廠商名稱來幫助提高效能。您可以使用像 cachetools 這樣的快取庫,甚至可以使用簡單的字典來實現快取功能。
使用者輸入驗證
在接受 MAC 地址的使用者輸入時,必須驗證和清理輸入以確保其符合預期格式。您可以使用正則表示式或字串操作技術來驗證 MAC 地址格式並處理各種輸入,例如大寫、小寫或混合大小寫輸入。
錯誤日誌記錄
為了幫助進行故障排除和除錯,請考慮在指令碼中實現錯誤日誌記錄。這可以幫助捕獲指令碼執行期間發生的任何意外錯誤或異常。可以使用 Python 日誌記錄模組等工具將錯誤訊息記錄到檔案或控制檯。
在下一節中,我們將提供本文的摘要和結論。
結論
在本教程中,我們探討了如何建立一個 Python 指令碼,從 MAC 地址檢索裝置供應商名稱。我們使用 requests 庫從遠端伺服器獲取 MAC 供應商資料庫,並解析響應以根據 MAC 地址提取供應商名稱。
我們介紹了安裝所需庫的必要步驟,並逐步介紹了指令碼的實現過程。我們還討論了增強指令碼功能的考慮因素和潛在改進,例如更新資料庫、錯誤處理、快取、輸入驗證和錯誤日誌記錄。
透過利用此指令碼,您可以輕鬆檢索與 MAC 地址關聯的供應商名稱,這在各種網路相關應用程式和故障排除場景中都非常有用。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP