This patch assumes that nmap package is installed and MAC->Vendor translation is done based on file /usr/local/share/nmap/nmap-mac-prefixes. If this package is not installed and the file does not exist then nothing breaks, you just still see MAC-addresses.
Sorry, can't push it to rcs.pfsense.org as port 22 is blocked for me and it seems you do not support git-push over http(s).
diff --git a/etc/inc/pfsense-utils.inc b/etc/inc/pfsense-utils.inc
index 5d1bbc3..b277632 100644
--- a/etc/inc/pfsense-utils.inc
+++ b/etc/inc/pfsense-utils.inc
@@ -2121,4 +2121,28 @@ function filter_rules_compare($a, $b) {
return compare_interface_friendly_names($a['interface'], $b['interface']);
}
+/****f* pfsense-utils/load_mac_manufacturer_table
+ * NAME
+ * load_mac_manufacturer_table
+ * INPUTS
+ * none
+ * RESULT
+ * returns associative array with MAC-Manufacturer pairs
+ ******/
+function load_mac_manufacturer_table() {
+ /* load MAC-Manufacture data from the file */
+ $macs=file("/usr/local/share/nmap/nmap-mac-prefixes");
+ if ($macs){
+ foreach ($macs as $line){
+ if (preg_match('/([0-9A-Fa-f]{6}) (.*)$/', $line, $matches)){
+ /* store values like this $mac_man['000C29']='VMware' */
+ $mac_man["$matches[1]"]=$matches[2];
+ }
+ }
+ return $mac_man;
+ } else
+ return -1;
+
+}
+
?>
diff --git a/usr/local/www/diag_arp.php b/usr/local/www/diag_arp.php
index 8a39d3a..46a376b 100755
--- a/usr/local/www/diag_arp.php
+++ b/usr/local/www/diag_arp.php
@@ -283,6 +283,8 @@ foreach ($data as &$entry) {
// Sort the data alpha first
$data = msort($data, "dnsresolve");
+// Load MAC-Manufacturer table
+$mac_man = load_mac_manufacturer_table();
?>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
@@ -298,7 +300,13 @@ $data = msort($data, "dnsresolve");
<?php foreach ($data as $entry): ?>
<tr>
<td class="listlr"><?=$entry['ip'];?></td>
- <td class="listr"><?=$entry['mac'];?></td>
+ <td class="listr">
+ <?php
+ $mac=$entry['mac'];
+ $mac_hi = strtoupper($mac[0] . $mac[1] . $mac[3] . $mac[4] . $mac[6] . $mac[7]);
+ if(isset($mac_man[$mac_hi])){ print "<span title=\"$mac\">{$mac_man[$mac_hi]}</span>"; }
+ else{ print $mac; }
+ ?>
<td class="listr">
<?php
echo str_replace("Z_ ", "", $entry['dnsresolve']);
diff --git a/usr/local/www/status_dhcp_leases.php b/usr/local/www/status_dhcp_leases.php
index 896b1af..915e6f1 100755
--- a/usr/local/www/status_dhcp_leases.php
+++ b/usr/local/www/status_dhcp_leases.php
@@ -320,6 +320,8 @@ foreach ($pools as $data) {
<td class="listhdrr"><a href="#"><?=gettext("Lease Type"); ?></a></td>
</tr>
<?php
+// Load MAC-Manufacturer table
+$mac_man = load_mac_manufacturer_table();
foreach ($leases as $data) {
if (($data['act'] == "active") || ($data['act'] == "static") || ($_GET['all'] == 1)) {
if ($data['act'] != "active" && $data['act'] != "static") {
@@ -353,10 +355,20 @@ foreach ($leases as $data) {
}
echo "<tr>\n";
echo "<td class=\"listlr\">{$fspans}{$data['ip']}{$fspane} </td>\n";
+ $mac=$data['mac'];
+ $mac_hi = strtoupper($mac[0] . $mac[1] . $mac[3] . $mac[4] . $mac[6] . $mac[7]);
if ($data['online'] != "online") {
- echo "<td class=\"listr\">{$fspans}<a href=\"services_wol.php?if={$data['if']}&mac={$data['mac']}\" title=\"" . gettext("send Wake on LAN packet to this MAC address") ."\">{$data['mac']}</a>{$fspane} </td>\n";
- } else {
- echo "<td class=\"listr\">{$fspans}{$data['mac']}{$fspane} </td>\n";
+ if(isset($mac_man[$mac_hi])){ // Manufacturer for this MAC is defined
+ echo "<td class=\"listr\">{$fspans}<a href=\"services_wol.php?if={$data['if']}&mac=$mac\" title=\"" . gettext("$mac - send Wake on LAN packet to this MAC address") ."\">{$mac_man[$mac_hi]}</a>{$fspane} </td>\n";
+ }else{
+ echo "<td class=\"listr\">{$fspans}<a href=\"services_wol.php?if={$data['if']}&mac={$data['mac']}\" title=\"" . gettext("send Wake on LAN packet to this MAC address") ."\">{$data['mac']}</a>{$fspane} </td>\n";
+ }
+ }else{
+ if(isset($mac_man[$mac_hi])){ // Manufacturer for this MAC is defined
+ echo "<td class=\"listr\">{$fspans}<span title=\"$mac\">{$mac_man[$mac_hi]}</span>{$fspane} </td>\n";
+ }else{
+ echo "<td class=\"listr\">{$fspans}{$data['mac']}{$fspane} </td>\n";
+ }
}
echo "<td class=\"listr\">{$fspans}" . htmlentities($data['hostname']) . "{$fspane} </td>\n";
if ($data['type'] != "static") {
diff --git a/usr/local/www/status_interfaces.php b/usr/local/www/status_interfaces.php
index d6fdced..519d53a 100755
--- a/usr/local/www/status_interfaces.php
+++ b/usr/local/www/status_interfaces.php
@@ -68,6 +68,8 @@ include("head.inc");
$ifdescrs = get_configured_interface_with_descr(false, true);
foreach ($ifdescrs as $ifdescr => $ifname):
$ifinfo = get_interface_info($ifdescr);
+ // Load MAC-Manufacturer table
+ $mac_man = load_mac_manufacturer_table();
?>
<?php if ($i): ?>
<tr>
@@ -160,7 +162,12 @@ include("head.inc");
<tr>
<td width="22%" class="vncellt"><?=gettext("MAC address");?></td>
<td width="78%" class="listr">
- <?=htmlspecialchars($ifinfo['macaddr']);?>
+ <?php
+ $mac=$ifinfo['macaddr'];
+ $mac_hi = strtoupper($mac[0] . $mac[1] . $mac[3] . $mac[4] . $mac[6] . $mac[7]);
+ if(isset($mac_man[$mac_hi])){ print "<span title=\"$mac\">" . htmlspecialchars($mac_man[$mac_hi]); print "</span>"; }
+ else {print htmlspecialchars($mac);}
+ ?>
</td>
</tr>
<?php endif; if ($ifinfo['status'] != "down"): ?>