mirror of
https://github.com/nmap/nmap.git
synced 2025-12-21 15:09:02 +00:00
Added thread support to the ssl-enum-ciphers script which dramatically improves
performance. [Patrik Karlsson]
This commit is contained in:
@@ -562,8 +562,9 @@ local function client_hello(t)
|
|||||||
return record_write("handshake", t["protocol"], h .. b)
|
return record_write("handshake", t["protocol"], h .. b)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function try_params(host, port, t)
|
local function try_params(host, port, t, name, records)
|
||||||
local buffer, err, i, record, req, resp, sock, status
|
local buffer, err, i, record, req, resp, sock, status
|
||||||
|
local condvar = nmap.condvar(records)
|
||||||
|
|
||||||
-- Create socket.
|
-- Create socket.
|
||||||
sock = nmap.new_socket()
|
sock = nmap.new_socket()
|
||||||
@@ -572,6 +573,7 @@ local function try_params(host, port, t)
|
|||||||
if not status then
|
if not status then
|
||||||
stdnse.print_debug(1, "Can't connect: %s", err)
|
stdnse.print_debug(1, "Can't connect: %s", err)
|
||||||
sock:close()
|
sock:close()
|
||||||
|
condvar "signal"
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -581,6 +583,7 @@ local function try_params(host, port, t)
|
|||||||
if not status then
|
if not status then
|
||||||
stdnse.print_debug(1, "Can't send: %s", err)
|
stdnse.print_debug(1, "Can't send: %s", err)
|
||||||
sock:close()
|
sock:close()
|
||||||
|
condvar "signal"
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -592,6 +595,7 @@ local function try_params(host, port, t)
|
|||||||
status, resp = sock:receive()
|
status, resp = sock:receive()
|
||||||
if not status then
|
if not status then
|
||||||
sock:close()
|
sock:close()
|
||||||
|
condvar "signal"
|
||||||
return record
|
return record
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -601,7 +605,10 @@ local function try_params(host, port, t)
|
|||||||
i, record = record_read(buffer, i)
|
i, record = record_read(buffer, i)
|
||||||
if record ~= nil then
|
if record ~= nil then
|
||||||
sock:close()
|
sock:close()
|
||||||
return record
|
record.name = name
|
||||||
|
table.insert(records, record)
|
||||||
|
condvar "signal"
|
||||||
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -611,6 +618,8 @@ local function try_protocol(host, port, protocol)
|
|||||||
|
|
||||||
local function find_ciphers()
|
local function find_ciphers()
|
||||||
local name, protocol_worked, record, results, t,cipherstr
|
local name, protocol_worked, record, results, t,cipherstr
|
||||||
|
local records, threads = {}, {}
|
||||||
|
local condvar = nmap.condvar(records)
|
||||||
|
|
||||||
results = {}
|
results = {}
|
||||||
|
|
||||||
@@ -624,7 +633,22 @@ local function try_protocol(host, port, protocol)
|
|||||||
}
|
}
|
||||||
|
|
||||||
-- Try connecting with cipher.
|
-- Try connecting with cipher.
|
||||||
record = try_params(host, port, t)
|
local co = stdnse.new_thread(try_params, host, port, t, name, records)
|
||||||
|
threads[co] = true
|
||||||
|
end
|
||||||
|
|
||||||
|
repeat
|
||||||
|
for thread in pairs(threads) do
|
||||||
|
if coroutine.status(thread) == "dead" then threads[thread] = nil end
|
||||||
|
end
|
||||||
|
if ( next(threads) ) then
|
||||||
|
condvar "wait"
|
||||||
|
end
|
||||||
|
until next(threads) == nil
|
||||||
|
|
||||||
|
|
||||||
|
for _, record in ipairs(records) do
|
||||||
|
local name = record.name
|
||||||
if record == nil then
|
if record == nil then
|
||||||
if protocol_worked then
|
if protocol_worked then
|
||||||
stdnse.print_debug(2, "Cipher %s rejected.", name)
|
stdnse.print_debug(2, "Cipher %s rejected.", name)
|
||||||
@@ -665,6 +689,8 @@ local function try_protocol(host, port, protocol)
|
|||||||
|
|
||||||
local function find_compressors()
|
local function find_compressors()
|
||||||
local name, protocol_worked, record, results, t
|
local name, protocol_worked, record, results, t
|
||||||
|
local records, threads = {}, {}
|
||||||
|
local condvar = nmap.condvar(records)
|
||||||
|
|
||||||
results = {}
|
results = {}
|
||||||
|
|
||||||
@@ -678,7 +704,21 @@ local function try_protocol(host, port, protocol)
|
|||||||
}
|
}
|
||||||
|
|
||||||
-- Try connecting with compressor.
|
-- Try connecting with compressor.
|
||||||
record = try_params(host, port, t)
|
local co = stdnse.new_thread(try_params, host, port, t, name, records)
|
||||||
|
threads[co] = true
|
||||||
|
end
|
||||||
|
|
||||||
|
repeat
|
||||||
|
for thread in pairs(threads) do
|
||||||
|
if coroutine.status(thread) == "dead" then threads[thread] = nil end
|
||||||
|
end
|
||||||
|
if ( next(threads) ) then
|
||||||
|
condvar "wait"
|
||||||
|
end
|
||||||
|
until next(threads) == nil
|
||||||
|
|
||||||
|
for _, record in ipairs(records) do
|
||||||
|
local name = record.name
|
||||||
if record == nil then
|
if record == nil then
|
||||||
if protocol_worked then
|
if protocol_worked then
|
||||||
stdnse.print_debug(2, "Compressor %s rejected.", name)
|
stdnse.print_debug(2, "Compressor %s rejected.", name)
|
||||||
|
|||||||
Reference in New Issue
Block a user