181 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			181 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| [% USE Number.Format %]
 | |
| <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 %]&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') %]?vendor=[% row.oui.abbrev | uri %]">
 | |
|         [% row.oui.company | html_entity %]</a> )
 | |
|       [% END %]
 | |
|       </td>
 | |
|       <td>MAC → IP</td>
 | |
|       <td class="nd_center-cell"><a href="[% search_node %]&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 %]
 | |
|       </td>
 | |
|       [% IF params.stamps %]
 | |
|       <td>[% row.time_first_stamp | html_entity %]</td>
 | |
|       <td>[% row.time_last_stamp | html_entity %]</td>
 | |
|       [% END %]
 | |
|     </tr>
 | |
|     [% END %]
 | |
|     [% WHILE (node = sightings.next) %]
 | |
|     <tr>
 | |
|       <td>
 | |
|         MAC: <a href="[% search_node %]&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') %]?vendor=[% node.oui.abbrev | uri %]">
 | |
|         [% node.oui.company | html_entity %]</a> )
 | |
|       [% END %]
 | |
|       </td>
 | |
|       <td>Switch Port</td>
 | |
|       <td class="nd_center-cell">
 | |
|             <a href="[% device_ports %]&q=[% node.switch | uri %]&f=[% node.port | uri %]&c_nodes=on&c_neighbors=on">
 | |
|             [% node.switch | html_entity %] - [% node.port | html_entity %]</a>
 | |
|         [% ' <i class="icon-book text-warning"></i> ' IF NOT node.active %]
 | |
|         [% IF node.device.dns AND node.device_port AND node.device_port.name %]
 | |
|           ([% node.device.dns | html_entity %] - [% node.device_port.name | html_entity %])
 | |
|         [% END %]
 | |
|       </td>
 | |
|       [% IF params.stamps %]
 | |
|       <td>[% node.time_first_stamp | html_entity %]</td>
 | |
|       <td>[% node.time_last_stamp | html_entity %]</td>
 | |
|       [% END %]
 | |
|     </tr>
 | |
|     [% END %]
 | |
|     [% WHILE (port = ports.next) %]
 | |
|     <tr>
 | |
|       <td>
 | |
|         MAC: <a href="[% search_node %]&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') %]?vendor=[% port.oui.abbrev | uri %]">
 | |
|         [% port.oui.company | html_entity %]</a> )
 | |
|       [% END %]
 | |
|       </td>
 | |
|       <td>Switch Port</td>
 | |
|       <td class="nd_center-cell">
 | |
|             <a href="[% device_ports %]&q=[% port.ip | uri %]&f=[% port.port | uri %]&c_mac=on&c_nodes=on&c_neighbors=on">
 | |
|             [% port.ip | html_entity %] - [% port.descr | html_entity %]</a>
 | |
|         [% IF port.device.dns AND port.name %]
 | |
|           ([% port.device.dns | html_entity %] - [% port.name | html_entity %])
 | |
|         [% END %]
 | |
|       </td>
 | |
|       [% IF params.stamps %]
 | |
|       <td>[% port.creation | html_entity %]</td>
 | |
|       <td>[% port.creation | html_entity %]</td>
 | |
|       [% END %]
 | |
|     </tr>
 | |
|     [% END %]
 | |
|     [% WHILE (nbt = netbios.next) %]
 | |
|     <tr>
 | |
|       <td>
 | |
|         MAC: <a href="[% search_node %]&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') %]?vendor=[% nbt.oui.abbrev | uri %]">
 | |
|         [% nbt.oui.company | html_entity %]</a> )
 | |
|       [% END %]
 | |
|       </td>
 | |
|       <td>NetBIOS</td>
 | |
|       <td class="nd_center-cell">\\<a href="[% uri_for('/report/netbios') %]?domain=[% nbt.domain | uri %]" title="Devices in this Domain">[% nbt.domain | html_entity %]</a>\<a href="[% search_node %]&q=[% nbt.nbname | uri %]">[% nbt.nbname | html_entity %]</a>
 | |
|         <br>[% nbt.nbuser || '[No User]' | html_entity %]@<a href="[% search_node %]&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 %]&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') %]?vendor=[% wlan.oui.abbrev | uri %]">
 | |
|         [% wlan.oui.company | html_entity %]</a> )
 | |
|       [% END %]
 | |
|       </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({
 | |
|         "processing": true,
 | |
|         "stateSave": true,
 | |
|         "pageLength": 25,
 | |
|         "language": {
 | |
|             "search": 'Filter records: '
 | |
|         },
 | |
|         "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;
 | |
|                 }
 | |
|             } );
 | |
|         }
 | |
|     } );
 | |
|  
 | |
|     // 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>
 |