forked from p15670423/monkey
Add scan lines
This commit is contained in:
parent
92ba526265
commit
6895549bbe
|
@ -1,6 +1,9 @@
|
||||||
const jsonFile = "/api/monkey";
|
const jsonFile = "/api/monkey";
|
||||||
|
const jsonFileTelemetry = "/api/telemetry";
|
||||||
var monkeys = null;
|
var monkeys = null;
|
||||||
|
var scannedMachines = [];
|
||||||
var generationDate = null;
|
var generationDate = null;
|
||||||
|
var temelGenerationDate = null;
|
||||||
|
|
||||||
// The JSON must be fully loaded before onload() happens for calling draw() on 'monkeys'
|
// The JSON must be fully loaded before onload() happens for calling draw() on 'monkeys'
|
||||||
$.ajaxSetup({
|
$.ajaxSetup({
|
||||||
|
@ -13,6 +16,7 @@ $.getJSON(jsonFile, function(json) {
|
||||||
generationDate = json.timestamp;
|
generationDate = json.timestamp;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// The objects used by vis
|
// The objects used by vis
|
||||||
var network = null;
|
var network = null;
|
||||||
var nodes = [];
|
var nodes = [];
|
||||||
|
@ -24,6 +28,7 @@ const ICONS_EXT = ".png";
|
||||||
|
|
||||||
const EDGE_TYPE_PARENT = "parent";
|
const EDGE_TYPE_PARENT = "parent";
|
||||||
const EDGE_TYPE_TUNNEL = "tunnel";
|
const EDGE_TYPE_TUNNEL = "tunnel";
|
||||||
|
const EDGE_TYPE_SCAN = "scan";
|
||||||
|
|
||||||
// General options
|
// General options
|
||||||
// If variable from local storage != null, assign it, otherwise set it's default value.
|
// If variable from local storage != null, assign it, otherwise set it's default value.
|
||||||
|
@ -47,6 +52,8 @@ function initAdmin() {
|
||||||
|
|
||||||
createEdges();
|
createEdges();
|
||||||
createTunnels();
|
createTunnels();
|
||||||
|
createScanned();
|
||||||
|
|
||||||
var data = {
|
var data = {
|
||||||
nodes: createNodes(),
|
nodes: createNodes(),
|
||||||
edges: edges
|
edges: edges
|
||||||
|
@ -118,7 +125,7 @@ function updateMonkeys() {
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
monkeys.push(new_monkeys[i]);
|
monkeys.push(new_monkeys[i]);
|
||||||
nodes.push(createNode(new_monkeys[i]));
|
nodes.push(createMonkeyNode(new_monkeys[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,9 +133,10 @@ function updateMonkeys() {
|
||||||
{
|
{
|
||||||
createEdges();
|
createEdges();
|
||||||
createTunnels();
|
createTunnels();
|
||||||
|
|
||||||
network.setData({nodes: nodes, edges: edges});
|
network.setData({nodes: nodes, edges: edges});
|
||||||
}
|
}
|
||||||
|
createScanned();
|
||||||
window.setTimeout(updateMonkeys, 10000);
|
window.setTimeout(updateMonkeys, 10000);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -140,13 +148,13 @@ function createNodes() {
|
||||||
for (var i = 0; i < monkeys.length; i++) {
|
for (var i = 0; i < monkeys.length; i++) {
|
||||||
var monkey = monkeys[i];
|
var monkey = monkeys[i];
|
||||||
|
|
||||||
nodes.push(createNode(monkey));
|
nodes.push(createMonkeyNode(monkey));
|
||||||
}
|
}
|
||||||
return nodes;
|
return nodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function createNode(monkey) {
|
function createMonkeyNode(monkey) {
|
||||||
var title = undefined;
|
var title = undefined;
|
||||||
var img = "monkey";
|
var img = "monkey";
|
||||||
|
|
||||||
|
@ -173,6 +181,21 @@ function createNode(monkey) {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function createMachineNode(machine) {
|
||||||
|
img = ICONS_DIR + "computer" + ICONS_EXT;
|
||||||
|
|
||||||
|
return {
|
||||||
|
'id': machine.ip_addr,
|
||||||
|
'label': machine.os.version + "\n" + machine.ip_addr,
|
||||||
|
'shape': 'image',
|
||||||
|
'color': undefined,
|
||||||
|
'image': img,
|
||||||
|
'title': undefined,
|
||||||
|
'value': undefined,
|
||||||
|
'mass': 0,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
function createEdges() {
|
function createEdges() {
|
||||||
for (var i = 0; i < monkeys.length; i++) {
|
for (var i = 0; i < monkeys.length; i++) {
|
||||||
var monkey = monkeys[i];
|
var monkey = monkeys[i];
|
||||||
|
@ -203,6 +226,42 @@ function createTunnels() {
|
||||||
return edges;
|
return edges;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function createScanned() {
|
||||||
|
//For each existing monkey, gets all the scans performed by it
|
||||||
|
//For each non exploited machine, adds a new node and connects it as a scanned node.
|
||||||
|
for (var i = 0; i < monkeys.length; i++) {
|
||||||
|
var monkey = monkeys[i];
|
||||||
|
//Get scans for each monkey
|
||||||
|
// Reading the JSON file containing the monkeys' informations
|
||||||
|
$.getJSON(jsonFileTelemetry +'?timestamp='+ temelGenerationDate+ "&monkey_guid=" + monkey.guid+"&telem_type=scan", function(json) {
|
||||||
|
temelGenerationDate = json.timestamp;
|
||||||
|
var scans = json.objects;
|
||||||
|
for (var i = 0; i < scans.length; i++) {
|
||||||
|
var scan = scans[i];
|
||||||
|
//Check if we already exploited this machine from another PoV, if so no point in scanning.
|
||||||
|
if (null != getMonkeyByIP(scan.data.machine.ip_addr)) {
|
||||||
|
//if so, make sure we don't already have such a node
|
||||||
|
nodes = nodes.filter(function (node) {
|
||||||
|
return (node.id != ip_addr);
|
||||||
|
});
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//And check if we've already added this scanned machine
|
||||||
|
var machineNode = getScannedByIP(scan.data.machine.ip_addr)
|
||||||
|
if (null == machineNode) {
|
||||||
|
machineNode = createMachineNode(scan.data.machine);
|
||||||
|
scannedMachines.push(machineNode);
|
||||||
|
nodes.push(machineNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!edgeExists([monkey.id, machineNode.id, EDGE_TYPE_SCAN])) {
|
||||||
|
edges.push({from: monkey.id, to: machineNode.id, arrows:'middle', type: EDGE_TYPE_SCAN, color: 'red'});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds node description
|
* Builds node description
|
||||||
*/
|
*/
|
||||||
|
@ -486,6 +545,29 @@ function getMonkeyByGuid(guid) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getMonkeyByIP(ip) {
|
||||||
|
for (var i = 0; i < monkeys.length; i++) {
|
||||||
|
var monkey = monkeys[i];
|
||||||
|
for (var j = 0; j< monkey.ip_addresses; j++) {
|
||||||
|
if (monkeys[i].ip == ip) {
|
||||||
|
return monkeys[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getScannedByIP(ip)
|
||||||
|
{
|
||||||
|
for (var i = 0; i < scannedMachines.length; i++) {
|
||||||
|
var machine = scannedMachines[i];
|
||||||
|
if (machine.id == ip) {
|
||||||
|
return machine
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
function getMonkeyIndex(guid) {
|
function getMonkeyIndex(guid) {
|
||||||
for (var i = 0; i < monkeys.length; i++) {
|
for (var i = 0; i < monkeys.length; i++) {
|
||||||
if (monkeys[i].guid == guid) {
|
if (monkeys[i].guid == guid) {
|
||||||
|
|
Loading…
Reference in New Issue