如何知道调用了哪个类成员函数?



From https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/smtp/smtp_version.rb#L26:

class MetasploitModule < Msf::Auxiliary
include Msf::Exploit::Remote::Smtp
include Msf::Auxiliary::Scanner
include Msf::Auxiliary::Report
def initialize
super(
'Name'        => 'SMTP Banner Grabber',
'Description' => 'SMTP Banner Grabber',
'References'  =>
[
['URL', 'http://www.ietf.org/rfc/rfc2821.txt'],
],
'Author'      => 'CG',
'License'     => MSF_LICENSE
)
deregister_options('MAILFROM', 'MAILTO')
end
def run_host(ip)
res = connect
banner_sanitized = Rex::Text.to_hex_ascii(banner.to_s)
print_good("#{ip}:#{rport} SMTP #{banner_sanitized}")
report_service(:host => rhost, :port => rport, :name => "smtp", :info => banner)
end
end

我看到上面调用了connectconnect是一个成员函数吗?如何知道哪个超类的成员函数被调用?谢谢。

最可能是继承或包含的方法

您没有发布所有相关代码,因此您必须在源代码的其余部分进行洞穴探险以确定。我只处理你特别提到的那一部分。

在您链接到的小示例中,#connect可能继承自Msf::Auxiliary或其中一个包含的模块。从名字上看,它很可能来自Msf::Exploit::Remote::Smtp,但我没有为你研究过。

最有可能是方法的原因是您当前的类没有在任何地方接受connect参数。由于Ruby表达式本质上允许使用方法调用,例如右侧赋值,因此这是一种常见的习惯用法。

如果你想知道肯定,grep你的源def connect找到它的定义(假设它不是通过更元的东西,如模块#define_method),或/bconnectb/找到所有的位置在你的源树,你可能想要更仔细地看它的使用或定义。

相关内容

  • 没有找到相关文章

最新更新