Advertisement
Guest User

scanall.ns

a guest
Dec 28th, 2021
813
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.60 KB | None | 0 0
  1. //args{show servers|show prompts,plant miners|(re)start miner farm|local mining threads}
  2. //"Hammer": weaken, "Balloon": grow, "shovel" hack
  3. //returns[rootedServers,allServers]
  4. /** @param {NS} ns **/
  5. /** @param {Server} serv**/
  6. function CanHack(ns, serv) {
  7. if (serv.requiredHackingSkill > ns.getHackingLevel()) return false;
  8. var p = serv.numOpenPortsRequired;
  9. if ((p >= 1) && !ns.fileExists("BruteSSH.exe", "home")) return false;
  10. if ((p >= 2) && !ns.fileExists("FTPCrack.exe", "home")) return false;
  11. if ((p >= 3) && !ns.fileExists("RelaySMTP.exe", "home")) return false;
  12. if ((p >= 4) && !ns.fileExists("HTTPWorm.exe", "home")) return false;
  13. if ((p >= 5) && !ns.fileExists("SQLInject.exe", "home")) return false;
  14. return true;
  15. }
  16. /** @param {NS} ns **/
  17. /** @param {Server} serv**/
  18. function HackItOut(ns, serv) {
  19. if (!CanHack(ns, serv) || serv.hasAdminRights) return false;
  20. var p = serv.numOpenPortsRequired;
  21. if (p >= 1) ns.brutessh(serv.hostname);
  22. if (p >= 2) ns.ftpcrack(serv.hostname);
  23. if (p >= 3) ns.relaysmtp(serv.hostname);
  24. if (p >= 4) ns.httpworm(serv.hostname);
  25. if (p == 5) ns.sqlinject(serv.hostname);
  26. ns.nuke(serv.hostname);
  27. servDict.set(serv.hostname, ns.getServer(serv.hostname));
  28. return true;
  29. }
  30. /** @param {NS} ns **/
  31. /** @param {Server} serv**/
  32. function ListLocks(ns, serv) {
  33. var ret = "";
  34. var lv = (serv.requiredHackingSkill - ns.getHackingLevel())
  35. ret += (lv >= 0) ? "Lv+" + (lv) : "Lv" + (lv);
  36. var p = serv.numOpenPortsRequired;
  37. if (p >= 1) ret += ":SSH";
  38. if (p >= 2) ret += ":FTP";
  39. if (p >= 3) ret += ":SMTP";
  40. if (p >= 4) ret += ":HTTP";
  41. if (p == 5) ret += ":SQL";
  42. return ret;
  43. }
  44. var FactSevrs = new Map();
  45. FactSevrs.set("CSEC", "CyberSec");
  46. FactSevrs.set("I.I.I.I", "The Black Hand");
  47. FactSevrs.set("avmnite-02h", "NiteSec");
  48. /** @param {NS} ns **/
  49. /** @param {Server} serv**/
  50. /**@param {number} fromhome*/
  51. function printServer(ns, serv, fromhome = 0) {
  52. var msg = "";
  53. if (fromhome) for (let i = 0; i < fromhome; i++)msg += "-";
  54. msg += serv.hostname + ": ";
  55. if (serv.purchasedByPlayer) msg += "Player Server.";
  56. else if (FactSevrs.has(serv.hostname) && ns.getPlayer().factions.includes(FactSevrs.get(serv.hostname))) msg += "Member";
  57. else if (ns.isRunning("localminer.ns", serv.hostname, serv.hostname)) msg += "Mining (X" + Math.floor(serv.maxRam / ns.getScriptRam("localminer.ns", serv.hostname)) + ")";
  58. else if (serv.hasAdminRights) msg += (serv.maxRam == 0) ? "Rooted. 0GB" : "Rooted.";
  59. else msg += HackItOut(ns, serv) ? "Now Rooted." : ListLocks(ns, serv);
  60. msg += serv.moneyMax > 0 ? "\t$" + serv.moneyAvailable.toFixed(2) + ":" + serv.moneyMax.toFixed(2) + "(" + ((serv.moneyAvailable / serv.moneyMax) * 100).toFixed(2) + "%)" : "\t$0";
  61.  
  62. msg += "\t" + serv.ip;
  63. if (serv.organizationName) msg += "\tProperty of " + serv.organizationName;
  64. ns.tprint(msg);
  65. }
  66. /** @param {NS} ns **/
  67. /** @param {Server} serv**/
  68. async function CopyThatFloppy(ns, serv) {
  69. for (var f of ns.ls(serv.hostname)) {
  70. if (f.includes(".cct")) if (ns.args[0] & 2) ns.tprint(f + " found at " + serv.hostname);
  71. if (!ns.fileExists(f, "home") && f.includes(".lit")) {
  72. if (ns.args[0] & 2) ns.tprint("stealing " + f + " from " + serv.hostname);
  73. await ns.scp(f, serv.hostname, "home");
  74. }
  75. }
  76. }
  77. var servDict = new Map();
  78. /** @param {NS} ns **/
  79. /** @param {string} name**/
  80. /**@param {boolean} doPrint*/
  81. /**@param {number} fromhome*/
  82. async function scanEmAll(ns, name = "home", doPrint = true, fromhome = 0) {
  83. if (!servDict.has(name)) {
  84. var serv = ns.getServer(name);
  85. servDict.set(name, serv);
  86. if (doPrint) {
  87. printServer(ns, serv, fromhome);
  88. }
  89. else if (!serv.purchasedByPlayer && !serv.hasAdminRights) HackItOut(ns, serv);
  90. if (!serv.purchasedByPlayer) await CopyThatFloppy(ns, serv);
  91. for (let i of ns.scan(name)) await scanEmAll(ns, i, doPrint, fromhome + 1);
  92. }
  93. }
  94.  
  95. /** @param {NS} ns **/
  96. export async function main(ns) {
  97. servDict.clear();
  98. await scanEmAll(ns, "home", ns.args[0] & 1, 0);
  99. if (ns.args[1] & 1) {
  100. if (ns.args[0] & 2) ns.tprint("attempting to plant miners.");
  101. for (var serv of servDict.values()) {
  102. if (!serv.purchasedByPlayer && !serv.hasAdminRights) HackItOut(ns, serv);
  103. if (!serv.purchasedByPlayer && serv.hasAdminRights && serv.moneyMax > 0 && serv.maxRam > 0 && !ns.isRunning("localminer.ns", serv.hostname, serv.hostname)) {
  104. ns.killall(serv.hostname);
  105. //ns.rm("localminer.ns", serv.hostname);
  106. await ns.scp("localminer.ns", "home", serv.hostname);
  107. var t = Math.floor(serv.maxRam / ns.getScriptRam("localminer.ns", serv.hostname));
  108. if (t <= 0) if (ns.args[0] & 2) ns.tprint("cannot plant miner in " + serv.hostname + ". for some reason.");
  109. else {
  110. ns.exec("localminer.ns", serv.hostname, t, serv.hostname);
  111. if (ns.args[0] & 2) ns.tprint(serv.hostname + " running local miner. (" + t + " threads.)");
  112. }
  113. }
  114. else if (!serv.purchasedByPlayer && serv.hasAdminRights && serv.moneyMax > 0 && serv.maxRam == 0 && !ns.isRunning("localminer.ns", "home", serv.hostname)) {
  115. var t = (ns.args[1] & ~3) ? ns.args[1] & ~3 : 20;
  116. ns.exec("localminer.ns", "home", t, serv.hostname);
  117. if (ns.args[0] & 2) ns.tprint(serv.hostname + " has 0GB. running miner locally. (" + t + " threads.)");
  118. }
  119. }
  120. }
  121. var count = [0, servDict.size]
  122. for (var serv of servDict.values()) if (serv.hasAdminRights) count[0]++;
  123. if (ns.args[1] & 2 && servDict.has("Hammer") && servDict.has("Balloon") && servDict.has("Shovel")) {
  124. var t0 = 0;
  125. for (var serv of servDict.values()) if (serv.hasAdminRights && !serv.purchasedByPlayer && serv.moneyMax > 0) t0++;
  126. if (!ns.fileExists("hammer.ns", "Hammer")) await ns.scp("hammer.ns", "home", "Hammer");
  127. if (!ns.fileExists("balloon.ns", "Balloon")) await ns.scp("balloon.ns", "home", "Balloon");
  128. if (!ns.fileExists("shovel.ns", "Shovel")) await ns.scp("shovel.ns", "home", "Shovel");
  129. var t1 = Math.floor(servDict.get("Hammer").maxRam / (ns.getScriptRam("hammer.ns", "Hammer") * t0));
  130. var t2 = Math.floor(servDict.get("Balloon").maxRam / (ns.getScriptRam("balloon.ns", "Balloon") * t0));
  131. var t3 = Math.floor(servDict.get("Shovel").maxRam / (ns.getScriptRam("shovel.ns", "Shovel") * t0));
  132. ns.killall("Hammer");
  133. ns.killall("Balloon");
  134. ns.killall("Shovel");
  135. for (var serv of servDict.values()) if (serv.hasAdminRights && !serv.purchasedByPlayer && serv.moneyMax > 0) {
  136. if (ns.args[0] & 2) ns.tprint(serv.hostname + " added to mining farm. (" + t1 + ":" + t2 + ":" + t3 + " threads.)");
  137. ns.exec("hammer.ns", "Hammer", t1, serv.hostname);
  138. ns.exec("balloon.ns", "Balloon", t2, serv.hostname);
  139. ns.exec("shovel.ns", "Shovel", t3, serv.hostname);
  140. }
  141. }
  142. return count;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement