输入指令之后,开始会在whatweb文件比对指令信息。之后,会根据判断条件进行检测插件的选择。如果没有指定自定义插件,那么就回家在默认插件,use_custom_plugin=false; plugin_selection=nil。此时会调用lib/plugins.rb文件,调用PluginSupport.load_plugins函数,此函数是加载插件目录的,在446行开始搜索插件识别插件,PluginSupport.load_plugin(f)为加载插件;PluginSupport.precompile_regular_expressions是一个优化插件的函数,对插件识别脚本进行进一步细化。跳出函数,继续往下调,就是HTTP Request的定义,可以用户自定义,也可以使用默认值。继续下去,就是对目标URL的筛选,这个会在whatweb文件中进行,具体在279行,make_target_list()这个函数会对URL进行筛选,规则化等操作。接下来为处理指定的URL,获取指纹信息。
target.rb主要是对目标url进行处理,涉及到url的提交方式,如get、put、post等,还涉及到是采用http还是https,以及对各部分结果的处理。其中open方法判断是不是一个文件
plugins.rb主要是插件处理,实现了插件的注册功能,加载插件,识别插件,对加载过的插件的正则表达式进行预编译。
whatweb文件中函数的功能:
gem_available?(): 此函数的返回值为true或false。gem的检测和加载
make_tag_pattern(): 删除script和/script之间的内容。此方法在target.rb文件中被调用,@tag_pattern = make_tag_pattern(@body)。第106行
make_target_list(): 对目标URL进行筛选,并使URL规则化
run_plugins(): 指纹匹配和判断