mirror of
https://github.com/nmap/nmap.git
synced 2025-12-24 08:29:04 +00:00
Don't crash when portmapper reports non-tcp/udp transports. Fixes #363
This commit is contained in:
@@ -94,19 +94,21 @@ action = function(host, port)
|
||||
for progid, v in pairs(rpcinfo) do
|
||||
xmlout[tostring(progid)] = v
|
||||
for proto, v2 in pairs(v) do
|
||||
local nmapport = nmap.get_port_state(host, {number=v2.port, protocol=proto})
|
||||
if nmapport and (nmapport.state == "open" or nmapport.state == "open|filtered") then
|
||||
nmapport.version = nmapport.version or {}
|
||||
-- If we don't already know it, or we only know that it's "rpcbind"
|
||||
if nmapport.service == nil or nmapport.version.service_dtype == "table" or port.service == "rpcbind" then
|
||||
nmapport.version.name = rpc.Util.ProgNumberToName(progid)
|
||||
nmapport.version.extrainfo = "RPC #" .. progid
|
||||
if #v2.version > 1 then
|
||||
nmapport.version.version = ("%d-%d"):format(v2.version[1], v2.version[#v2.version])
|
||||
else
|
||||
nmapport.version.version = tostring(v2.version[1])
|
||||
if proto == "tcp" or proto == "udp" then
|
||||
local nmapport = nmap.get_port_state(host, {number=v2.port, protocol=proto})
|
||||
if nmapport and (nmapport.state == "open" or nmapport.state == "open|filtered") then
|
||||
nmapport.version = nmapport.version or {}
|
||||
-- If we don't already know it, or we only know that it's "rpcbind"
|
||||
if nmapport.service == nil or nmapport.version.service_dtype == "table" or port.service == "rpcbind" then
|
||||
nmapport.version.name = rpc.Util.ProgNumberToName(progid)
|
||||
nmapport.version.extrainfo = "RPC #" .. progid
|
||||
if #v2.version > 1 then
|
||||
nmapport.version.version = ("%d-%d"):format(v2.version[1], v2.version[#v2.version])
|
||||
else
|
||||
nmapport.version.version = tostring(v2.version[1])
|
||||
end
|
||||
nmap.set_port_version(host, nmapport, "softmatched")
|
||||
end
|
||||
nmap.set_port_version(host, nmapport, "softmatched")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user