mirror of
https://github.com/nmap/nmap.git
synced 2025-12-17 13:09:02 +00:00
Pass an interator instead of separate arguments to thread functions.
This commit is contained in:
@@ -124,15 +124,23 @@ resolve = function (host, dtype)
|
|||||||
return status and result or false
|
return status and result or false
|
||||||
end
|
end
|
||||||
|
|
||||||
thread_main = function( results, ... )
|
local function array_iter(array, i, j)
|
||||||
|
return coroutine.wrap(function ()
|
||||||
|
while i <= j do
|
||||||
|
coroutine.yield(array[i])
|
||||||
|
i = i + 1
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
thread_main = function(results, name_iter)
|
||||||
local condvar = nmap.condvar( results )
|
local condvar = nmap.condvar( results )
|
||||||
local what = {n = select("#", ...), ...}
|
for name in name_iter do
|
||||||
for i = 1, what.n do
|
|
||||||
if not (ipv6 == 'only') then
|
if not (ipv6 == 'only') then
|
||||||
local res = resolve(what[i]..'.'..domainname, "A")
|
local res = resolve(name..'.'..domainname, "A")
|
||||||
if(res) then
|
if(res) then
|
||||||
for _,addr in ipairs(res) do
|
for _,addr in ipairs(res) do
|
||||||
local hostn = what[i]..'.'..domainname
|
local hostn = name..'.'..domainname
|
||||||
if nmap.registry.args['dns-brute.domain'] and target.ALLOW_NEW_TARGETS then
|
if nmap.registry.args['dns-brute.domain'] and target.ALLOW_NEW_TARGETS then
|
||||||
stdnse.print_debug("Added target: "..hostn)
|
stdnse.print_debug("Added target: "..hostn)
|
||||||
local status,err = target.add(hostn)
|
local status,err = target.add(hostn)
|
||||||
@@ -143,10 +151,10 @@ thread_main = function( results, ... )
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
if ipv6 then
|
if ipv6 then
|
||||||
local res = resolve(what[i]..'.'..domainname, "AAAA")
|
local res = resolve(name..'.'..domainname, "AAAA")
|
||||||
if(res) then
|
if(res) then
|
||||||
for _,addr in ipairs(res) do
|
for _,addr in ipairs(res) do
|
||||||
local hostn = what[i]..'.'..domainname
|
local hostn = name..'.'..domainname
|
||||||
if nmap.registry.args['dns-brute.domain'] and target.ALLOW_NEW_TARGETS then
|
if nmap.registry.args['dns-brute.domain'] and target.ALLOW_NEW_TARGETS then
|
||||||
stdnse.print_debug("Added target: "..hostn)
|
stdnse.print_debug("Added target: "..hostn)
|
||||||
local status,err = target.add(hostn)
|
local status,err = target.add(hostn)
|
||||||
@@ -159,14 +167,13 @@ thread_main = function( results, ... )
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
srv_main = function( srvresults, ... )
|
srv_main = function(srvresults, srv_iter)
|
||||||
local condvar = nmap.condvar( srvresults )
|
local condvar = nmap.condvar( srvresults )
|
||||||
local what = {n = select("#", ...), ...}
|
for name in srv_iter do
|
||||||
for i = 1, what.n do
|
local res = resolve(name..'.'..domainname, "SRV")
|
||||||
local res = resolve(what[i]..'.'..domainname, "SRV")
|
|
||||||
if(res) then
|
if(res) then
|
||||||
for _,addr in ipairs(res) do
|
for _,addr in ipairs(res) do
|
||||||
local hostn = what[i]..'.'..domainname
|
local hostn = name..'.'..domainname
|
||||||
addr = stdnse.strsplit(":",addr)
|
addr = stdnse.strsplit(":",addr)
|
||||||
if not (ipv6 == 'only') then
|
if not (ipv6 == 'only') then
|
||||||
local srvres = resolve(addr[4], "A")
|
local srvres = resolve(addr[4], "A")
|
||||||
@@ -247,15 +254,11 @@ action = function(host)
|
|||||||
local condvar = nmap.condvar( results )
|
local condvar = nmap.condvar( results )
|
||||||
local i = 1
|
local i = 1
|
||||||
local howmany = math.floor(#hostlist/max_threads)+1
|
local howmany = math.floor(#hostlist/max_threads)+1
|
||||||
if (howmany > 7900) then
|
|
||||||
--Cannot unpack a list with more than 7900 items so we will set it to 7900
|
|
||||||
stdnse.print_debug("Hostlist items per thread is more than 7900. Setting to 7900.")
|
|
||||||
howmany = 7900
|
|
||||||
end
|
|
||||||
stdnse.print_debug("Hosts per thread: "..howmany)
|
stdnse.print_debug("Hosts per thread: "..howmany)
|
||||||
repeat
|
repeat
|
||||||
local j = math.min(i+howmany, #hostlist)
|
local j = math.min(i+howmany, #hostlist)
|
||||||
threads[stdnse.new_thread( thread_main,results, unpack(hostlist, i, j) )] = true
|
local name_iter = array_iter(hostlist, i, j)
|
||||||
|
threads[stdnse.new_thread( thread_main,results, name_iter)] = true
|
||||||
i = j+1
|
i = j+1
|
||||||
until i > #hostlist
|
until i > #hostlist
|
||||||
local done
|
local done
|
||||||
|
|||||||
Reference in New Issue
Block a user