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

时间:2012-07-12 18:15:02

标签: php mac-address vendor-prefix

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

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

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

5 个答案:

答案 0 :(得分: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 :(得分:1)

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

www.admin-toolkit.com/mac-address-lookup-manufacturer.html

答案 2 :(得分: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示例代码感到抱歉。

玩得开心!

答案 3 :(得分:0)

这是我写的,这取决于http://macvendors.co

的在线API

这是包含示例的存储库

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

答案 4 :(得分: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")