* new oui importer using IEEE csv for MA-L+M+S * schema update for new vendor table * change vendor to manufacturer because Device has a vendor field * remove oui from manuf table, and update node oui after manuf update * faster way to bulk update node oui * switch from using oui table to manufacturer table for vendor lookup * some other oui cleanup * faster/scalable way to join a macaddr to manuf table * remove device.oui support * update node oui in bulk at end of macsuck run * correct literal sql instead of bind * more efficient to get oui base for each mac * comment better the base lookup in macsuck
189 lines
7.8 KiB
Plaintext
189 lines
7.8 KiB
Plaintext
[% USE Number.Format %]
|
|
[% PROCESS 'externallinks.tt' -%]
|
|
<table id="nsbm-data-table" class="table table-bordered table-hover" width="100%" cellspacing="0">
|
|
<thead>
|
|
<tr>
|
|
<th>MAC</th>
|
|
<th>Match</th>
|
|
<th class="nd_center-cell">Device or Node</th>
|
|
[% IF params.stamps %]
|
|
<th>First Seen</th>
|
|
<th>Last Seen</th>
|
|
[% END %]
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
[% WHILE (row = ips.next) %]
|
|
<tr>
|
|
<td>
|
|
MAC <a href="[% search_node | none %]&q=[% row.net_mac.$mac_format_call | uri %]">
|
|
[% row.net_mac.$mac_format_call | html_entity %]</a>
|
|
[% IF params.show_vendor %]
|
|
( <a href="[% uri_for('/report/nodevendor') | none %]?vendor=[% row.manufacturer.abbrev | uri %]">
|
|
[% row.manufacturer.company | html_entity %]</a> )
|
|
[% END %]
|
|
seen as:
|
|
[% INCLUDE external_mac_links item = row %]
|
|
</td>
|
|
<td>MAC → IP</td>
|
|
<td class="nd_center-cell"><a href="[% search_node | none %]&q=[% row.ip | uri %]">[% row.ip | html_entity %]</a>
|
|
[% ' <i class="icon-book text-warning"></i> ' IF NOT row.active %]
|
|
[% ' (' _ row.dns.remove(settings.domain_suffix) _ ')' IF row.dns %]
|
|
<br/>[% INCLUDE external_ip_links item = row %]
|
|
</td>
|
|
[% IF params.stamps %]
|
|
<td>[% row.time_first_stamp | html_entity %]</td>
|
|
<td>[% row.time_last_stamp | html_entity %]</td>
|
|
[% END %]
|
|
</tr>
|
|
[% END %]
|
|
[% SET nodecount = 0 %]
|
|
[% WHILE (node = sightings.next) %]
|
|
[% SET nodecount = nodecount + 1 %]
|
|
<tr>
|
|
<td>
|
|
MAC <a href="[% search_node | none %]&q=[% node.net_mac.$mac_format_call | uri %]">
|
|
[% node.net_mac.$mac_format_call | html_entity %]</a>
|
|
[% IF params.show_vendor %]
|
|
( <a href="[% uri_for('/report/nodevendor') | none %]?vendor=[% node.manufacturer.abbrev | uri %]">
|
|
[% node.manufacturer.company | html_entity %]</a> )
|
|
[% END %]
|
|
seen as:
|
|
[% INCLUDE external_mac_links item = node %]
|
|
</td>
|
|
<td>Node on Port</td>
|
|
<td class="nd_center-cell">
|
|
<a href="[% device_ports | none %]&q=[% node.switch | uri %]&f=[% node.port | uri %]&c_nodes=on&c_neighbors=on&prefer=port">
|
|
[% node.device.dns || node.switch | html_entity %] - [% node.port | html_entity %]</a>
|
|
[% ' <i class="icon-book text-warning"></i> ' IF NOT node.active %]
|
|
on vlan [% node.vlan | html_entity %]
|
|
<br />([% node.switch | html_entity %] - [% node.device.name | html_entity %] - "[% node.device_port.name | html_entity %]")
|
|
</td>
|
|
[% IF params.stamps %]
|
|
<td [% 'class="text-success"' IF nodecount == 1 %]>[% node.time_first_stamp | html_entity %]</td>
|
|
<td [% 'class="text-success"' IF nodecount == 1 %]>[% node.time_last_stamp | html_entity %]</td>
|
|
[% END %]
|
|
</tr>
|
|
[% END %]
|
|
[% SET portcount = 0 %]
|
|
[% WHILE (port = ports.next) %]
|
|
[% SET portcount = portcount + 1 %]
|
|
<tr>
|
|
<td>
|
|
MAC <a href="[% search_node | none %]&q=[% port.net_mac.$mac_format_call | uri %]">[% port.net_mac.$mac_format_call | html_entity %]</a>
|
|
[% IF params.show_vendor %]
|
|
( <a href="[% uri_for('/report/nodevendor') | none %]?vendor=[% port.manufacturer.abbrev | uri %]">
|
|
[% port.manufacturer.company | html_entity %]</a> )
|
|
[% END %]
|
|
seen as:
|
|
[% INCLUDE external_mac_links item = port %]
|
|
</td>
|
|
<td>Device Port</td>
|
|
<td class="nd_center-cell">
|
|
<a href="[% device_ports | none %]&q=[% port.ip | uri %]&f=[% port.port | uri %]&c_mac=on&c_nodes=on&c_neighbors=on">
|
|
[% port.device.dns || port.ip | html_entity %] - [% port.descr | html_entity %]</a>
|
|
<br />([% port.ip | html_entity %] - [% port.device.name | html_entity %] - "[% port.name | html_entity %]")
|
|
</td>
|
|
[% IF params.stamps %]
|
|
<td [% 'class="text-success"' IF portcount == 1 %]>[% port.creation.remove(':[0-9./]+$') | html_entity %]</td>
|
|
<td [% 'class="text-success"' IF portcount == 1 %]>[% port.creation.remove(':[0-9./]+$') | html_entity %]</td>
|
|
[% END %]
|
|
</tr>
|
|
[% END %]
|
|
[% WHILE (nbt = netbios.next) %]
|
|
<tr>
|
|
<td>
|
|
MAC <a href="[% search_node | none %]&q=[% nbt.net_mac.$mac_format_call | uri %]">[% nbt.net_mac.$mac_format_call | html_entity %]</a>
|
|
[% IF params.show_vendor %]
|
|
( <a href="[% uri_for('/report/nodevendor') | none %]?vendor=[% nbt.manufacturer.abbrev | uri %]">
|
|
[% nbt.manufacturer.company | html_entity %]</a> )
|
|
[% END %]
|
|
seen as:
|
|
[% INCLUDE external_mac_links item = nbt %]
|
|
</td>
|
|
<td>NetBIOS</td>
|
|
<td class="nd_center-cell">\\<a href="[% uri_for('/report/netbios') | none %]?domain=[% nbt.domain | uri %]" title="Devices in this Domain">[% nbt.domain | html_entity %]</a>\<a href="[% search_node | none %]&q=[% nbt.nbname | uri %]">[% nbt.nbname | html_entity %]</a>
|
|
<br>[% nbt.nbuser || '[No User]' | html_entity %]@<a href="[% search_node | none %]&q=[% nbt.ip | uri %]">[% nbt.ip | html_entity %]</a>
|
|
</td>
|
|
[% IF params.stamps %]
|
|
<td>[% nbt.time_first_stamp | html_entity %]</td>
|
|
<td>[% nbt.time_last_stamp | html_entity %]</td>
|
|
[% END %]
|
|
</tr>
|
|
[% END %]
|
|
[% WHILE (wlan = wireless.next) %]
|
|
<tr>
|
|
<td>
|
|
MAC <a href="[% search_node | none %]&q=[% wlan.net_mac.$mac_format_call | uri %]">[% wlan.net_mac.$mac_format_call | html_entity %]</a>
|
|
[% IF params.show_vendor %]
|
|
( <a href="[% uri_for('/report/nodevendor') | none %]?vendor=[% wlan.manufacturer.abbrev | uri %]">
|
|
[% wlan.manufacturer.company | html_entity %]</a> )
|
|
[% END %]
|
|
seen as:
|
|
[% INCLUDE external_mac_links item = wlan %]
|
|
</td>
|
|
<td>Wireless Info</td>
|
|
<td class="nd_center-cell">SSID: [% wlan.ssid | html_entity %]<br>
|
|
MaxRate: [% wlan.maxrate | html_entity %]Mbps TxRate: [% wlan.txrate | html_entity %]Mbps<br>
|
|
SigStr: [% wlan.sigstrength | html_entity %] SigQual: [% wlan.sigqual | html_entity %]<br>
|
|
Rx: [% wlan.rxpkt | format_number %] pkts, [% wlan.rxbyte | format_number %] bytes<br>
|
|
Tx: [% wlan.txpkt | format_number %] pkts, [% wlan.txbyte | format_number %] bytes<br>
|
|
</td>
|
|
[% IF params.stamps %]
|
|
<td> </td>
|
|
<td>[% wlan.get_column('time_last_stamp') | html_entity %]</td>
|
|
[% END %]
|
|
</tr>
|
|
[% END %]
|
|
</tbody>
|
|
</table>
|
|
|
|
<style>
|
|
tr.group,
|
|
tr.group:hover {
|
|
background-color: #ddd !important;
|
|
}
|
|
</style>
|
|
|
|
<script>
|
|
$(document).ready(function() {
|
|
var table = $('#nsbm-data-table').DataTable({
|
|
"columnDefs": [
|
|
{ "visible": false, "targets": 0 }
|
|
],
|
|
"order": [[ 0, 'asc' ]],
|
|
"drawCallback": function ( settings ) {
|
|
var api = this.api();
|
|
var rows = api.rows( {page:'current'} ).nodes();
|
|
var last=null;
|
|
|
|
api.column(0, {page:'current'} ).data().each( function ( group, i ) {
|
|
if ( last !== group ) {
|
|
$(rows).eq( i ).before(
|
|
[% IF params.stamps %]
|
|
'<tr class="group"><td colspan="4">'+group+'</td></tr>'
|
|
[% ELSE %]
|
|
'<tr class="group"><td colspan="2">'+group+'</td></tr>'
|
|
[% END %]
|
|
);
|
|
|
|
last = group;
|
|
}
|
|
} );
|
|
},
|
|
[% INCLUDE 'ajax/datatabledefaults.tt' -%]
|
|
} );
|
|
|
|
// Order by the grouping
|
|
$('#nsbm-data-table tbody').on( 'click', 'tr.group', function () {
|
|
var currentOrder = table.order()[0];
|
|
if ( currentOrder[0] === 0 && currentOrder[1] === 'asc' ) {
|
|
table.order( [ 0, 'desc' ] ).draw();
|
|
}
|
|
else {
|
|
table.order( [ 0, 'asc' ] ).draw();
|
|
}
|
|
} );
|
|
} );
|
|
</script>
|