0

我想知道如何利用所有发现的名称服务器使用 Ruby 执行区域传输。

我下面的代码不起作用。如果有更好的方法可以做到这一点,请告诉。我熟悉 Net::DNS 之类的 gem,但如果可能的话,我希望将其作为系统命令来执行。

用户输入:

# 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)

输入表示赞赏。

4

2 回答 2

1

system方法将调用命令的状态返回为真/假,而不是像您想要的那样捕获的 STDOUT。

我建议使用基本的反引号来捕获输出,然后将其传递给字符串lineseach_line像数组一样迭代结果:

`cmd`.each_line do |l|
  ... Do something ...
end

...它不接受给定的开关,例如(-t ns 或 -l)

错误的。打开 IRB 并输入:

`ls -al`

以字符串形式返回命令的输出。

于 2013-10-17T02:02:43.273 回答
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从您的解决点开始,否则您需要使用queryorsearch方法逐个记录,或者在命令行中使用 dig 指定 ANY、A、MX、NS 等记录类型。

于 2013-10-17T13:20:51.883 回答