Advertisement
Guest User

Untitled

a guest
Apr 27th, 2021
1,790
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.58 KB | None | 0 0
  1. //cascadeScript.js:
  2.  
  3. export async function main(ns) {
  4. let loggingEnabled = true;
  5. let detailedLoggingEnabled = true;
  6.  
  7. if (!ns.args[0])
  8. {
  9. log("No input arg", true, ns);
  10. ns.exit();
  11. }
  12.  
  13. let scriptName = ns.args[0];
  14. ns.args.shift();
  15.  
  16. if (!ns.fileExists(scriptName, "home"))
  17. {
  18. log("Script does not exist", true, ns);
  19. ns.exit();
  20. }
  21. let scriptSize = ns.getScriptRam(scriptName, "home");
  22.  
  23. log("Cascading script: \"" + scriptName + "\"", loggingEnabled, ns);
  24. log("Size of script: " + scriptSize + "gb", loggingEnabled, ns);
  25.  
  26. let updatedServers = [];
  27.  
  28. let serverCounter = replaceScriptInServer("home", updatedServers, scriptName, scriptSize, loggingEnabled, detailedLoggingEnabled, ns);
  29.  
  30. log("Number of servers script cascaded to: " + serverCounter, loggingEnabled, ns);
  31. }
  32.  
  33. function log(logText, shouldLog, ns) {
  34. if (shouldLog)
  35. {
  36. ns.tprint(logText);
  37. }
  38. }
  39.  
  40. function replaceScriptInServer(serverToUpdate, updatedServers, scriptName, scriptSize, loggingEnabled, detailedLoggingEnabled, ns) {
  41. let serverCounter = 0;
  42.  
  43. if (updatedServers.includes(serverToUpdate))
  44. {
  45. return 0;
  46. }
  47.  
  48. updatedServers.push(serverToUpdate);
  49.  
  50. crackServer(serverToUpdate, detailedLoggingEnabled, ns);
  51. cascadeScriptToServer(scriptName, serverToUpdate, scriptSize, loggingEnabled, detailedLoggingEnabled, ns);
  52.  
  53. serverCounter++;
  54.  
  55. let nearbyServers = ns.scan(serverToUpdate);
  56.  
  57. for (let nearbyServer of nearbyServers)
  58. {
  59. serverCounter += replaceScriptInServer(nearbyServer, updatedServers, scriptName, scriptSize, loggingEnabled, detailedLoggingEnabled, ns);
  60. }
  61.  
  62. return serverCounter;
  63. }
  64.  
  65. function cascadeScriptToServer(scriptName, server, scriptSize, loggingEnabled, detailedLoggingEnabled, ns)
  66. {
  67. killScript(scriptName, server, detailedLoggingEnabled, ns);
  68.  
  69. if (server !== "home")
  70. {
  71. log("Replacing script on: " + server, loggingEnabled, ns);
  72.  
  73. removeExistingScript(scriptName, server, detailedLoggingEnabled, ns);
  74. ns.scp(scriptName, "home", server);
  75. }
  76.  
  77. runScriptWithMaxThreads(scriptName, server, scriptSize, detailedLoggingEnabled, ns);
  78. }
  79.  
  80. function killScript(scriptName, server, shouldLog, ns) {
  81. log("Attempting to kill script '" + scriptName + "' instances on server: " + server, shouldLog, ns);
  82. if (ns.scriptRunning(scriptName, server))
  83. {
  84. log("Script running on server", shouldLog, ns);
  85.  
  86. //use if you want to terminate all running scripts (outside of home computer)
  87. /*if (server !== "home")
  88. {
  89. ns.killall(server);
  90. }*/
  91.  
  92. let result = ns.scriptKill(scriptName, server);
  93.  
  94. if (result)
  95. {
  96. log("All version of script killed", shouldLog, ns);
  97. }
  98. else
  99. {
  100. log("Failed to kill script(s)", shouldLog, ns);
  101. }
  102. }
  103. }
  104.  
  105. function removeExistingScript(scriptName, server, shouldLog, ns)
  106. {
  107. if (ns.fileExists(scriptName, server))
  108. {
  109. log("Script exists on server", shouldLog, ns);
  110.  
  111. let result = ns.rm(scriptName, server);
  112.  
  113. if (result)
  114. {
  115. log("Script deleted", shouldLog, ns);
  116. }
  117. else
  118. {
  119. log("Failed to delete script", shouldLog, ns);
  120. }
  121. }
  122. }
  123.  
  124. function runScriptWithMaxThreads(scriptName, server, scriptSize, shouldLog, ns)
  125. {
  126. let serverRam = ns.getServerRam(server);
  127. let freeServerRam = serverRam[0] - serverRam[1];
  128. log("Free Server RAM: " + freeServerRam, shouldLog, ns);
  129. let numberOfThreads = Math.floor(freeServerRam / scriptSize);
  130. log("Can run script with " + numberOfThreads + " threads", shouldLog, ns);
  131.  
  132. if (numberOfThreads > 0)
  133. {
  134. var result = ns.exec(scriptName, server, numberOfThreads, ns.args);
  135.  
  136. if (result !== 0)
  137. {
  138. log("Script ran\n\n", shouldLog, ns);
  139. }
  140. else
  141. {
  142. log("Script failed to run\n\n", shouldLog, ns);
  143. }
  144. }
  145. else
  146. {
  147. log("Not enough RAM available to run script\n\n", shouldLog, ns);
  148. }
  149. }
  150.  
  151. function crackServer(server, shouldLog, ns)
  152. {
  153. log("Attempting to crack: " + server, shouldLog, ns);
  154.  
  155. var portsOpened = 0;
  156. if (ns.fileExists("BruteSSH.exe", "home"))
  157. {
  158. log("Running BruteSSH", shouldLog, ns);
  159. ns.brutessh(server);
  160. portsOpened++;
  161. }
  162. if (ns.fileExists("FTPCrack.exe", "home"))
  163. {
  164. log("Running FTPCrack", shouldLog, ns);
  165. ns.ftpcrack(server);
  166. portsOpened++;
  167. }
  168. if (ns.fileExists("relaySMTP.exe", "home"))
  169. {
  170. log("Running relaySMTP", shouldLog, ns);
  171. ns.relaysmtp(server);
  172. portsOpened++;
  173. }
  174. if (ns.fileExists("HTTPWorm.exe", "home"))
  175. {
  176. log("Running HTTPWorm", shouldLog, ns);
  177. ns.httpworm(server);
  178. portsOpened++;
  179. }
  180. if (ns.fileExists("SQLInject.exe", "home"))
  181. {
  182. log("Running SQLInject", shouldLog, ns);
  183. ns.sqlinject(server);
  184. portsOpened++;
  185. }
  186.  
  187. log("Ports opened: " + portsOpened, shouldLog, ns);
  188. log("Ports required: " + ns.getServerNumPortsRequired(server), shouldLog, ns);
  189.  
  190. if (portsOpened >= ns.getServerNumPortsRequired(server))
  191. {
  192. ns.nuke(server);
  193. log("Server nuked", shouldLog, ns);
  194. }
  195. else
  196. {
  197. log("Not enough open ports to nuke", shouldLog, ns);
  198. }
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement