データベースからの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アドレスに基づいてデバイスの製造元を取得することだけである場合は、このWebサイトのリストをコピーしてここに貼り付けることができます(一度に200まで)。それは非常に速いです:
www.admin-toolkit.com/mac-address-lookup-manufacturer.html
しかし、もっと良い方法があるかどうか疑問に思っていますか?
ルビーのような他の言語を使用できる場合は、macvendorsと呼ばれる宝石があります
外部APIを使用したり、レート制限によって停止したりする必要はありません。
コマンドラインから使用できます。
gem install macvendors
macvendors find 98:e0:d9:a5:61:eb
Apple, Inc.
あなたはあなたのルビーコードでそれを使うことができます:
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に依存しない別のライブラリがありますが、CiscovendorMacs.xmlであるXMLファイルデータベースです。
パッケージはここでホストされています
はい、これは私が書いたものです。MacアドレスベンダーのWebサイトのオンラインAPIによって異なります。
これが例のあるリポジトリです