lmap = function(list, func) result = list[0:] //list copy. for i in indexes(list) result[i] = func(result[i]) end for return result end function Service = {} // port : port number // lan_ip // info : service name and version // port_obj : port obj // version_to_int : int of 3 digits Service.attrs = ["port", "status", "lan_ip", "info"] Service.init = function(nmap, port = null) self.nmap = nmap if port == null then self.port_obj = null self.port = null self.status = null self.info = "router " + self.nmap.router.kernel_version self.lan_ip = self.nmap.router.local_ip else self.port_obj = port self.port = self.port_obj.port_number self.status = "open" if(self.port_obj.is_closed and not self.nmap.is_lan) then self.status = "closed" end if self.info = self.nmap.router.port_info(self.port_obj) self.lan_ip = self.port_obj.get_lan_ip end if self.version_to_int = self.info.split(" ")[1].split(".").join("").to_int end function Service.lib_dict = {"router": "kernel_router.so", "http": "libhttp.so", "ssh": "libssh.so", "repository": "librepository.so"} Service.info_to_key = function() return self.info.replace(".", "").replace(" ", "") end function Nmap = {} Nmap.init = function(ip) self.ip = ip if not is_valid_ip(self.ip) then exit("nmap: invalid ip address") self.is_lan = is_lan_ip(self.ip) self.set_router self.set_ports self.set_services end function Nmap.set_router = function() if self.is_lan then self.router = get_router; else self.router = get_router(self.ip) end if if self.router == null then exit("nmap: ip address not found") end function Nmap.set_ports = function() if not self.is_lan then self.ports = self.router.used_ports else self.ports = self.router.device_ports(self.ip) end if if self.ports == null then exit("nmap: ip address not found") if typeof(self.ports) == "string" then exit(self.ports) end function Nmap.set_services = function() scope = self port_to_service = function(port) service = new Service service.init(scope, port) return service end function self.services = lmap(self.ports, @port_to_service) service = new Service service.init(scope) self.services.push service end function