我有一个来自数据库的 MAC 地址列表。我想查找每个 MAC 地址的供应商,然后最终按供应商计算网络上的设备数量。
我相信我可以做到这一点,即从http://standards.ieee.org/develop/regauth/oui/oui.txt提供的文件中解析供应商前缀。
但我想知道是否有更好的方法?
我有一个来自数据库的 MAC 地址列表。我想查找每个 MAC 地址的供应商,然后最终按供应商计算网络上的设备数量。
我相信我可以做到这一点,即从http://standards.ieee.org/develop/regauth/oui/oui.txt提供的文件中解析供应商前缀。
但我想知道是否有更好的方法?
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
如果您只关心根据 mac 地址获取设备制造商,那么您只需在此处复制并粘贴此网站上的列表(一次最多 200 个)。它非常快:
www.admin-toolkit.com/mac-address-lookup-manufacturer.html
但我想知道是否有更好的方法?
如果您可以使用其他语言,例如 ruby,则有一个名为macvendors的 gem
无需使用外部 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")
我从 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);
}
}
对不起,不漂亮的示例代码。
玩得开心!
还有另一个库不依赖于任何 API,而是 XML 文件数据库,即Cisco vendorMacs.xml
包托管在这里
是的,这是我写的,它取决于Mac地址供应商网站的在线API
这是带有示例的存储库