1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
class LoggingBrief < Logging
def escape(s)
# Encode all special characters # More info: http://www.asciitable.com/
# r=/[^\x20-\x5A\x5E-\x7E]/
# Encode low ascii non printable characters
r = /[\x00-\x1F]/
# based on code for CGI.escape
s.gsub(r) { |x| "%#{x.unpack('H2' * x.size).join('%').upcase}" }
end
# don't use colours if not to STDOUT
def out(target, status, results)
brief_results = []
# sort results so plugins that are less important at a glance are last
# last_plugins=%w| CSS MD5 Header-Hash Footer-Hash Tag-Hash|
# results=results.sort_by {|x,y| last_plugins.include?(x) ? 1 : 0 }
results = results.sort # sort results by plugin name alphabetically
results.each do |plugin_name, plugin_results|
next if plugin_results.empty?
suj = suj(plugin_results)
certainty = suj[:certainty].to_i
version = escape(suj[:version])
os = escape(suj[:os])
string = escape(suj[:string])
accounts = escape(suj[:account])
model = escape(suj[:model])
firmware = escape(suj[:firmware])
modules = escape(suj[:module])
filepath = escape(suj[:filepath])
# colour the output
# be more DRY
# if plugins have categories or tags this would be better, eg. all hash plugins are grey
if (@f == STDOUT && $use_colour == 'auto') || ($use_colour == 'always')
coloured_string = grey(string)
coloured_string = cyan(string) if plugin_name == 'HTTPServer'
coloured_string = yellow(string) if plugin_name == 'Title'
coloured_string = grey(string) if plugin_name == 'MD5'
coloured_string = grey(string) if plugin_name == 'Header-Hash'
coloured_string = grey(string) if plugin_name == 'Footer-Hash'
coloured_string = grey(string) if plugin_name == 'CSS'
coloured_string = grey(string) if plugin_name == 'Tag-Hash'
coloured_plugin = white(plugin_name)
coloured_plugin = grey(plugin_name) if plugin_name == 'MD5'
coloured_plugin = grey(plugin_name) if plugin_name == 'Header-Hash'
coloured_plugin = grey(plugin_name) if plugin_name == 'Footer-Hash'
coloured_plugin = grey(plugin_name) if plugin_name == 'CSS'
coloured_plugin = grey(plugin_name) if plugin_name == 'Tag-Hash'
p = ((certainty && certainty < 100) ? "#{grey(Helper::certainty_to_words(certainty))} " : '') +
coloured_plugin + (!version.empty? ? "[#{green(version)}]" : '') +
(!os.empty? ? "[#{red(os)}]" : '') +
(!string.empty? ? "[#{coloured_string}]" : '') +
(!accounts.empty? ? "[#{cyan(accounts)}]" : '') +
(!model.empty? ? "[#{dark_green(model)}]" : '') +
(!firmware.empty? ? "[#{dark_green(firmware)}]" : '') +
(!filepath.empty? ? "[#{dark_green(filepath)}]" : '') +
(!modules.empty? ? "[#{red(modules)}]" : '')
brief_results << p
else
brief_results << ((certainty && certainty < 100) ? "#{Helper::certainty_to_words(certainty)} " : '') +
plugin_name + (!version.empty? ? "[#{version}]" : '') +
(!os.empty? ? "[#{os}]" : '') +
(!string.empty? ? "[#{string}]" : '') +
(!accounts.empty? ? " [#{accounts}]" : '') +
(!model.empty? ? "[#{model}]" : '') +
(!firmware.empty? ? "[#{firmware}]" : '') +
(!filepath.empty? ? "[#{filepath}]" : '') +
(!modules.empty? ? "[#{modules}]" : '')
end
end
status_code = HTTP_Status.code(status)
if (@f == STDOUT && $use_colour == 'auto') || ($use_colour == 'always')
brief_results_final = "#{blue(target)} [#{status} #{status_code}] #{brief_results.join(', ')}"
else
brief_results_final = "#{target} [#{status} #{status_code}] #{brief_results.join(', ')}"
end
$semaphore.synchronize do
@f.puts brief_results_final
end
end
end
|