2012-07-12 33 views
3

我有一個來自數據庫的MAC地址列表。我希望查找每個MAC地址的供應商,然後最終在供應商網絡上統計設備數量。是否有一個從MAC地址查找供應商的PHP庫?

我相信我可以做到這一點的骯髒的方式,將解析從這裏可用的文件供應商前綴http://standards.ieee.org/develop/regauth/oui/oui.txt

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

+1

爲什麼你要使用查找時web服務你可以用本地的方式(一旦你下載了這個文件......)更快地做到這一點? – 2012-07-12 18:17:06

+0

@MarcB - 呃....我沒有說我想使用網絡服務。 – devcoder 2012-07-12 18:23:12

+0

您打算將該文件中的數據添加到數據庫嗎?如果您找不到一個庫,那麼通過查詢進行計數可能會很好。 – ghbarratt 2012-07-12 18:29:53

回答

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示例代碼。

玩得開心!

1

如果你所關心的是根據mac地址獲取設備的製造商,那麼你可以在這裏簡單地複製和粘貼這個網站上的列表(一次200個)。做法很簡單:

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

+0

網站is offline ... – Anfuca 2017-02-17 10:48:04

0

但我不知道是否有更好的辦法?

如果可以使用其他語言,如紅寶石,有一個名爲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")