使用 Python(和 API)查找 MAC 地址
概述
作为一名网络工程师,我有时必须验证端口上连接的设备类型或通过 ARP 在防火墙上注册的设备类型。有一个方便的 MAC 地址可能出于多种原因很有用,但就我而言,拥有一个 MAC 地址非常适合网络故障排除。
我将向您介绍我的 Python 脚本,该脚本将 MAC 地址发送到 API,响应将是该地址的供应商。所以让我们创建脚本,这样我们就不必打开浏览器并在网络上搜索它。🧑u200d💻
MAC地址是什么?
MAC 地址在 IEEE(电气和电子工程师协会)注册。 MAC 地址的前缀是唯一标识供应商、制造商或其他组织的数字。
维基百科:
_媒体访问控制地址(MAC 地址)是分配给网络接口控制器 (NIC) 的唯一标识符,用作网段内通信中的网络地址。 MAC 地址主要由设备制造商分配,因此通常称为烧录地址,或称为以太网硬件地址、硬件地址或物理地址。
因此,如果您有连接到 Internet 的设备,则网络接口卡已向 IEEE 注册。
这是供应商的列表。
http://standards-oui.ieee.org/oui/oui.txt
要求
-
Python 3
-
请求 - Python 库
-
一个 API - Macvendors.com - 这个 API 是免费的,不需要注册。
让我们编码吧!
让我们从导入我们的库开始。
import sys
from requests import get
进入全屏模式 退出全屏模式
现在让我们创建一个类,因为面向对象编程很酷。 😎
class Macpyoui:
def __init__(self, api):
self.api = api
site = "https://api.macvendors.com/"
data = Macpyoui(site)
macaddress = input("Please enter the MAC address: ")
进入全屏模式 退出全屏模式
让我们分解类,看看我们做了什么:
-
创建了一个名为
Macpyoui的类。这将允许我们调用我们的信息。 -
创建了一个方法
__init__并添加了参数self和api。 -
将
self.api分配为api。
您还将看到我添加了一些变量。
-
site- 这是我们将发送 MAC 地址的网站。 -
data- 这里我们创建一个名为 data 的变量并将参数site分配给类Macpyoui。这将允许我在函数中调用它。 -
macaddress- 我们在这里创建一个名为macaddress的变量,然后我们使用input函数询问运行脚本的人 MAC 地址是什么,然后我们在其中添加询问 MAC 地址的字符串。
现在让我们定义我们的函数:
def searchmac():
macsend = data.api + macaddress
vendorsearch = get(macsend).text
if "Not Found" in vendorsearch:
print("MAC address not found.")
elif len(sys.argv) == 1:
print("No MAC address entered.")
else:
print(vendorsearch)
进入全屏模式 退出全屏模式
分解功能。
def searchmac():
进入全屏模式 退出全屏模式
- 这里我们创建我们的函数
searchmac
macsend = data.api + macaddress
进入全屏模式 退出全屏模式
-
然后我们创建一个名为
macsend的变量。 -
我们分配
data.api + macaddress。 -
在作业中,我们使用
data.api请求网站。 -
data.api中的data是被调用的类Macpyoui并且.api正在请求类中的网站。至于macaddress,这是用户提供的,然后我们结合+。所以写出来它看起来像https://api.macvendors.com/+mac address
vendorsearch = get(macsend).text
进入全屏模式 退出全屏模式
- 这里我们指定
vendorsearch使用get请求,并在参数macsend下发送 MAC 地址。我们确保将其转换为最后带有.text的简单文本。
if "Not Found" in vendorsearch:
print("MAC address not found.")
elif len(sys.argv) == 1:
print("No MAC address entered.")
else:
print(vendorsearch)
进入全屏模式 退出全屏模式
- 对于函数的最后一部分,我们做一些
if语句来查看输入了什么信息。
if "Not Found" in vendorsearch:
print("MAC address not found.")
进入全屏模式 退出全屏模式
- 如果 API 响应
Not Found,我们打印出MAC address not found。
elif len(sys.argv) == 1:
print("No MAC address entered.")
进入全屏模式 退出全屏模式
-如果用户没有输入MAC地址,我们打印出_No MAC address entered_。
else:
print(vendorsearch)
进入全屏模式 退出全屏模式
- 如果来自网站的响应不是前两个 if 语句之一,它会打印响应。
最后,让我们在底部添加我们的 main 方法。这使我们成为一个 10 倍的编码器。
if __name__ == "__main__":
searchmac()
进入全屏模式 退出全屏模式
而已!我们不需要太多来运行我们的简单检查。
[
](https://res.cloudinary.com/practicaldev/image/fetch/s--sUb9ZFUy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to- uploads.s3.amazonaws.com/uploads/articles/dvobbay92qjoudx5ryif.jpg)
让我们测试一下!
搜索成功
~ ❯ python3 macpy.py
Please enter the MAC address: F4BD9E
Cisco Systems, Inc
进入全屏模式 退出全屏模式
搜索失败
~ ❯ python3 macpy.py
Please enter the MAC address:
MAC address not found.
进入全屏模式 退出全屏模式
缺少条目
~ ❯ python3 macpy.py
Please enter the MAC address:
No MAC address entered
进入全屏模式 退出全屏模式
这是完整的代码:
import sys
from requests import get
__version__ = "1.0"
class Macpyoui:
def __init__(self, api):
self.api = api
site = "https://api.macvendors.com/"
data = Macpyoui(site)
macaddress = input("Please enter the MAC address: ")
def searchmac():
macsend = data.api + macaddress
vendorsearch = get(macsend).text
if "Not Found" in vendorsearch:
print("MAC address not found.")
elif len(sys.argv) == 1:
print("No MAC address entered.")
else:
print(vendorsearch)
if __name__ == "__main__":
searchmac()
进入全屏模式 退出全屏模式
查看 GitHub 上的代码。
https://github.com/applericky/macpy
谢谢阅读!
反馈或问题?让我知道!
更多推荐

所有评论(0)