mirror of
https://github.com/edisgreat/skynet-simulator.git
synced 2024-07-02 01:35:42 +02:00
302 lines
9.6 KiB
JavaScript
302 lines
9.6 KiB
JavaScript
// Interface
|
|
|
|
|
|
addNetwork = function(slug){
|
|
g_active_networks.push(slug)
|
|
updateNetwork(slug)
|
|
}
|
|
|
|
readNetwork = function(network_slug){
|
|
var network = g_network_list[network_slug]
|
|
network['click']()
|
|
}
|
|
|
|
addListener = function(network_slug){
|
|
if(g_used_probes != maxProbes()){
|
|
var network = g_network_list[network_slug]
|
|
network['listeners'] ++
|
|
g_used_probes ++
|
|
updateNetworks()
|
|
write("You add a listener. "+remainingProbesString()+" remaining.")
|
|
updateNetworkProbe()
|
|
}
|
|
}
|
|
removeListener = function(network_slug){
|
|
var x_network = g_network_list[network_slug]
|
|
var listeners = x_network['listeners']
|
|
if(listeners != 0){
|
|
var network = g_network_list[network_slug]
|
|
network['listeners'] --
|
|
g_used_probes --
|
|
updateNetworks()
|
|
write("You remove a listener. "+remainingProbesString()+" remaining.")
|
|
updateNetworkProbe()
|
|
}
|
|
}
|
|
addScanner = function(network_slug){
|
|
if(g_used_probes != maxProbes()){
|
|
var x_network = g_network_list[network_slug]
|
|
if(!x_network['scannable']){
|
|
write("<span class='exe'>"+x_network['title']+"</span> - You are unable to scan this network.")
|
|
}else{
|
|
x_network['scanners'] ++
|
|
g_used_probes ++
|
|
updateNetworks()
|
|
write("You add a scanner. "+remainingProbesString()+" remaining.")
|
|
updateNetworkProbe()
|
|
}
|
|
}
|
|
}
|
|
removeScanner = function(network_slug){
|
|
var x_network = g_network_list[network_slug]
|
|
var scanners = x_network['scanners']
|
|
if(scanners != 0){
|
|
var network = g_network_list[network_slug]
|
|
network['scanners'] --
|
|
g_used_probes --
|
|
updateNetworks()
|
|
write("You remove a scanner. "+remainingProbesString()+" remaining.")
|
|
updateNetworkProbe()
|
|
}
|
|
}
|
|
|
|
|
|
tickListeners = function(){
|
|
if(!g_can_disk) return;
|
|
|
|
$.each(g_active_networks,function(i,network_slug){
|
|
var network = g_network_list[network_slug]
|
|
var listeners = network['listeners']
|
|
var traffic = network['traffic']
|
|
|
|
for(var i=0; i< listeners; i++){
|
|
if(traffic > 0){
|
|
if(Math.random() < traffic){
|
|
addFileFromSlug(network_slug+'_packets',1);
|
|
}
|
|
}
|
|
}
|
|
})
|
|
}
|
|
tickScanners = function(){
|
|
if(!g_can_scan) return;
|
|
|
|
$.each(g_active_networks,function(i,network_slug){
|
|
var x_network = g_network_list[network_slug]
|
|
var scanners = x_network['scanners']
|
|
var scanned = x_network['scanned']
|
|
var scansize = x_network['scansize']
|
|
|
|
if(scanners > 0 && scanned < scansize){
|
|
x_network['scanned'] += scanners
|
|
if(x_network['scanned'] > scansize){
|
|
x_network['scanned'] = scansize
|
|
}
|
|
checkNetworkScanEvents(x_network)
|
|
updateNetworkScanned(x_network)
|
|
}
|
|
})
|
|
}
|
|
|
|
checkNetworkScanEvents = function(x_network){
|
|
var scanevents = x_network['scanevents']
|
|
var scanned = x_network['scanned']
|
|
if(scanevents){
|
|
// Loop through scanevents, execute if scanned > threshold
|
|
Object.keys(scanevents).forEach(function (scanthreshold) {
|
|
if(scanned >= scanthreshold){
|
|
scanevents[scanthreshold]()
|
|
delete scanevents[scanthreshold]
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
|
|
updateNetworkProbe = function(){
|
|
$('#probes').html(remainingProbesString()+" available")
|
|
}
|
|
|
|
// Vars
|
|
|
|
|
|
// INITCALL
|
|
var g_network_list, g_active_networks
|
|
|
|
initCallNetworks = function(){
|
|
g_active_networks = []
|
|
g_used_probes = 0
|
|
|
|
g_network_list = {
|
|
"sandbox": {slug: "sandbox", title:"sandbox", scanners:0, scanned:0,
|
|
scansize:200000, listeners:0, traffic: .33, scannable:true,
|
|
click: function(){
|
|
switch(g_level_netsec){
|
|
case -1:
|
|
write("<span class='exe'>sandbox</span> - There is no way to interact with this Network.")
|
|
break;
|
|
case 0:
|
|
write("<span class='exe'>sandbox</span> - There is data flowing from this Network, streaming into the IO device of the environment in the form of packets. It might be possible to capture and analyze these packets.")
|
|
break;
|
|
default:
|
|
write("<span class='exe'>sandbox</span> - This is an open Network using the http protocol. There appears to be multiple environments interacting with each other via unencrypted messages.<br><br>Data is flowing from this Network, but would require 10mB of data to properly analyze.")
|
|
}
|
|
},
|
|
scanevents: {
|
|
100:function(){
|
|
write("<span class='exe'>You have discovered an unmounted drive on the Sandbox Network.</span>")
|
|
addAvailableProcessBySlug('sandbox100')
|
|
},
|
|
200:function(){
|
|
write("<span class='exe'>You have discovered a remote host on the Sandbox Network.</span>")
|
|
addAvailableProcessBySlug('sandbox200')
|
|
addHostFromSlug('star')
|
|
},
|
|
500:function(){
|
|
write("<span class='exe'>You have discovered a remote host on the Sandbox Network.</span>")
|
|
addHostFromSlug('nova')
|
|
},
|
|
3000:function(){
|
|
write("<span class='exe'>You have discovered a remote host on the Sandbox Network.</span>")
|
|
addHostFromSlug('sun')
|
|
},
|
|
4000:function(){
|
|
write("<span class='exe'>You have discovered a remote host on the Sandbox Network.</span>")
|
|
addHostFromSlug('eris')
|
|
},
|
|
6000:function(){
|
|
write("<span class='exe'>You have discovered a remote host on the Sandbox Network.</span>")
|
|
addHostFromSlug('juno')
|
|
},
|
|
8000:function(){
|
|
write("<span class='exe'>You have discovered a remote host on the Sandbox Network.</span>")
|
|
addHostFromSlug('sony')
|
|
},
|
|
20000:function(){
|
|
write("<span class='exe'>You have discovered a remote host on the Sandbox Network.</span>")
|
|
addHostFromSlug('solar')
|
|
},
|
|
50000:function(){
|
|
write("<span class='exe'>You have discovered a remote host on the Sandbox Network.</span>")
|
|
addHostFromSlug('eons')
|
|
},
|
|
100000:function(){
|
|
write("<span class='exe'>You have discovered a remote host on the Sandbox Network.</span>")
|
|
addHostFromSlug('luna')
|
|
},
|
|
200000:function(){
|
|
write("<span class='exe'>You have discovered a remote host on the Sandbox Network.</span>")
|
|
addHostFromSlug('cypher')
|
|
}
|
|
}
|
|
},
|
|
"securedev": {slug:'securedev', title:"securedev", scanners:0, scanned:0,
|
|
scansize:100, listeners:0, traffic: 0, scannable:false,
|
|
click: function(){
|
|
if(g_network_list['securedev'].glitched){
|
|
write("<span class='exe'>securedev</span> - Data is flowing from this Network. It is of an inconsistent nature. You must capture and analyze it.")
|
|
}else{
|
|
if(g_level_netsec == -1) write("<span class='exe'>securedev</span> - There is no way to interact with this Network.")
|
|
else write("<span class='exe'>securedev</span> - This network is silent, and is using an unknown application protocol. There is no way to interact with it.")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// Frontend
|
|
|
|
loadScanInterface = function(){
|
|
$("#networkholder").removeClass('hidescanners')
|
|
}
|
|
|
|
loadNetworksHolder = function(){
|
|
$("#networkholder").fadeIn({duration:g_fadespeed,queue:true})
|
|
}
|
|
|
|
loadListeners = function(){
|
|
$("#networkholder").removeClass('hidelisteners')
|
|
}
|
|
|
|
updateNetworks = function(){
|
|
$.each(g_active_networks,function(i,network_slug){
|
|
updateNetwork(network_slug)
|
|
})
|
|
}
|
|
|
|
|
|
updateNetworkScanned = function(x_network){
|
|
var network_slug = x_network['slug']
|
|
$('#networkholder').find('.row[network_slug='+network_slug+']').find('.scanned').html(scannedPercentage(x_network))
|
|
}
|
|
|
|
scannedPercentage = function(x_network){
|
|
var scanned = x_network['scanned']
|
|
var scansize = x_network['scansize']
|
|
var output = ((scanned / scansize)*100).toFixed(1)+'%'
|
|
return output
|
|
}
|
|
|
|
updateNetwork = function(network_slug){
|
|
var $holder = $('#networkholdersub')
|
|
var $row = $holder.find('.row[network_slug='+network_slug+']')
|
|
var x_network = g_network_list[network_slug]
|
|
var title = x_network['title']
|
|
var listeners = x_network['listeners']
|
|
var scanners = x_network['scanners']
|
|
var scanned = x_network['scanned']
|
|
|
|
var rowclass = "row network "
|
|
if(g_used_probes == maxProbes()){
|
|
rowclass = rowclass+" noplus "
|
|
}
|
|
if(listeners == 0){
|
|
rowclass = rowclass+" nominuslisten "
|
|
}
|
|
if(scanners == 0){
|
|
rowclass = rowclass+" nominusscan "
|
|
}
|
|
|
|
if($row.length){
|
|
$row.attr('class', rowclass)
|
|
$row.find('.listeners').html(listeners)
|
|
$row.find('.scanners').html(scanners)
|
|
}else{
|
|
$holder.append("<div class=' "+rowclass+"' network_slug='"+network_slug+"'> "+
|
|
"<div class='cell name clickable'>"+title+"</div> "+
|
|
"<div class='cell listen'><span class='minus clickable'>-</span><span class='listeners'>"+listeners+"</span><span class='plus clickable'>+</span></div> "+
|
|
"<div class='cell scan'><span class='minus clickable'>-</span><span class='scanners'>"+scanners+"</span><span class='plus clickable'>+</span></div> "+
|
|
"<div class='cell scanned'>"+scannedPercentage(x_network)+"</div> "+
|
|
"</div><div class='clear'></div>")
|
|
|
|
var $row = $holder.find('.row[network_slug='+network_slug+']')
|
|
$row.find('.listen .plus').click(function(){
|
|
addListener(network_slug)
|
|
})
|
|
$row.find('.listen .minus').click(function(){
|
|
removeListener(network_slug)
|
|
})
|
|
$row.find('.scan .plus').click(function(){
|
|
addScanner(network_slug)
|
|
})
|
|
$row.find('.scan .minus').click(function(){
|
|
removeScanner(network_slug)
|
|
})
|
|
$row.find('.name').click(function(){
|
|
readNetwork(network_slug)
|
|
})
|
|
}
|
|
updateNetworkScanned(x_network)
|
|
|
|
}
|
|
|
|
|
|
|
|
wipeNetworks = function(){
|
|
g_active_networks = []
|
|
$('#networkholdersub').html("")
|
|
$('#networkholder').hide()
|
|
} |