我想知道如何使用Ruby执行区域传输,利用所有已发现的名称服务器。
我的代码无效。如果有更好的方法,请告诉我们。我熟悉像Net :: DNS这样的宝石,但如果可能的话,我希望将其作为系统命令。
用户输入:
# Query domain dns info:
print "[*] Search DNS information for: (ex. rotten.com) "
domain = gets.chomp
# Zone xsfr:
28: puts "\nAttempting zone transfer on #{domain}:"
29: for server in system 'host -t ns' << " #{domain}" do
30: system 'host -l ' << " #{domain} #{server}"
31: end
./z0ne_XSFR.rb:29:in `<main>': undefined method `each' for true:TrueClass (NoMethodError)
欣赏输入。
答案 0 :(得分:1)
system
方法将被调用命令的状态返回为true / false,而不是像您想要的那样将其捕获的STDOUT返回。
我建议使用基本的反引号来捕获输出,然后将其传递给String的lines
或each_line
以迭代结果,如数组:
`cmd`.each_line do |l|
... Do something ...
end
...它不接受给定的开关,如(-t ns或-l)
错误。打开IRB并输入:
`ls -al`
以字符串形式返回命令的输出。
答案 1 :(得分:0)
通过DNS上的AXFR操作提供区域传输。
如果您想使用命令行使用DIG:
dig -t axfr @ns.of_the_domaine.tld domaine.tld
并执行system
或反引用以捕获输出。
更干净,但你似乎不想要这个问题,你可以用:
Net::DNS::Resolver
使用axfr
方法。
安装Net::DNS gem:
gem install net-dns
警告:您的DNS配置必须允许axfr
从您的解决点开始,否则您需要使用query
或search
方法记录,
或者在dig命令行中指定ANY,A,MX,NS等记录类型。