概述

作为一名网络工程师,我有时必须验证端口上连接的设备类型或通过 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__并添加了参数selfapi

  • 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

谢谢阅读!

反馈或问题?让我知道!

Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐