是否有用于从MAC地址查找供应商的PHP库?

问题描述 投票:3回答:5

我有一个来自数据库的MAC地址列表。我想查找每个MAC地址的供应商,然后最终按供应商计算网络上的设备数量。

我相信我可以用脏的方式来解析来自http://standards.ieee.org/develop/regauth/oui/oui.txt文件的供应商前缀。

但我想知道是否有更好的方法?

php mac-address vendor-prefix
5个回答
5
投票

Pear中有一个库,但它确实有很大的开销,因为供应商查找需要一个已经加载了供应商数据的关系数据库。但是,考虑到替代方案,这可能值得探讨。

http://pear.php.net/manual/en/package.networking.net-mac.php

该软件包为wireshark维护的列表提供了一个加载器:https://code.wireshark.org/review/gitweb?p=wireshark.git;a=blob_plain;f=manuf


1
投票

如果您关心的是基于mac地址获取设备的制造商,那么您只需在此网站上复制并粘贴列表(一次只能200个)。这很快:

呜呜呜.admin-toolkit.com/Mac-address-lookup-manufacturer.HTML


0
投票

我从Wireshark manuf源创建了一个SQlite(Macvendors.db)。我通过PDO使用简单的查询。

这是我写的一个方法,向您展示如何使用它:

public function getAllCompaniesFromMacs($macs)
{
    try {
        // connect to the SQLite file
        $conn = new \PDO("sqlite:/path/to/sqlite/Macvendors.db");
        $conn ->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);

        // aux vars
        $macsParaBuscar = array();
        $macsIN = "";

        // output vars
        $salida = array();

        // Clean repeated MACs and remove the ":" chars
        foreach ($macs as $unaMac) {
            $unaMac = str_replace(":", "", $unaMac);
            $firstChars = substr($unaMac, 0, 6);
            $macsParaBuscar[$firstChars] = $firstChars;
        }

        // Create a IN statment for the WHERE
        $macsIN = "( 'HOLA'";
        foreach ($macsParaBuscar as $unaMacBuscar) {
            $macsIN .= ", '" . $unaMacBuscar . "'";
        }
        $macsIN .= ")"; 

        // Prepare and execute the query
        $stm = $conn->prepare("SELECT mac, vendor FROM macvendor WHERE mac IN " . $macsIN);
        $stm->execute();

        // Put results in output var
        while( $row = $stm->fetch() ) {
            $auxMac = $row["mac"];
            $salida[$auxMac] = $row["vendor"];
        }

        return $salida;

    } catch (\Exception $e) {

        throw new \Exception("Ha ocurrido un error", 1);

    }

}

抱歉,unbeauty示例代码。

玩得开心!


0
投票

是的,这是我写的,它取决于http://macvendors.co的在线API

这是包含示例的存储库

https://github.com/samymassoud/macvendors-api


0
投票

但我想知道是否有更好的方法?

如果你可以使用像ruby这样的其他语言,那就有一个名为macvendors的宝石

无需使用外部API或通过速率限制停止。

您可以从命令行使用它:

gem install macvendors macvendors find 98:e0:d9:a5:61:eb Apple, Inc.

您可以在ruby代码中使用它:

require 'macvendors' MacVendors.setup #for the first time puts MacVendors.find("98:e0:d9:a5:61:eb")

© www.soinside.com 2019 - 2024. All rights reserved.