-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathautoNuke.js
More file actions
103 lines (89 loc) · 4.08 KB
/
autoNuke.js
File metadata and controls
103 lines (89 loc) · 4.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
export async function main(ns) {
async function scanServers(serverList, visitedServers) {
for (const server of serverList) {
if (visitedServers.has(server)) {
continue;
}
if (!ns.hasRootAccess(server)) {
serversNoRootAccess.add(server);
}
if (ns.hasRootAccess(server) && server !== "home" && server !== ns.getHostname()) {
visitedServers.add(server);
const subServers = ns.scan(server);
await scanServers(subServers, visitedServers);
}
}
}
async function checkCanHackServer(server) {
const playerHackingLevel = ns.getHackingLevel();
const serverHackingLevel = ns.getServerRequiredHackingLevel(server);
var ableToHack = false;
if (serverHackingLevel <= playerHackingLevel) {
var openPortsRequired = ns.getServerNumPortsRequired(server);
if (openPortsRequired >= 5) {
if (ns.fileExists("BruteSSH.exe", "home") && ns.fileExists("FTPCrack.exe", "home") && ns.fileExists("relaySMTP.exe", "home") && ns.fileExists("HTTPWorm.exe", "home") && ns.fileExists("SQLInject.exe", "home")) {
ableToHack = true;
}
} else if (openPortsRequired >= 4) {
if (ns.fileExists("BruteSSH.exe", "home") && ns.fileExists("FTPCrack.exe", "home") && ns.fileExists("relaySMTP.exe", "home") && ns.fileExists("HTTPWorm.exe", "home")) {
ableToHack = true;
}
} else if (openPortsRequired >= 3) {
if (ns.fileExists("BruteSSH.exe", "home") && ns.fileExists("FTPCrack.exe", "home") && ns.fileExists("relaySMTP.exe", "home")) {
ableToHack = true;
}
} else if (openPortsRequired >= 2) {
if (ns.fileExists("BruteSSH.exe", "home") && ns.fileExists("FTPCrack.exe", "home")) {
ableToHack = true;
}
} else if (openPortsRequired >= 1) {
if (ns.fileExists("BruteSSH.exe", "home")) {
ableToHack = true;
}
} else {
ableToHack = true;
}
}
return ableToHack;
}
function hackServer(server) {
var openPortsRequired = ns.getServerNumPortsRequired(server);
if (openPortsRequired >= 5) {
ns.brutessh(server);
ns.ftpcrack(server);
ns.relaysmtp(server);
ns.httpworm(server);
ns.sqlinject(server);
} else if (openPortsRequired >= 4) {
ns.brutessh(server);
ns.ftpcrack(server);
ns.relaysmtp(server);
ns.httpworm(server);
} else if (openPortsRequired >= 3) {
ns.brutessh(server);
ns.ftpcrack(server);
ns.relaysmtp(server);
} else if (openPortsRequired >= 2) {
ns.brutessh(server);
ns.ftpcrack(server);
} else if (openPortsRequired >= 1) {
ns.brutessh(server);
}
ns.nuke(server);
if (ns.hasRootAccess(server)) {
ns.tprint(`Gained Root Access on Server: ${server} (Required Hack LvL: ${ns.getServerRequiredHackingLevel(server)}) (Required Open Ports: ${ns.getServerNumPortsRequired(server)})`)
} else {
ns.tprint(`Failed to Gain Root Access on Server: ${server} (Required Hack LvL: ${ns.getServerRequiredHackingLevel(server)}) (Required Open Ports: ${ns.getServerNumPortsRequired(server)})`)
}
}
const visitedServers = new Set();
const serversNoRootAccess = new Set();
await scanServers(ns.scan(ns.getHostname()), visitedServers);
for (const server of serversNoRootAccess) {
if (await checkCanHackServer(server)) {
await hackServer(server)
} else {
ns.tprint(`Not all requirements have been met to NUKE: ${server} (Required Hack LvL: ${ns.getServerRequiredHackingLevel(server)}) (Required Open Ports: ${ns.getServerNumPortsRequired(server)})`)
}
}
}