diff --git a/README.md b/README.md index 2e27286..0f860ba 100644 --- a/README.md +++ b/README.md @@ -13,4 +13,16 @@ npm install ### Start Server ``` sh npm start -``` \ No newline at end of file +``` + +### Usage +> :notebook: **Open in browser**: ```http://:3100``` +####Features +* Automatic refresh on new Data +* Manual refresh on left-click +* Click on arc reveals whole "Ntopng Alert" +* Hover on arc reveals src/dest ip/hostname +#### Colors +* Orange arc is a bidirectional request (sender and receiver are swapped) +* Red side of arc is receiving +* Green side of arc is sending diff --git a/app.js b/app.js index dd713d5..5fd7daa 100644 --- a/app.js +++ b/app.js @@ -5,11 +5,16 @@ var cookieParser = require('cookie-parser'); var logger = require('morgan'); var cors = require('cors') -var indexRouter = require('./routes/index'); -var usersRouter = require('./routes/users'); var app = express(); +// var expressWs = require('express-ws')(app); + + + + +var indexRouter = require('./routes/index'); +var usersRouter = require('./routes/users'); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); diff --git a/model/alerts.js b/model/alerts.js index 7ad9550..0af7b09 100644 --- a/model/alerts.js +++ b/model/alerts.js @@ -1,8 +1,7 @@ var alerts = []; +var alertDates = [] -const { - v4: uuidv4 -} = require('uuid'); +const {v4: uuidv4} = require('uuid'); function addAlert(first_seen, srv_city_name, ip_version, action, pool_id, srv_continent_name, score, entity_val, vlan_id, cli2srv_bytes, cli_country_name, entity_id, srv_asn, l7_proto, is_cli_attacker, srv_name, srv_ip, proto, json, srv_country_name, community_id, alert_id, is_srv_attacker, srv_blacklisted, alerts_map, srv_os, cli_localhost, cli_asn, srv2cli_packets, cli2srv_packets, tstamp, cli_name, cli_continent_name, srv2cli_bytes, l7_cat, ifid, observation_point_id, srv_localhost, cli_port, cli_blacklisted, dns_last_query, is_flow_alert, srv_port, l7_master_proto, is_cli_victim, cli_ip, cli_city_name, cli_os, is_srv_victim){ // function addAlert(srv_name, srv_ip, srv_port, json, cli_ip, cli_port){ var data = { @@ -57,11 +56,44 @@ function addAlert(first_seen, srv_city_name, ip_version, action, pool_id, srv_co cli_city_name:cli_city_name, cli_os:cli_os, is_srv_victim:is_srv_victim - } - if(!alerts.some(x => x.cli_ip === data.cli_ip && x.srv_ip === data.srv_ip)) { - alerts.push(data); - return data.uid - } + } + + + if(!alerts.some(x => x.cli_ip === data.cli_ip && x.srv_ip === data.srv_ip)) { + const date = new Date(); + const nowminutes = date.getMinutes(); + if(alertDates.some(x => x.minute === nowminutes)){ + const dataIndex = alertDates.findIndex(ad => ad.minute === nowminutes); + alertDates[dataIndex].uids.push(data.uid); + }else{ + var alertMinute = { + uids: [data.uid], + date: date, + minute: nowminutes + } + alertDates.push(alertMinute) + } + alerts.push(data); + return data.uid + } +} + +function delAlerts(uids){ + uids.forEach(uid => delAlert(uid)) +} + +function delAlert(uid){ + console.log(uid) + alerts = alerts.filter(a => a.uid !== uid) +} + +function delAlertDate(date){ + console.log(date) + alertDates = alertDates.filter(ad => ad.date !== date ) +} + +function getAlertDates(){ + return alertDates; } function getAlerts(){ @@ -69,11 +101,14 @@ function getAlerts(){ } function getAlert(uid){ - return alerts.filter(i => i.uid === uid); + return alerts.filter(i => i.uid === uid)[0]; } module.exports = { getAlerts, getAlert, - addAlert + addAlert, + getAlertDates, + delAlertDate, + delAlerts }; \ No newline at end of file diff --git a/model/globedata.js b/model/globedata.js index e461417..7fc35bc 100644 --- a/model/globedata.js +++ b/model/globedata.js @@ -27,25 +27,35 @@ var settings = { }, arc: { default: 1.1 + }, + globe: { + arcDashLength: 0.4, + arcAltitudeAutoScale: 0.4, + arcDashGap: 0.1, + arcDashInitialGap: 0.1, + arcDashAnimateTime: 7000, + arcStroke: 0.5, + labelSize: 0, + labelDotRadius: 0.4, + labelResolution: 2 } + }, + timer:{ + del: 30 } } var geoip = require('fast-geoip'); -async function addArc(src, dest, uid){ - const arcName = src + " -> " + dest; +async function addArc(src, dest, uid, src_name, dest_name){ + const arcName = src_name + " -> " + dest_name; var geoSrc = undefined; var startLat = undefined; var startLng = undefined; var geoDest = undefined; var endLat = undefined; var endLng = undefined; - if(data.arc.some(x => x.name === arcName)) { - console.log("is scho da") - }else{ - console.log(src.includes("192.168.1.") || src.includes("127.0.0.1")) - console.log(dest.includes("192.168.1.") || dest.includes("127.0.0.1")) + if(!data.arc.some(x => x.src === src && x.dest === dest)) { if (src.includes("192.168.1.") || src.includes("127.0.0.1")) { startLat = round(settings.location.home.lat, settings.location.precision) startLng = round(settings.location.home.lng, settings.location.precision) @@ -70,6 +80,7 @@ async function addArc(src, dest, uid){ endLng = round(settings.location.home.lng, settings.location.precision) } } + var txrx = [{src: src, dest: dest, src_name: src_name, dest_name: dest_name}]; var dat = { uid: uid, name: arcName, @@ -78,12 +89,14 @@ async function addArc(src, dest, uid){ endLat: endLat, endLng: endLng, color: settings.colors.arc.default, - stroke: settings.sizes.arc.default + stroke: settings.sizes.arc.default, + src: src, + dest: dest, + src_name: src_name, + dest_name: dest_name, + txrx: txrx } - console.log(arcName) - if(data.arc.some(x => x.startLat === startLat && x.startLng === startLng && x.endLat === endLat && x.endLng === endLng)){ - console.log("is scho da 2") - }else { + if(!data.arc.some(x => x.startLat === startLat && x.startLng === startLng && x.endLat === endLat && x.endLng === endLng)){ const newUid = addLoc(arcName, startLat, startLng, uid) dat.uid = newUid; if (!data.arc.some(x => x.startLat === startLat && x.startLng === startLng && x.endLat === endLat && x.endLng === endLng)) { @@ -93,18 +106,18 @@ async function addArc(src, dest, uid){ } else { const dataIndex = data.arc.findIndex(x => x.startLat === endLat && x.startLng === endLng && x.endLat === startLat && x.endLng === startLng); data.arc[dataIndex].color = settings.colors.arc.dualsender; + data.arc[dataIndex].txrx.push({src: dat.src, dest: dat.dest, src_name: dat.src_name, dest_name: dat.dest_name}) } } else { const dataIndex = data.arc.findIndex(x => x.startLat === startLat && x.startLng === startLng && x.endLat === endLat && x.endLng === endLng); const arcuid = data.arc[dataIndex].uid; var loc = getLoc(arcuid) loc.color = settings.colors.loc.dualsender; + loc.txrx.push({src: dat.src, dest: dat.dest, src_name: dat.src_name, dest_name: dat.dest_name}) editLoc(loc); - console.log("selbe richtiung schon da") } } } - console.log("NACH IS SCHO DA") } function round(value, precision) { @@ -112,14 +125,16 @@ function round(value, precision) { return Math.round(value * multiplier) / multiplier; } -function addLoc(name, lat, lng, uid){ +function addLoc(name, lat, lng, uid, src, dest, src_name, dest_name){ + var txrx = [{src: src, dest: dest, src_name: src_name, dest_name: dest_name}] var dat = { uid: uid, name: name, lat: lat, lng: lng, size: settings.sizes.loc.default, - color: settings.colors.loc.default + color: settings.colors.loc.default, + txrx: txrx }; if(!data.loc.some(x => x.lat === lat && x.lng === lng)) { @@ -127,7 +142,7 @@ function addLoc(name, lat, lng, uid){ return dat.uid }else{ const dataIndex = data.loc.findIndex(obj => obj.lat === lat && obj.lng === lng); - data.loc[dataIndex].name = data.loc[dataIndex].name + "
\n" + name; + data.loc[dataIndex].name = data.loc[dataIndex].name + "\n" + name; return data.loc[dataIndex].uid } } @@ -145,10 +160,13 @@ function getData(){ } function getDisplayData(){ - return { - arc: filterUid(data.arc), - loc: filterUid(data.loc) - } + var ret = data; + ret.settings = settings + return ret +} + +function getSettigns(){ + return settings; } function filterUid(tofilter){ @@ -177,7 +195,26 @@ function editLoc(loc){ data.loc[dataIndex] = loc; } +function delUids(uids){ + uids.forEach(uid => delUid(uid)) +} + +function delUid(uid){ + console.log("delglobe") + console.log(uid) + delArc(uid); + delLoc(uid); +} + +function delLoc(uid){ + data.loc = data.loc.filter(loc => loc.uid !== uid) +} + +function delArc(uid){ + data.arc = data.arc.filter(arc => arc.uid !== uid) +} + module.exports = { - addArc, addLoc, getLocData, getArcColor, getData, getArcData, getLocColor, getDisplayData + addArc, addLoc, getLocData, getArcColor, getData, getArcData, getLocColor, getDisplayData, delUids, getSettigns } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e52b139..dba734f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "http-errors": "~1.6.3", "jade": "~1.11.0", "morgan": "~1.9.1", + "node-cron": "^3.0.0", "uuid": "^8.3.2" } }, @@ -585,6 +586,25 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.34", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", + "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", + "dependencies": { + "moment": ">= 2.9.0" + }, + "engines": { + "node": "*" + } + }, "node_modules/morgan": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", @@ -613,6 +633,17 @@ "node": ">= 0.6" } }, + "node_modules/node-cron": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.0.tgz", + "integrity": "sha512-DDwIvvuCwrNiaU7HEivFDULcaQualDv7KoNlB/UU1wPW0n1tDEmBJKhEIE6DlF2FuoOHcNbLJ8ITL2Iv/3AWmA==", + "dependencies": { + "moment-timezone": "^0.5.31" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -1429,6 +1460,19 @@ "minimist": "^1.2.5" } }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "moment-timezone": { + "version": "0.5.34", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", + "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", + "requires": { + "moment": ">= 2.9.0" + } + }, "morgan": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", @@ -1451,6 +1495,14 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, + "node-cron": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.0.tgz", + "integrity": "sha512-DDwIvvuCwrNiaU7HEivFDULcaQualDv7KoNlB/UU1wPW0n1tDEmBJKhEIE6DlF2FuoOHcNbLJ8ITL2Iv/3AWmA==", + "requires": { + "moment-timezone": "^0.5.31" + } + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", diff --git a/package.json b/package.json index dcc559c..df99e99 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "http-errors": "~1.6.3", "jade": "~1.11.0", "morgan": "~1.9.1", + "node-cron": "^3.0.0", "uuid": "^8.3.2" } } diff --git a/public/babel.js b/public/babel.js deleted file mode 100644 index 733c6bf..0000000 --- a/public/babel.js +++ /dev/null @@ -1,61686 +0,0 @@ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else if(typeof exports === 'object') - exports["Babel"] = factory(); - else - root["Babel"] = factory(); -})(this, function() { - return /******/ (function(modules) { // webpackBootstrap - /******/ // The module cache - /******/ var installedModules = {}; - - /******/ // The require function - /******/ function __webpack_require__(moduleId) { - - /******/ // Check if module is in cache - /******/ if(installedModules[moduleId]) - /******/ return installedModules[moduleId].exports; - - /******/ // Create a new module (and put it into the cache) - /******/ var module = installedModules[moduleId] = { - /******/ exports: {}, - /******/ id: moduleId, - /******/ loaded: false - /******/ }; - - /******/ // Execute the module function - /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); - - /******/ // Flag the module as loaded - /******/ module.loaded = true; - - /******/ // Return the exports of the module - /******/ return module.exports; - /******/ } - - - /******/ // expose the modules object (__webpack_modules__) - /******/ __webpack_require__.m = modules; - - /******/ // expose the module cache - /******/ __webpack_require__.c = installedModules; - - /******/ // __webpack_public_path__ - /******/ __webpack_require__.p = ""; - - /******/ // Load entry module and return exports - /******/ return __webpack_require__(0); - /******/ }) - /************************************************************************/ - /******/ ((function(modules) { - // Check all modules for deduplicated modules - for(var i in modules) { - if(Object.prototype.hasOwnProperty.call(modules, i)) { - switch(typeof modules[i]) { - case "function": break; - case "object": - // Module can be created from a template - modules[i] = (function(_m) { - var args = _m.slice(1), fn = modules[_m[0]]; - return function (a,b,c) { - fn.apply(this, [a,b,c].concat(args)); - }; - }(modules[i])); - break; - default: - // Module is a copy of another module - modules[i] = modules[modules[i]]; - break; - } - } - } - return modules; - }([ - /* 0 */ - /***/ (function(module, exports, __webpack_require__) { - - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.version = exports.buildExternalHelpers = exports.availablePresets = exports.availablePlugins = undefined; - - var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - - exports.transform = transform; - exports.transformFromAst = transformFromAst; - exports.registerPlugin = registerPlugin; - exports.registerPlugins = registerPlugins; - exports.registerPreset = registerPreset; - exports.registerPresets = registerPresets; - exports.transformScriptTags = transformScriptTags; - exports.disableScriptTags = disableScriptTags; - - var _babelCore = __webpack_require__(290); - - var Babel = _interopRequireWildcard(_babelCore); - - var _transformScriptTags = __webpack_require__(629); - - function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - - var isArray = Array.isArray || function (arg) { - return Object.prototype.toString.call(arg) === '[object Array]'; - }; - - /** - * Loads the given name (or [name, options] pair) from the given table object - * holding the available presets or plugins. - * - * Returns undefined if the preset or plugin is not available; passes through - * name unmodified if it (or the first element of the pair) is not a string. - */ - function loadBuiltin(builtinTable, name) { - if (isArray(name) && typeof name[0] === 'string') { - if (builtinTable.hasOwnProperty(name[0])) { - return [builtinTable[name[0]]].concat(name.slice(1)); - } - return; - } else if (typeof name === 'string') { - return builtinTable[name]; - } - // Could be an actual preset/plugin module - return name; - } - - /** - * Parses plugin names and presets from the specified options. - */ - function processOptions(options) { - // Parse preset names - var presets = (options.presets || []).map(function (presetName) { - var preset = loadBuiltin(availablePresets, presetName); - - if (preset) { - // workaround for babel issue - // at some point, babel copies the preset, losing the non-enumerable - // buildPreset key; convert it into an enumerable key. - if (isArray(preset) && _typeof(preset[0]) === 'object' && preset[0].hasOwnProperty('buildPreset')) { - preset[0] = _extends({}, preset[0], { buildPreset: preset[0].buildPreset }); - } - } else { - throw new Error('Invalid preset specified in Babel options: "' + presetName + '"'); - } - return preset; - }); - - // Parse plugin names - var plugins = (options.plugins || []).map(function (pluginName) { - var plugin = loadBuiltin(availablePlugins, pluginName); - - if (!plugin) { - throw new Error('Invalid plugin specified in Babel options: "' + pluginName + '"'); - } - return plugin; - }); - - return _extends({ - babelrc: false - }, options, { - presets: presets, - plugins: plugins - }); - } - - function transform(code, options) { - return Babel.transform(code, processOptions(options)); - } - - function transformFromAst(ast, code, options) { - return Babel.transformFromAst(ast, code, processOptions(options)); - } - var availablePlugins = exports.availablePlugins = {}; - var availablePresets = exports.availablePresets = {}; - var buildExternalHelpers = exports.buildExternalHelpers = Babel.buildExternalHelpers; - /** - * Registers a named plugin for use with Babel. - */ - function registerPlugin(name, plugin) { - if (availablePlugins.hasOwnProperty(name)) { - console.warn('A plugin named "' + name + '" is already registered, it will be overridden'); - } - availablePlugins[name] = plugin; - } - /** - * Registers multiple plugins for use with Babel. `newPlugins` should be an object where the key - * is the name of the plugin, and the value is the plugin itself. - */ - function registerPlugins(newPlugins) { - Object.keys(newPlugins).forEach(function (name) { - return registerPlugin(name, newPlugins[name]); - }); - } - - /** - * Registers a named preset for use with Babel. - */ - function registerPreset(name, preset) { - if (availablePresets.hasOwnProperty(name)) { - console.warn('A preset named "' + name + '" is already registered, it will be overridden'); - } - availablePresets[name] = preset; - } - /** - * Registers multiple presets for use with Babel. `newPresets` should be an object where the key - * is the name of the preset, and the value is the preset itself. - */ - function registerPresets(newPresets) { - Object.keys(newPresets).forEach(function (name) { - return registerPreset(name, newPresets[name]); - }); - } - - // All the plugins we should bundle - registerPlugins({ - 'check-es2015-constants': __webpack_require__(66), - 'external-helpers': __webpack_require__(322), - 'inline-replace-variables': __webpack_require__(323), - 'syntax-async-functions': __webpack_require__(67), - 'syntax-async-generators': __webpack_require__(195), - 'syntax-class-constructor-call': __webpack_require__(196), - 'syntax-class-properties': __webpack_require__(197), - 'syntax-decorators': __webpack_require__(125), - 'syntax-do-expressions': __webpack_require__(198), - 'syntax-exponentiation-operator': __webpack_require__(199), - 'syntax-export-extensions': __webpack_require__(200), - 'syntax-flow': __webpack_require__(126), - 'syntax-function-bind': __webpack_require__(201), - 'syntax-function-sent': __webpack_require__(325), - 'syntax-jsx': __webpack_require__(127), - 'syntax-object-rest-spread': __webpack_require__(202), - 'syntax-trailing-function-commas': __webpack_require__(128), - 'transform-async-functions': __webpack_require__(326), - 'transform-async-to-generator': __webpack_require__(129), - 'transform-async-to-module-method': __webpack_require__(328), - 'transform-class-constructor-call': __webpack_require__(203), - 'transform-class-properties': __webpack_require__(204), - 'transform-decorators': __webpack_require__(205), - 'transform-decorators-legacy': __webpack_require__(329).default, // <- No clue. Nope. - 'transform-do-expressions': __webpack_require__(206), - 'transform-es2015-arrow-functions': __webpack_require__(68), - 'transform-es2015-block-scoped-functions': __webpack_require__(69), - 'transform-es2015-block-scoping': __webpack_require__(70), - 'transform-es2015-classes': __webpack_require__(71), - 'transform-es2015-computed-properties': __webpack_require__(72), - 'transform-es2015-destructuring': __webpack_require__(73), - 'transform-es2015-duplicate-keys': __webpack_require__(130), - 'transform-es2015-for-of': __webpack_require__(74), - 'transform-es2015-function-name': __webpack_require__(75), - 'transform-es2015-instanceof': __webpack_require__(332), - 'transform-es2015-literals': __webpack_require__(76), - 'transform-es2015-modules-amd': __webpack_require__(131), - 'transform-es2015-modules-commonjs': __webpack_require__(77), - 'transform-es2015-modules-systemjs': __webpack_require__(208), - 'transform-es2015-modules-umd': __webpack_require__(209), - 'transform-es2015-object-super': __webpack_require__(78), - 'transform-es2015-parameters': __webpack_require__(79), - 'transform-es2015-shorthand-properties': __webpack_require__(80), - 'transform-es2015-spread': __webpack_require__(81), - 'transform-es2015-sticky-regex': __webpack_require__(82), - 'transform-es2015-template-literals': __webpack_require__(83), - 'transform-es2015-typeof-symbol': __webpack_require__(84), - 'transform-es2015-unicode-regex': __webpack_require__(85), - 'transform-es3-member-expression-literals': __webpack_require__(336), - 'transform-es3-property-literals': __webpack_require__(337), - 'transform-es5-property-mutators': __webpack_require__(338), - 'transform-eval': __webpack_require__(339), - 'transform-exponentiation-operator': __webpack_require__(132), - 'transform-export-extensions': __webpack_require__(210), - 'transform-flow-comments': __webpack_require__(340), - 'transform-flow-strip-types': __webpack_require__(211), - 'transform-function-bind': __webpack_require__(212), - 'transform-jscript': __webpack_require__(341), - 'transform-object-assign': __webpack_require__(342), - 'transform-object-rest-spread': __webpack_require__(213), - 'transform-object-set-prototype-of-to-assign': __webpack_require__(343), - 'transform-proto-to-assign': __webpack_require__(344), - 'transform-react-constant-elements': __webpack_require__(345), - 'transform-react-display-name': __webpack_require__(214), - 'transform-react-inline-elements': __webpack_require__(346), - 'transform-react-jsx': __webpack_require__(215), - 'transform-react-jsx-compat': __webpack_require__(347), - 'transform-react-jsx-self': __webpack_require__(349), - 'transform-react-jsx-source': __webpack_require__(350), - 'transform-regenerator': __webpack_require__(86), - 'transform-runtime': __webpack_require__(353), - 'transform-strict-mode': __webpack_require__(216), - 'undeclared-variables-check': __webpack_require__(354) - }); - - // All the presets we should bundle - registerPresets({ - es2015: __webpack_require__(217), - es2016: __webpack_require__(218), - es2017: __webpack_require__(219), - latest: __webpack_require__(356), - react: __webpack_require__(357), - 'stage-0': __webpack_require__(358), - 'stage-1': __webpack_require__(220), - 'stage-2': __webpack_require__(221), - 'stage-3': __webpack_require__(222), - - // ES2015 preset with es2015-modules-commonjs removed - // Plugin list copied from babel-preset-es2015/index.js - 'es2015-no-commonjs': { - plugins: [__webpack_require__(83), __webpack_require__(76), __webpack_require__(75), __webpack_require__(68), __webpack_require__(69), __webpack_require__(71), __webpack_require__(78), __webpack_require__(80), __webpack_require__(72), __webpack_require__(74), __webpack_require__(82), __webpack_require__(85), __webpack_require__(66), __webpack_require__(81), __webpack_require__(79), __webpack_require__(73), __webpack_require__(70), __webpack_require__(84), [__webpack_require__(86), { async: false, asyncGenerators: false }]] - }, - - // ES2015 preset with plugins set to loose mode. - // Based off https://github.com/bkonkle/babel-preset-es2015-loose/blob/master/index.js - 'es2015-loose': { - plugins: [[__webpack_require__(83), { loose: true }], __webpack_require__(76), __webpack_require__(75), __webpack_require__(68), __webpack_require__(69), [__webpack_require__(71), { loose: true }], __webpack_require__(78), __webpack_require__(80), __webpack_require__(130), [__webpack_require__(72), { loose: true }], [__webpack_require__(74), { loose: true }], __webpack_require__(82), __webpack_require__(85), __webpack_require__(66), [__webpack_require__(81), { loose: true }], __webpack_require__(79), [__webpack_require__(73), { loose: true }], __webpack_require__(70), __webpack_require__(84), [__webpack_require__(77), { loose: true }], [__webpack_require__(86), { async: false, asyncGenerators: false }]] - } - }); - - var version = exports.version = ("6.26.0"); - - // Listen for load event if we're in a browser and then kick off finding and - // running of scripts with "text/babel" type. - if (typeof window !== 'undefined' && window && window.addEventListener) { - window.addEventListener('DOMContentLoaded', function () { - return transformScriptTags(); - }, false); - } - - /** - * Transform - - - - - + + + + + + + + + + + - - - -
- - \ No newline at end of file + + + diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css deleted file mode 100644 index 9453385..0000000 --- a/public/stylesheets/style.css +++ /dev/null @@ -1,8 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} - -a { - color: #00B7FF; -} diff --git a/routes/index.js b/routes/index.js index 1b0c5e1..0b30997 100644 --- a/routes/index.js +++ b/routes/index.js @@ -2,27 +2,84 @@ var express = require('express'); var router = express.Router(); var alerts = require('../model/alerts.js'); var globe = require('../model/globedata.js'); +var cron = require('node-cron') +const path = require('path'); +var WebSocket = require('ws') +var http = require('http') /* GET home page. */ -router.get('/alerts', function(req, res, next) { +router.get('/display', function(req, res, next) { res.setHeader("Content-Type", "application/json"); - res.json(globe.getData()); + res.json(globe.getDisplayData()); }); +router.get('/', function(req, res, next) { + res.sendFile(path.join(__dirname, '../public/globe.html')); +}); +const server = http.createServer(router); +//initialize the WebSocket server instance +const wss = new WebSocket.Server({ server }); + + +wss.on('connection', (ws) => { + + //connection is up, let's add a simple simple event + ws.on('message', (message) => { + + //log the received message and send it back to the client + console.log('received: %s', message); + }); +}); +wss.broadcast = function broadcast(msg) { + console.log(msg); + wss.clients.forEach(function each(client) { + client.send(msg); + }); +}; +//start our server +server.listen(process.env.PORT || 8999, () => { + console.log(`Server started on port ${server.address().port} :)`); +}); + +router.get('/alert/:uid', function(req, res, next) { + const uid = req.params.uid + res.setHeader("Content-Type", "application/json"); + res.json(alerts.getAlert(uid)); +}); + +router.get('/alerts/dates', function(req, res, next) { + res.json(alerts.getAlertDates()); +}); + +var task = cron.schedule('* * * * *', () => { + const TEN_MINUTES = globe.getSettigns().timer.del*60*1000; + const date = new Date(); + alerts.getAlertDates().forEach(ad => { + var duration = Date.now() - ad.date.getTime(); + if (duration > TEN_MINUTES) { + const todel = ad.uids; + console.log(todel) + delTimer(todel, ad.date) + } + }) +}); + +function delTimer(todel, date){ + globe.delUids(todel) + alerts.delAlerts(todel) + alerts.delAlertDate(date) +} + router.post('/ws', async function(req, res, next) { for (const item of req.body.alerts) { - var log = { - src: item.srv_ip, - dest: item.cli_ip, - } - console.log(log) const uid = alerts.addAlert(item.first_seen, item.srv_city_name, item.ip_version, item.action, item.pool_id, item.srv_continent_name, item.score, item.entity_val, item.vlan_id, item.cli2srv_bytes, item.cli_country_name, item.entity_id, item.srv_asn, item.l7_proto, item.is_cli_attacker, item.srv_name, item.srv_ip, item.proto, item.json, item.srv_country_name, item.community_id, item.alert_id, item.is_srv_attacker, item.srv_blacklisted, item.alerts_map, item.srv_os, item.cli_localhost, item.cli_asn, item.srv2cli_packets, item.cli2srv_packets, item.tstamp, item.cli_name, item.cli_continent_name, item.srv2cli_bytes, item.l7_cat, item.ifid, item.observation_point_id, item.srv_localhost, item.cli_port, item.cli_blacklisted, item.dns_last_query, item.is_flow_alert, item.srv_port, item.l7_master_proto, item.is_cli_victim, item.cli_ip, item.cli_city_name, item.cli_os, item.is_srv_victim); const src = item.srv_ip; const dest = item.cli_ip; if (typeof src !== 'undefined' || typeof dest !== 'undefined') - await globe.addArc(src, dest, uid) + await globe.addArc(src, dest, uid, item.srv_name, item.cli_name) } + wss.broadcast("new data is da") res.sendStatus(200); })