script.md
scanlan.src
deepNetworkScan = function(targetIP, scannedIPs, indent = "") scanResults = [] if scannedIPs.indexOf(targetIP) != null then return scanResults end if isPingable = get_shell.ping(targetIP) scanData = { "ip": targetIP, "is_reachable": isPingable, "ports": [], "devices": [], "main_router": false, "type": "device", "kernel_version": null, "has_firewall": false } if not isPingable then scanResults.push(scanData) return scanResults end if scannedIPs.push(targetIP) targetRouter = get_router(targetIP) if targetRouter != null then routerFirewalls = targetRouter.firewall_rules() if typeof(routerFirewalls) == "list" and routerFirewalls.len > 0 then scanData["has_firewall"] = true if get_router(targetRouter.public_ip).local_ip == scanData["ip"] then scanData["main_router"] = true scanData["kernel_version"] = targetRouter.kernel_version scanData["type"] = "router" for port in targetRouter.device_ports(targetIP) portData = {} if is_closed(port) then portData["status"] = "closed" else portData["status"] = "open" end if lanIP = "unknown" if targetRouter.port_info(port).indexOf(" ") != null then portInfo = targetRouter.port_info(port) lanIP = port.get_lan_ip end if portInfo = targetRouter.port_info(port) parsedInfo = portInfo.split(" ") portData["port_number"] = port.port_number portData["service_name"] = parsedInfo[0] portData["service_version"] = parsedInfo[1] portData["lan_ip"] = lanIP scanData["ports"].push(portData) end for targetDevices = targetRouter.devices_lan_ip for device in targetDevices if scannedIPs.indexOf(device) != null or device == targetIP then continue end if deviceResults = deepNetworkScan(device, scannedIPs, indent + " ") for result in deviceResults scanData["devices"].push(result) end for end for else mainRouter = get_router(scannedIPs[0]) if mainRouter != null then for port in mainRouter.device_ports(targetIP) portData = {} if is_closed(port) then portData["status"] = "closed" else portData["status"] = "open" end if lanIP = "unknown" if mainRouter.port_info(port).indexOf(" ") != null then portInfo = mainRouter.port_info(port) lanIP = port.get_lan_ip end if portInfo = mainRouter.port_info(port) parsedInfo = portInfo.split(" ") portData["port_number"] = port.port_number portData["service_name"] = parsedInfo[0] portData["service_version"] = parsedInfo[1] portData["lan_ip"] = lanIP scanData["ports"].push(portData) end for end if end if scanResults.push(scanData) return scanResults end function printNetworkData = function(networkData, indent = "") for data in networkData deviceTypePrefix = "|--" portIndent = "| " if not data["is_reachable"] then deviceTypePrefix = "|---- DEVICE" print("<b>" + deviceTypePrefix + " [" + data["ip"] + "]</b>") print("<color=#FF1548>" + portIndent + "|- IP_NOT_REACHABLE</color>") continue end if isCCTV = false for port in data["ports"] if port["port_number"] == 37777 then isCCTV = true break end if end for if isCCTV then deviceTypePrefix = "|---- CCTV" portIndent = "| " else if data["type"] == "router" then routerPrefix = null if data["main_router"] then deviceTypePrefix = "|-- MAIN ROUTER" else deviceTypePrefix = "|-- ROUTER/SWITCH" end if portIndent = "| " else deviceTypePrefix = "|---- COMPUTER" portIndent = "| " end if if data["has_firewall"] then if data["kernel_version"] != null then print("<color=#FFC466><b>" + deviceTypePrefix + " [" + data["ip"] + "|KERNEL_V:" + data["kernel_version"] + "]</b></color>") else print("<color=#FFC466><b>" + deviceTypePrefix + " [" + data["ip"] + "]</b></color>") end if else if data["kernel_version"] != null then print("<b>" + deviceTypePrefix + " [" + data["ip"] + "|KERNEL_V:" + data["kernel_version"] + "]</b>") else isMyComputer = null if data["ip"] == get_shell.host_computer.local_ip then isMyComputer = "<b><color=#08FF57>[YOU]</color></b>" print("<b>" + deviceTypePrefix + " [" + data["ip"] + "]</b>" + isMyComputer) end if end if if data["ports"].len > 0 then for port in data["ports"] portInfo = "PORT:" + port["port_number"] + "|" + port["status"].upper() + "|" + port["service_name"].upper() + "/" + port["service_version"] if port["lan_ip"] != data["ip"] then portInfo = portInfo + "|ROUTED_TO:" + port["lan_ip"] end if if port["status"].upper() == "OPEN" then print("<color=#08FF57>" + portIndent + "|- " + portInfo + "</color>") else print("<color=#FF1548>" + portIndent + "|- " + portInfo + "</color>") end if end for else print("<color=#FF1548>" + portIndent + "|- NO_OPEN_PORTS</color>") end if if data["devices"].len > 0 then printNetworkData(data["devices"], " ") end if end for end function print("<b>/ START_NETMAP >></b>") print("<b>| START_PROBE [PUBLIC_IP:" + get_router.public_ip + "]</b>") startingIP = get_router.local_ip scannedIPs = [] networkData = deepNetworkScan(startingIP, scannedIPs, "") printNetworkData(networkData) print("<b>| END_PROBE</b>") print("<b>\ END_NETMAP <<</b>")