mirror of
https://github.com/nmap/nmap.git
synced 2025-12-14 19:59:02 +00:00
rpcinfo.nse:
don't stop the whole script if we don't receive further packets even though they are expected but process what we got so far instead remove rpc_ prefix from variable names
This commit is contained in:
@@ -57,11 +57,15 @@ action = function(host, port)
|
|||||||
local _,offset,header,length,tx_id,msg_type,reply_state,accept_state,value,payload,last_fragment
|
local _,offset,header,length,tx_id,msg_type,reply_state,accept_state,value,payload,last_fragment
|
||||||
last_fragment = false; offset = 1; payload = ''
|
last_fragment = false; offset = 1; payload = ''
|
||||||
|
|
||||||
-- extract payload from answer and try to receive more packets if header with
|
-- extract payload from answer and try to receive more packets if
|
||||||
-- last_fragment set has not been received
|
-- RPC header with last_fragment set has not been received
|
||||||
|
-- If we can't get further packets don't stop but process what we
|
||||||
|
-- got so far.
|
||||||
while not last_fragment do
|
while not last_fragment do
|
||||||
if offset > #answer then
|
if offset > #answer then
|
||||||
answer = answer .. try(socket:receive_bytes(1))
|
local status, data = socket:receive_bytes(1)
|
||||||
|
if not status then break end
|
||||||
|
answer = answer .. data
|
||||||
end
|
end
|
||||||
offset,header = bin.unpack('>I',answer,offset)
|
offset,header = bin.unpack('>I',answer,offset)
|
||||||
last_fragment = bit.band( header, 0x80000000 ) ~= 0
|
last_fragment = bit.band( header, 0x80000000 ) ~= 0
|
||||||
@@ -77,32 +81,31 @@ action = function(host, port)
|
|||||||
if tx_id == transaction_id and msg_type == 1 and reply_state == 0 and accept_state == 0 then
|
if tx_id == transaction_id and msg_type == 1 and reply_state == 0 and accept_state == 0 then
|
||||||
local dir = { udp = {}, tcp = {}}
|
local dir = { udp = {}, tcp = {}}
|
||||||
local protocols = {[6]='tcp',[17]='udp'}
|
local protocols = {[6]='tcp',[17]='udp'}
|
||||||
local rpc_prog, rpc_vers, rpc_proto, rpc_port
|
local prog, version, proto, port
|
||||||
offset, value = bin.unpack('>I',payload,offset)
|
offset, value = bin.unpack('>I',payload,offset)
|
||||||
while value == 1 and #payload - offset >= 19 do
|
while value == 1 and #payload - offset >= 19 do
|
||||||
offset,rpc_prog,rpc_vers,rpc_proto,rpc_port,value = bin.unpack('>IIIII',payload,offset)
|
offset,prog,version,proto,port,value = bin.unpack('>IIIII',payload,offset)
|
||||||
rpc_proto = protocols[rpc_proto] or tostring( rpc_proto )
|
proto = protocols[proto] or tostring( proto )
|
||||||
-- collect data in a table
|
-- collect data in a table
|
||||||
dir[rpc_proto] = dir[rpc_proto] or {}
|
dir[proto] = dir[proto] or {}
|
||||||
dir[rpc_proto][rpc_port] = dir[rpc_proto][rpc_port] or {}
|
dir[proto][port] = dir[proto][port] or {}
|
||||||
dir[rpc_proto][rpc_port][rpc_prog] = dir[rpc_proto][rpc_port][rpc_prog] or {}
|
dir[proto][port][prog] = dir[proto][port][prog] or {}
|
||||||
table.insert( dir[rpc_proto][rpc_port][rpc_prog], rpc_vers )
|
table.insert( dir[proto][port][prog], version )
|
||||||
end
|
end
|
||||||
|
|
||||||
-- format output
|
-- format output
|
||||||
local output = tab.new(4)
|
local output = tab.new(4)
|
||||||
for rpc_proto, o in pairs(dir) do
|
for proto, o in pairs(dir) do
|
||||||
-- get list of all used ports
|
-- get list of all used ports
|
||||||
local ports = {}
|
local ports = {}
|
||||||
for rpc_port, i in pairs(o) do table.insert(ports, rpc_port) end
|
for port,_ in pairs(o) do table.insert(ports, port) end
|
||||||
table.sort(ports)
|
table.sort(ports)
|
||||||
|
|
||||||
-- iterate over ports to produce output
|
-- iterate over ports to produce output
|
||||||
for i, rpc_port in ipairs(ports) do
|
for _, port in ipairs(ports) do
|
||||||
i = o[rpc_port]
|
for prog, versions in pairs(o[port]) do
|
||||||
for rpc_prog, versions in pairs(o[rpc_port]) do
|
local name = rpc_numbers[prog] or ''
|
||||||
local name = rpc_numbers[rpc_prog] or ''
|
tab.addrow(output,prog,format_version(versions),('%5d/%s'):format(port,proto),name)
|
||||||
tab.addrow(output,rpc_prog,format_version(versions),('%5d/%s'):format(rpc_port,rpc_proto),name)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user