grow helpers

This commit is contained in:
2022-09-10 20:42:31 +02:00
parent b0abc2a614
commit 7b393a7ffc
12 changed files with 281 additions and 111 deletions
+91 -70
View File
@@ -2,6 +2,13 @@
export async function main(ns) {
// ns.disableLog('ALL');
async function writeLog(type, obj) {
let timestamp = '';
await ns.tryWritePort(2, `t${timestamp}_${type} = ${obj};\n`);
if (['ERROR', 'TERMINAL'].indexOf(type) != -1) ns.tprint(`${timestamp} ${type} = ${obj}`);
}
/**
* @constant
* @default
@@ -23,7 +30,7 @@ export async function main(ns) {
EXPLOITS.forEach(exploit => {
if (ns.fileExists(exploit)) ++maxPorts;
});
// ns.tprint(`Max ports for hacking ${maxPorts}`);
// ns.tryWritePort(2, `Max ports for hacking ${maxPorts}`);
return maxPorts;
}
@@ -48,17 +55,17 @@ export async function main(ns) {
/** @function runHack
* Recursively scan, try to nuke and hack servers in the network
* @param {string} server server to nuke and hack
* @returns {number} exit code; if negative error, if positive hack script PID, if 0 already running
* @returns {Promise<number>} exit code; if negative error, if positive hack script PID, if 0 already running
*/
function runHack(server) {
async function runHack(server) {
let script = 'simple-hack.js';
let serverStatus = analyzeServer(server);
ns.tprint(`${server}: ${JSON.stringify(serverStatus)}`);
await writeLog('ANALYZE', `{server: "${server}", status: ${JSON.stringify(serverStatus)}}`);
if (!serverStatus.rootAccess) {
if (serverStatus.nukeAvailable) {
ns.tprint(`Nuking ${server}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`);
await writeLog('NUKE', `"Nuking ${server}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"`);
for (let i = 0; i < maxPortsToHack(); ++i) {
switch (EXPLOITS[i]) {
case 'BruteSSH.exe':
@@ -91,8 +98,8 @@ export async function main(ns) {
if (serverStatus.rootAccess) {
if (!ns.fileExists(script, 'home')) {
ns.tprint(`Script '${script}' doesn't exist!`);
return -3;
await writeLog('ERROR', `"Script '${script}' doesn't exist!"`);
// return -3;
}
ns.scp(script, server, 'home');
@@ -105,20 +112,21 @@ export async function main(ns) {
let a = ns.scriptRunning(script, server);
if (!a) {
if (maxThreads == 0) {
ns.tprint(`Not enough ram to run '${script}' on '${server}', ${scriptRam}/${serverFreeRam}!`);
// await writeLog('ERROR', `"Not enough ram to run '${script}' on '${server}', ${scriptRam}/${serverFreeRam}!"`);
return -4;
}
let execExitCode = ns.exec(script, server, maxThreads, server);
ns.tprint(`post exec ${execExitCode}`);
if (!execExitCode) {
ns.tprint(`Exec error running script '${script} on '${server}!`);
// await writeLog('ERROR', `"Exec error running script '${script} on '${server}!"`);
return -5;
}
else {
return execExitCode;
}
} else {
ns.tprint(`Hack already running on ${server}`);
// await writeLog('ERROR', `"Hack already running on ${server}"`);
return 0;
}
}
@@ -126,82 +134,95 @@ export async function main(ns) {
return -6;
}
let nukedServers = ['home', 'CSEC'];
// let nukedServers = ['home', 'CSEC', 'avmnite-02h'];
// /**
// * Recursively scan, try to nuke and hack servers in the network
// * @async
// * @param {string} server server to scan
// */
// async function scanServer(server, maxDepth = Number.MAX_SAFE_INTEGER, depth = 1) {
// if (depth <= maxDepth) {
// let availableServers = ns.scan(server);
// // hack servers in current scan
// for (let i = 0; i < availableServers.length; ++i) {
// await writeLog('SCAN', `{server: "${availableServers[i]}", index: ${nukedServers.indexOf(availableServers[i])}, available: ["${availableServers.toString().replaceAll(',','","')}"]}`);
// if (nukedServers.indexOf(availableServers[i]) == -1) {
// nukedServers.push(availableServers[i]);
// await scanServer(availableServers[i], maxDepth, depth + 1);
// let hackExitCode = await runHack(availableServers[i]);
// if (hackExitCode == 0) {
// await writeLog('HACK', `"Hack already running on ${availableServers[i]}"`);
// } if (hackExitCode == -6) {
// await writeLog('HACK', `"No root access to ${availableServers[i]}!"`);
// } else {
// if (hackExitCode < 0) {
// await writeLog('ERROR', `"Hack exec ERROR on '${availableServers[i]}': ${hackExitCode}!"`);
// } else {
// await writeLog('HACK', `"Hack started on '${availableServers[i]}'"`);
// }
// }
// }
// }
// }
// await ns.sleep(10);
// }
let excludeServers = ['home'];
for (let index = 0; index < 25; index++) {
excludeServers.push(`home-${index}`);
}
excludeServers.push('CSEC');
excludeServers.push('avmnite-02h');
/**
* Recursively scan, try to nuke and hack servers in the network
* Recursively kill simple-hack.js running on servers in the network
* @async
* @param {string} server server to scan
* @param {string} currentServer server to scan
*/
async function scanServer(server, maxDepth = Number.MAX_SAFE_INTEGER, depth = 1) {
async function scanServer(currentServer, maxDepth = Number.MAX_SAFE_INTEGER, depth = 1, previousServer = currentServer) {
if (depth <= maxDepth) {
let availableServers = ns.scan(server);
let availableServers = ns.scan(currentServer);
// hack servers in current scan
for (let i = 0; i < availableServers.length; ++i) {
ns.tprint(`${availableServers[i]} ${nukedServers.indexOf(availableServers[i])} ${nukedServers}`);
if (nukedServers.indexOf(availableServers[i]) == -1) {
nukedServers.push(availableServers[i]);
await scanServer(availableServers[i], maxDepth, depth + 1);
let hackExitCode = runHack(availableServers[i]);
let nextServer = availableServers[i];
if (hackExitCode == 0) {
ns.tprint(`Hack already running on ${availableServers[i]}`);
} if (hackExitCode == -6) {
ns.tprint(`No root access to ${availableServers[i]}!`);
} else {
if (hackExitCode < 0) {
ns.tprint(`Hack exec ERROR on '${availableServers[i]}': ${hackExitCode}!`);
if (nextServer != currentServer && nextServer != previousServer) {
if (excludeServers.indexOf(nextServer) == -1) {
let hackExitCode = await runHack(nextServer);
if (hackExitCode == 0) {
await writeLog('HACK', `"Hack already running on ${nextServer}"`);
} else if (hackExitCode == -6) {
await writeLog('HACK', `"No root access to ${nextServer}!"`);
} else if (hackExitCode == -4) {
await writeLog('HACK', `"Not enough RAM to run script on ${nextServer}!"`);
} else {
ns.tprint(`Hack started on '${availableServers[i]}'`);
if (hackExitCode < 0) {
await writeLog('ERROR', `"Hack exec ERROR on '${nextServer}': ${hackExitCode}!"`);
} else {
await writeLog('HACK', `"Hack started on '${nextServer}'"`);
}
}
}
await scanServer(nextServer, maxDepth, depth + 1, currentServer);
}
}
}
await ns.sleep(10);
}
let runDepth = ns.args.length ? ns.args[0] : 1;
ns.tprint(`Running scan depth: ${runDepth}`);
await scanServer('home', );
ns.write('nuke-log.js', '', 'w');
if (!ns.scriptRunning('simple-hack.js', 'n00dles')) ns.write('hack-log.js', '', 'w');
ns.tprint(`TERMINAL = "Running scan depth: ${runDepth}"`);
// let serversToNuke = {};
// let availableServers = { "home": "home" };
// for (let depth = 0; depth < 2; ++depth) {
// for (const key in availableServers) {
// if (Object.hasOwnProperty.call(availableServers, key)) {
// const element = availableServers[key];
// ns.scan(element).forEach(elem => {
// availableServers[elem] = elem;
// });
// }
// }
// }
// ns.tprint(availableServers);
// for (const element in availableServers) {
// ns.tprint(`start loop ${element}`);
// if (element != 'home' && element != 'CSEC') {
// let hackExitCode = runHack(element);
// if (hackExitCode == 0) {
// ns.tprint(`Hack already running on ${element}`);
// } if (hackExitCode == -6) {
// ns.tprint(`No root access to ${element}`);
// } else {
// if (hackExitCode < 0) {
// ns.tprint(`Hack exec ERROR on '${element}': ${hackExitCode}!`);
// } else {
// ns.tprint(`Hack started on '${element}'`);
// }
// }
// }
// }
await ns.sleep(10);
while (true) {
await writeLog('INFO', `"Running scan depth: ${runDepth}"`);
await scanServer('home',);
await ns.sleep(600000);
}
}