WhatWeb源码分析之lib/target.rb

      这次,来详细看看lib/target.rb的源代码。target.rb中定义了一个Target类,这个类主要是对目标url进行处理,涉及到url的提交方式,如get、put、post等,还涉及到是采用http还是https,以及对各部分结果的处理。

      接下来,按照调试运行函数跟进的顺序,一个一个进行分析。跟进whatweb主程序:

2017-10-31_9-27-39

      首先,是对Target类的初始化,跟进去看看initialize的实现细节:

Selection_020

      这里判断target是不是url,是不是原始包保存的file,并且赋值相关变量。如果是url涉及到对url进行解析,判断url的路径。初始化完成之后接着向下执行进入的是target.open这个函数,跟进去看看。

2017-10-31_9-33-08

      判断是不是一个文件。在这里我提供的是一个url,所以这里的判断会跳到open_url函数处理的分支。直接进入open_url这个函数,跟进去看看。

Selection_021

      判断是否使用了代理,如果有使用代理,则先要设置代理服务器,然后再初始化指定的主机和端口。

Selection_022

      接着设置打开的超时时间和读出的超时时间,紧接着有一个https的判断语句。继续往下:

2017-10-31_7-46-57

2017-10-31_7-47-26

      如果是https会有相关的设置。我这里是没有https设置,跳过继续往下就是根据query部分对url进行拼接。继续往下就是判断提交的方式,如GET,HEAD,POST。再下面就是一个认证,如果全局判断$BASIC_AUTH_USER为真,则会调用basic_auth函数进行认证操作。继续往下看:

Selection_023

      继续往下就是根据返回结果进行分组赋值了。涉及到header、body、status、以及IP地址的转换。跳出open_url继续open中代码的执行。判断返回的body是否为空来进行部分设置。

2017-10-31_7-46-57

      返回到whatweb主程序继续执行,这里有一个判断返回状态码,根据状态码判断是否重复前面执行步骤。

Selection_024

      进入get_redirection_target看看:

Selection_026

      这里会根据返回的状态码,赋值新的url地址。看下面这段代码:

2017-10-31_7-59-37

      HTML meta refresh是刷新与跳转(重定向)页面。注意:scan操作是查找全部匹配的内容。如果正则表达是中带有(),则只记录()的匹配内容。223行的代码相当于取得跳转的url地址,下面代码片段也是取得跳转url地址。后续会根据这两种方式获取的url地址对跳转地址进行赋值。

2017-10-31_10-39-59

      上面就是根据调试运行流程,梳理的target.rb中代码执行顺序。其中,还涉及到file的处理。file其实就是response那个原始包,保存成一个文件进行处理。open_file函数对file的处理也是按照response各分组进行处理的。

An unexpected error occurred! {:error=>#<ArgumentError: Setting "" hasn't been registered>, :backtrace=>["/opt/module/logstash-6.3.2/logstash-core/lib/logstash/settings.rb:37:in `get_setting'", "/opt/module/logstash-6.3.2/logstash-core/lib/logstash/settings.rb:70:in `set_value'", "/opt/module/logstash-6.3.2/logstash-core/lib/logstash/settings.rb:89:in `block in merge'", "org/jruby/RubyHash.java:1343:in `each'", "/opt/module/logstash-6.3.2/logstash-core/lib/logstash/settings.rb:89:in `merge'", "/opt/module/logstash-6.3.2/logstash-core/lib/logstash/settings.rb:138:in `validate_all'", "/opt/module/logstash-6.3.2/logstash-core/lib/logstash/runner.rb:279:in `execute'", "/opt/module/logstash-6.3.2/vendor/bundle/jruby/2.3.0/gems/clamp-0.6.5/lib/clamp/command.rb:67:in `run'", "/opt/module/logstash-6.3.2/logstash-core/lib/logstash/runner.rb:238:in `run'", "/opt/module/logstash-6.3.2/vendor/bundle/jruby/2.3.0/gems/clamp-0.6.5/lib/clamp/command.rb:132:in `run'", "/opt/module/logstash-6.3.2/lib/bootstrap/environment.rb:73:in `<main>'"]} An unexpected error occurred! {:error=>#<ArgumentError: Setting "" hasn't been registered>, :backtrace=>["/opt/module/logstash-6.3.2/logstash-core/lib/logstash/settings.rb:37:in `get_setting'", "/opt/module/logstash-6.3.2/logstash-core/lib/logstash/settings.rb:70:in `set_value'", "/opt/module/logstash-6.3.2/logstash-core/lib/logstash/settings.rb:89:in `block in merge'", "org/jruby/RubyHash.java:1343:in `each'", "/opt/module/logstash-6.3.2/logstash-core/lib/logstash/settings.rb:89:in `merge'", "/opt/module/logstash-6.3.2/logstash-core/lib/logstash/settings.rb:138:in `validate_all'", "/opt/module/logstash-6.3.2/logstash-core/lib/logstash/runner.rb:279:in `execute'", "/opt/module/logstash-6.3.2/vendor/bundle/jruby/2.3.0/gems/clamp-0.6.5/lib/clamp/command.rb:67:in `run'", "/opt/module/logstash-6.3.2/logstash-core/lib/logstash/runner.rb:238:in `run'", "/opt/module/logstash-6.3.2/vendor/bundle/jruby/2.3.0/gems/clamp-0.6.5/lib/clamp/command.rb:132:in `run'", "/opt/module/logstash-6.3.2/lib/bootstrap/environment.rb:73:in `<main>'"]}
07-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值