mirror of
https://github.com/Akkadius/glass-isc-dhcp.git
synced 2025-07-30 17:15:43 +02:00
Implement MAC OUI translation while streaming the logs
This commit is contained in:
parent
11eaebedd1
commit
64a08e2e68
13
api/get_mac_oui_list.js
Normal file
13
api/get_mac_oui_list.js
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
/**
|
||||||
|
* Created by cmiles on 9/21/2017.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var express = require('express');
|
||||||
|
var router = express.Router();
|
||||||
|
|
||||||
|
router.get('/', function(req, res, next) {
|
||||||
|
res.setHeader('Content-Type', 'application/json');
|
||||||
|
res.send(JSON.stringify(oui_data));
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = router;
|
2
app.js
2
app.js
@ -53,6 +53,7 @@ app.use('/api/get_vendor_count/', require('./api/get_vendor_count'));
|
|||||||
app.use('/api/get_mac_oui_count_by_vendor/', require('./api/get_mac_oui_count_by_vendor'));
|
app.use('/api/get_mac_oui_count_by_vendor/', require('./api/get_mac_oui_count_by_vendor'));
|
||||||
app.use('/api/get_dhcp_requests/', require('./api/get_dhcp_requests'));
|
app.use('/api/get_dhcp_requests/', require('./api/get_dhcp_requests'));
|
||||||
app.use('/api/get_server_info/', require('./api/get_server_info'));
|
app.use('/api/get_server_info/', require('./api/get_server_info'));
|
||||||
|
app.use('/api/get_mac_oui_list/', require('./api/get_mac_oui_list'));
|
||||||
|
|
||||||
app.set('view engine', 'html');
|
app.set('view engine', 'html');
|
||||||
|
|
||||||
@ -97,6 +98,7 @@ debug_watch_lease_parse_stream = 0;
|
|||||||
|
|
||||||
host_name = execSync("cat /etc/hostname").toString().replace("\n", "");
|
host_name = execSync("cat /etc/hostname").toString().replace("\n", "");
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ingest OUI Database
|
* Ingest OUI Database
|
||||||
*/
|
*/
|
||||||
|
@ -43,3 +43,14 @@ $('#dhcp_log').height($(window).height() * 0.6);
|
|||||||
var editor = ace.edit("dhcp_log");
|
var editor = ace.edit("dhcp_log");
|
||||||
editor.setTheme("ace/theme/terminal");
|
editor.setTheme("ace/theme/terminal");
|
||||||
editor.$blockScrolling = Infinity;
|
editor.$blockScrolling = Infinity;
|
||||||
|
|
||||||
|
get_mac_oui_data();
|
||||||
|
|
||||||
|
function get_mac_oui_data() {
|
||||||
|
if(typeof mac_oui_data === "undefined") {
|
||||||
|
mac_oui_data = {};
|
||||||
|
$.getJSON("/api/get_mac_oui_list", function (data) {
|
||||||
|
mac_oui_data = data;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -26,12 +26,32 @@ function connect_websocket() {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
console_data = event.data;
|
||||||
|
|
||||||
|
if(typeof mac_oui_data !== "undefined") {
|
||||||
|
if (console_data.split(":").length - 1 >= 8) {
|
||||||
|
var line_data = console_data.split(" ");
|
||||||
|
for (i = 0; i < line_data.length; i++) {
|
||||||
|
if ((line_data[i].split(":").length - 1) == 5) {
|
||||||
|
var mac_oui = line_data[i].split(":").join("").toUpperCase().slice(0, 6);
|
||||||
|
console_data = console_data.replace(line_data[i], line_data[i] + " (" + mac_oui_data[mac_oui] + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Note: the only thing I stream currently is dhcp log - so later incoming messages will need to be
|
||||||
|
keyed by their "type" via json
|
||||||
|
*/
|
||||||
|
|
||||||
var grep_value = document.getElementById("grep_fitler").value;
|
var grep_value = document.getElementById("grep_fitler").value;
|
||||||
|
|
||||||
if(grep_value){
|
if(grep_value){
|
||||||
var matcher = new RegExp(grep_value, "i");
|
var matcher = new RegExp(grep_value, "i");
|
||||||
var found = matcher.test(event.data);
|
var found = matcher.test(console_data);
|
||||||
if(!found && !event.data.includes(grep_value)){
|
if(!found && !console_data.includes(grep_value)){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -40,7 +60,7 @@ function connect_websocket() {
|
|||||||
session.insert({
|
session.insert({
|
||||||
row: session.getLength(),
|
row: session.getLength(),
|
||||||
column: 0
|
column: 0
|
||||||
}, "\n" + event.data);
|
}, "\n" + console_data);
|
||||||
|
|
||||||
if(session.getLength() >= 50000){
|
if(session.getLength() >= 50000){
|
||||||
/* If we get over 500,000 lines lets clear the editor */
|
/* If we get over 500,000 lines lets clear the editor */
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
<div class="block-header">
|
||||||
|
<h2>DHCP Data Calls</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<!-- Get Active Leases -->
|
<!-- Get Active Leases -->
|
||||||
<div class="row clearfix">
|
<div class="row clearfix">
|
||||||
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
|
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
|
||||||
@ -72,6 +77,43 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Get OUI List -->
|
||||||
|
<div class="row clearfix">
|
||||||
|
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
|
||||||
|
<div class="card">
|
||||||
|
<div class="header">
|
||||||
|
<h2>
|
||||||
|
GET: Mac Vendor OUI List (Full)
|
||||||
|
</h2>
|
||||||
|
</div>
|
||||||
|
<div class="body">
|
||||||
|
<label>Call</label>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="form-line">
|
||||||
|
<input disabled type="input" class="form-control" value="/api/get_mac_oui_list" autocomplete="off">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<label>URL Example</label>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="form-line">
|
||||||
|
<input disabled type="input" class="form-control api_url" value="/api/get_mac_oui_list" autocomplete="off">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<label>Test</label>
|
||||||
|
<div class="form-group">
|
||||||
|
<div>
|
||||||
|
<button type="button" onclick="api_example('get_mac_oui_list')" class="btn btn-default waves-effect">Try It!</button>
|
||||||
|
<button type="button" onclick="raw_api('/api/get_mac_oui_list')" class="btn btn-default waves-effect">Raw</button>
|
||||||
|
<button type="button" onclick="clear_api('get_mac_oui_list')" class="btn btn-default waves-effect">Clear</button>
|
||||||
|
<div id="get_mac_oui_list" style="margin-top:20px"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="block-header">
|
<div class="block-header">
|
||||||
<h2>Statistics Data</h2>
|
<h2>Statistics Data</h2>
|
||||||
</div>
|
</div>
|
||||||
@ -194,6 +236,7 @@
|
|||||||
<div class="header">
|
<div class="header">
|
||||||
<h2>
|
<h2>
|
||||||
GET: Excessive DHCP Requests
|
GET: Excessive DHCP Requests
|
||||||
|
<small>Over a 10 minute audit interval</small>
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
|
@ -0,0 +1,338 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta name="viewport" content="width=device-width" />
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
|
<title>Glass Alert</title>
|
||||||
|
<style>
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
box-sizing: border-box;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-webkit-text-size-adjust: none;
|
||||||
|
width: 100% !important;
|
||||||
|
height: 100%;
|
||||||
|
line-height: 1.6em;
|
||||||
|
/* 1.6em * 14px = 22.4px, use px to get airier line-height also in Thunderbird, and Yahoo!, Outlook.com, AOL webmail clients */
|
||||||
|
/*line-height: 22px;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Let's make sure all tables have defaults */
|
||||||
|
table td {
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------
|
||||||
|
BODY & CONTAINER
|
||||||
|
------------------------------------- */
|
||||||
|
body {
|
||||||
|
background-color: #ecf0f5;
|
||||||
|
color: #6c7b88
|
||||||
|
}
|
||||||
|
|
||||||
|
.body-wrap {
|
||||||
|
background-color: #ecf0f5;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
display: block !important;
|
||||||
|
max-width: 600px !important;
|
||||||
|
margin: 0 auto !important;
|
||||||
|
/* makes it centered */
|
||||||
|
clear: both !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
max-width: 600px;
|
||||||
|
margin: 0 auto;
|
||||||
|
display: block;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------
|
||||||
|
HEADER, FOOTER, MAIN
|
||||||
|
------------------------------------- */
|
||||||
|
.main {
|
||||||
|
background-color: #fff;
|
||||||
|
border-bottom: 2px solid #d7d7d7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-wrap {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-block {
|
||||||
|
padding: 0 0 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header {
|
||||||
|
width: 100%;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
width: 100%;
|
||||||
|
clear: both;
|
||||||
|
color: #999;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
.footer p, .footer a, .footer td {
|
||||||
|
color: #999;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------
|
||||||
|
TYPOGRAPHY
|
||||||
|
------------------------------------- */
|
||||||
|
h1, h2, h3 {
|
||||||
|
font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
|
||||||
|
color: #1a2c3f;
|
||||||
|
margin: 30px 0 0;
|
||||||
|
line-height: 1.2em;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 32px;
|
||||||
|
font-weight: 500;
|
||||||
|
/* 1.2em * 32px = 38.4px, use px to get airier line-height also in Thunderbird, and Yahoo!, Outlook.com, AOL webmail clients */
|
||||||
|
/*line-height: 38px;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 24px;
|
||||||
|
/* 1.2em * 24px = 28.8px, use px to get airier line-height also in Thunderbird, and Yahoo!, Outlook.com, AOL webmail clients */
|
||||||
|
/*line-height: 29px;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 18px;
|
||||||
|
/* 1.2em * 18px = 21.6px, use px to get airier line-height also in Thunderbird, and Yahoo!, Outlook.com, AOL webmail clients */
|
||||||
|
/*line-height: 22px;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
p, ul, ol {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
p li, ul li, ol li {
|
||||||
|
margin-left: 5px;
|
||||||
|
list-style-position: inside;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------
|
||||||
|
LINKS & BUTTONS
|
||||||
|
------------------------------------- */
|
||||||
|
a {
|
||||||
|
color: #348eda;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-primary {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #FFF;
|
||||||
|
background-color: #42A5F5;
|
||||||
|
border: solid #42A5F5;
|
||||||
|
border-width: 10px 20px;
|
||||||
|
line-height: 2em;
|
||||||
|
/* 2em * 14px = 28px, use px to get airier line-height also in Thunderbird, and Yahoo!, Outlook.com, AOL webmail clients */
|
||||||
|
/*line-height: 28px;*/
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: center;
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
text-transform: capitalize;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------
|
||||||
|
OTHER STYLES THAT MIGHT BE USEFUL
|
||||||
|
------------------------------------- */
|
||||||
|
.last {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.first {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.aligncenter {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.alignright {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.alignleft {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clear {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------
|
||||||
|
ALERTS
|
||||||
|
Change the class depending on warning email, good email or bad email
|
||||||
|
------------------------------------- */
|
||||||
|
.alert {
|
||||||
|
font-size: 16px;
|
||||||
|
color: #fff;
|
||||||
|
font-weight: 500;
|
||||||
|
padding: 20px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.alert a {
|
||||||
|
color: #fff;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: 500;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
.alert.alert-warning {
|
||||||
|
background-color: #FFA726;
|
||||||
|
}
|
||||||
|
.alert.alert-bad {
|
||||||
|
background-color: #ef5350;
|
||||||
|
}
|
||||||
|
.alert.alert-good {
|
||||||
|
background-color: #8BC34A;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------
|
||||||
|
INVOICE
|
||||||
|
Styles for the billing table
|
||||||
|
------------------------------------- */
|
||||||
|
.invoice {
|
||||||
|
margin: 25px auto;
|
||||||
|
text-align: left;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.invoice td {
|
||||||
|
padding: 5px 0;
|
||||||
|
}
|
||||||
|
.invoice .invoice-items {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.invoice .invoice-items td {
|
||||||
|
border-top: #eee 1px solid;
|
||||||
|
}
|
||||||
|
.invoice .invoice-items .total td {
|
||||||
|
border-top: 2px solid #6c7b88;
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------
|
||||||
|
RESPONSIVE AND MOBILE FRIENDLY STYLES
|
||||||
|
------------------------------------- */
|
||||||
|
@media only screen and (max-width: 640px) {
|
||||||
|
body {
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4 {
|
||||||
|
font-weight: 800 !important;
|
||||||
|
margin: 20px 0 5px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 22px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 18px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 16px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
padding: 0 !important;
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-wrap {
|
||||||
|
padding: 10px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.invoice {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body itemscope itemtype="http://schema.org/EmailMessage">
|
||||||
|
|
||||||
|
<table class="body-wrap">
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td class="container" width="600">
|
||||||
|
<div class="content">
|
||||||
|
<table class="main" width="100%" cellpadding="0" cellspacing="0">
|
||||||
|
<tr>
|
||||||
|
<td class="alert alert-warning">
|
||||||
|
Warning: You're approaching your limit. Please upgrade.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="content-wrap">
|
||||||
|
<table width="100%" cellpadding="0" cellspacing="0">
|
||||||
|
<tr>
|
||||||
|
<td class="content-block">
|
||||||
|
You have <strong>1 free report</strong> remaining.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="content-block">
|
||||||
|
Add your credit card now to upgrade your account to a premium plan to ensure you don't miss out on any reports.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="content-block">
|
||||||
|
<a href="#" class="btn-primary">Upgrade my account</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="content-block">
|
||||||
|
Thanks for choosing Company Inc.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<div class="footer">
|
||||||
|
<table width="100%">
|
||||||
|
<tr>
|
||||||
|
<td class="aligncenter content-block"><a href="#">Unsubscribe</a> from these alerts.</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div></div>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
x
Reference in New Issue
Block a user