diff --git a/nselib/shortport.lua b/nselib/shortport.lua
index 405407c56..93ebc4b9f 100644
--- a/nselib/shortport.lua
+++ b/nselib/shortport.lua
@@ -22,40 +22,31 @@ end
--- Return a portrule that returns true when given an open port matching a
-- single port number or a list of port numbers.
--- @param port A single port number or a list of port numbers.
--- @param _proto The protocol or list of protocols to match against, default
+-- @param ports A single port number or a list of port numbers.
+-- @param protos The protocol or list of protocols to match against, default
-- "tcp".
--- @param _state A state or list of states to match against, default
+-- @param states A state or list of states to match against, default
-- {"open", "open|filtered"}.
-- @return Function for the portrule.
-- @usage portrule = shortport.portnumber({80, 443})
-portnumber = function(port, _proto, _state)
- local port_table, state_table, proto_table
- local proto = _proto or "tcp"
- local state = _state or {"open", "open|filtered"}
+portnumber = function(ports, protos, states)
+ protos = protos or "tcp"
+ states = states or {"open", "open|filtered"}
- if(type(port) == "number") then
- port_table = {port}
- elseif(type(port) == "table") then
- port_table = port
- end
-
- if(type(state) == "string") then
- state_table = {state}
- elseif(type(state) == "table") then
- state_table = state
- end
-
- if(type(proto) == "string") then
- proto_table = {proto}
- elseif(type(proto) == "table") then
- proto_table = proto
- end
+ if type(ports) ~= "table" then
+ ports = {ports}
+ end
+ if type(protos) ~= "table" then
+ protos = {protos}
+ end
+ if type(states) ~= "table" then
+ states = {states}
+ end
return function(host, port)
- return includes(state_table, port.state)
- and includes(port_table, port.number)
- and includes(proto_table, port.protocol)
+ return includes(ports, port.number)
+ and includes(protos, port.protocol)
+ and includes(states, port.state)
end
end
@@ -68,40 +59,31 @@ end
-- determined by Nmap's version scan or (if no version scan information is
-- available) the service assigned to the port in nmap-services
-- (e.g. "http" for TCP port 80).
--- @param service Service name or a list of names to run against.
--- @param _proto The protocol or list of protocols to match against, default
+-- @param services Service name or a list of names to run against.
+-- @param protos The protocol or list of protocols to match against, default
-- "tcp".
--- @param _state A state or list of states to match against, default
+-- @param states A state or list of states to match against, default
-- {"open", "open|filtered"}.
-- @return Function for the portrule.
-- @usage portrule = shortport.service("ftp")
-service = function(service, _proto, _state)
- local service_table, state_table, proto_table
- local state = _state or {"open", "open|filtered"}
- local proto = _proto or "tcp"
+service = function(services, protos, states)
+ protos = protos or "tcp"
+ states = states or {"open", "open|filtered"}
- if(type(service) == "string") then
- service_table = {service}
- elseif(type(service) == "table") then
- service_table = service
- end
-
- if(type(state) == "string") then
- state_table = {state}
- elseif(type(state) == "table") then
- state_table = state
- end
-
- if(type(proto) == "string") then
- proto_table = {proto}
- elseif(type(proto) == "table") then
- proto_table = proto
- end
+ if type(services) ~= "table" then
+ services = {services}
+ end
+ if type(protos) ~= "table" then
+ protos = {protos}
+ end
+ if type(states) ~= "table" then
+ states = {states}
+ end
return function(host, port)
- return includes(state_table, port.state)
- and includes(service_table, port.service)
- and includes(proto_table, port.protocol)
+ return includes(services, port.service)
+ and includes(protos, port.protocol)
+ and includes(states, port.state)
end
end
@@ -114,26 +96,17 @@ end
-- scripts explicitly try to run against the well-known ports, but want also to
-- run against any other port which was discovered to run the named service.
-- @usage portrule = shortport.port_or_service(22,"ssh").
--- @param _port A single port number or a list of port numbers.
--- @param _service Service name or a list of names to run against.
--- @param proto The protocol or list of protocols to match against, default
+-- @param ports A single port number or a list of port numbers.
+-- @param services Service name or a list of names to run against.
+-- @param protos The protocol or list of protocols to match against, default
-- "tcp".
--- @param _state A state or list of states to match against, default
+-- @param states A state or list of states to match against, default
-- {"open", "open|filtered"}.
-- @return Function for the portrule.
-port_or_service = function(_port, _service, proto, _state)
- local state = _state or {"open", "open|filtered"}
- local state_table
-
- if(type(state) == "string") then
- state_table = {state}
- elseif(type(state) == "table") then
- state_table = state
- end
-
+port_or_service = function(ports, services, protos, states)
return function(host, port)
- local port_checker = portnumber(_port, proto, state_table)
- local service_checker = service(_service, proto, state_table)
+ local port_checker = portnumber(ports, protos, states)
+ local service_checker = service(services, protos, states)
return port_checker(host, port) or service_checker(host, port)
end
end