Added personal scripts, started refactor

main
Ashelyn Dawn 6 months ago
parent 4136ab7107
commit 892fc92251
No known key found for this signature in database
GPG Key ID: D1980B8C6F349BC1

@ -0,0 +1,5 @@
export async function main(ns) {
while (true) {
await ns.hack(ns.getHostname());
}
}

@ -0,0 +1,18 @@
import { NS } from "@ns";
import { getControllerState } from "/lib/types-and-constants";
export function printStatus(ns : NS) {
const currentHackingLevel = ns.getHackingLevel()
const {knownServers} = getControllerState(ns)
const numServers = knownServers.length
const rootedServers = knownServers.filter(server => server.hasAdminRights).length
const backdooredServers = knownServers.filter(server => server.backdoorInstalled).length
const hackableServers = knownServers.filter(server => server.requiredHackingSkill && server.requiredHackingSkill <= currentHackingLevel).length
ns.print(`INFO: Current topology stats:\n`)
ns.print(` - known: ${numServers}`)
ns.print(` - hackable: ${hackableServers}`)
ns.print(` - rooted: ${rootedServers}`)
ns.print(` - backdoored: ${backdooredServers}`)
}

@ -0,0 +1,32 @@
import { NS, Server } from "@ns"
const datafile = "/data-state.txt"
interface ControllerState {
knownServers: Server[],
assignments: {
[droneHostname: string]: {
targetHostname: string,
attackMode: 'grow' | 'hack' | 'weaken',
}
},
previousAssignments: {
[droneHostname: string]: {
targetHostname: string,
attackMode: 'grow' | 'hack' | 'weaken',
}
}
}
export function getControllerState(ns : NS) : ControllerState {
return JSON.parse(ns.read(datafile) || `{
"knownServers": [],
"assignments": {},
"previousAssignments": {}
}`)
}
export function setControllerState(ns : NS, state : ControllerState) {
ns.write(datafile, JSON.stringify(state), 'w')
}

@ -0,0 +1,42 @@
import { NS } from "@ns";
import { printStatus } from "/lib/status";
const phaseScripts = [
'/tasks/01-discovery.js',
'/tasks/02-breaching.js',
'/tasks/03-targeting.js',
'/tasks/04-propogation.js',
]
const numPhases = phaseScripts.length
let currentPhase = 0
let pid = -1
export async function main(ns : NS) : Promise<void> {
ns.disableLog('ALL')
ns.tail()
ns.resizeTail(600, 200)
while (true) {
// Print status
ns.clearLog()
ns.print("currentPhase: " + phaseScripts[currentPhase])
printStatus(ns)
// If current phase is still running, delay and continue
if (ns.isRunning(pid)) {
await ns.sleep(100)
continue
}
// Advance to next phase
currentPhase = (currentPhase + 1) % numPhases
pid = ns.run(phaseScripts[currentPhase])
// In case of error
if (!pid) {
ns.print("Error starting " + phaseScripts[currentPhase])
break
}
}
}

@ -0,0 +1,34 @@
import { NS } from "@ns";
import { getControllerState, setControllerState } from "/lib/types-and-constants";
/** @param {NS} ns */
export async function main(ns : NS) : Promise<void> {
const datafileState = getControllerState(ns)
ns.print("INFO Starting automated scan . . .\n")
let foundServers : string[] = []
let serversToScan = datafileState.knownServers.map(server => server.hostname)
if(!serversToScan.length) {
serversToScan = ['home']
}
while (serversToScan.length) {
const currentServer = serversToScan.shift() as string
if(foundServers.includes(currentServer)) continue
foundServers = [...foundServers, currentServer]
ns.print(`INFO Scanning from ${currentServer}\n`)
const newVisibleServers = ns.scan(currentServer)
.filter(server => !foundServers.includes(server))
serversToScan = [...serversToScan, ...newVisibleServers]
if(newVisibleServers.length > 0)
ns.print(`SUCCESS - Discovered ${newVisibleServers.length} new servers to add to scan list\n`)
}
datafileState.knownServers = foundServers.map(ns.getServer)
setControllerState(ns, datafileState)
}

@ -0,0 +1,62 @@
import { NS } from "@ns";
import { getControllerState, setControllerState } from "/lib/types-and-constants";
export async function main(ns : NS) : Promise<void> {
const datafileState = getControllerState(ns)
const {knownServers} = datafileState
const portConfigs = [{
openProperty: 'sshPortOpen',
program: 'BruteSSH.exe',
func: ns.brutessh
}, {
openProperty: 'ftpPortOpen',
program: 'FTPCrack.exe',
func: ns.ftpcrack
}, {
openProperty: 'sqlPortOpen',
program: 'SQLInject.exe',
func: ns.sqlinject
}, {
openProperty: 'httpPortOpen',
program: 'HTTPWorm.exe',
func: ns.httpworm
}, {
openProperty: 'smtpPortOpen',
program: 'relaySMTP.exe',
func: ns.relaysmtp
}]
for (const server of knownServers) {
if (server.hostname === 'home' || server.hasAdminRights)
continue
const requiredPorts = server.numOpenPortsRequired ?? 0
const alreadyOpen = server.openPortCount ?? 0
const openablePorts = portConfigs.filter(port =>
!(server as any)[port.openProperty]
&& ns.fileExists(port.program))
const numberCanOpen = openablePorts.length
if (alreadyOpen + numberCanOpen < requiredPorts) {
ns.print(`WARN: Unable to nuke ${server.hostname}, cannot open enough ports (${alreadyOpen} + ${numberCanOpen} < ${requiredPorts})`)
continue
}
for (const port of openablePorts) {
ns.tprint(`INFO: Opening ${port.openProperty.replace('PortOpen', '')} on ${server.hostname}`)
port.func(server.hostname);
(server as any)[port.openProperty] = true
}
ns.tprint(`SUCCESS: Nuking ${server.hostname}`)
ns.nuke(server.hostname)
server.hasAdminRights = true
}
setControllerState(ns, {
...datafileState,
knownServers
})
}

@ -0,0 +1,5 @@
import { NS } from "@ns";
export async function main(ns : NS) : Promise<void> {
}

@ -0,0 +1,26 @@
import { NS } from "@ns";
import { getControllerState } from "/lib/types-and-constants";
export async function main(ns : NS) : Promise<void> {
const {knownServers} = getControllerState(ns)
const playerHackingSkill = ns.getHackingLevel()
for (const server of knownServers) {
if(!server.hasAdminRights || server.hostname === 'home')
continue
if(server.requiredHackingSkill > playerHackingSkill)
continue
ns.scp('auto-hack.js', server.hostname)
const ramCost = ns.getScriptRam('auto-hack.js')
const ramAvail = server.maxRam - server.ramUsed
const numThreads = Math.floor(ramAvail / ramCost)
if (numThreads < 1)
continue
ns.exec('auto-hack.js', server.hostname, numThreads)
}
await ns.sleep(10000)
}

@ -1,5 +0,0 @@
import { NS } from "@ns";
export async function main(ns: NS): Promise<void> {
ns.tprint("Hello Remote API!");
}
Loading…
Cancel
Save