並列ルックアップを実行したい場合は、付属のデモ スクリプトを使用するか、 AnyEvent::DNSNet::DNS
を確認してください。
後者は提供します
このモジュールは、多数の DNS 便利な機能と、完全に非同期で高性能な純粋な perl スタブ リゾルバーの両方を提供します。
私はそれを使用していませんが、IO::Lambda::DNSを使用すると、並列クエリを作成することもできます。
# parallel async queries
lambda {
for my $site ( map { "www.$_.com" } qw(google yahoo perl)) {
context $site, 'MX', timeout => 0.25;
dns { print shift-> string if ref($_[0]) }
}
}-> wait;
これらのモジュールを使用することは、手動でフォークを管理するよりも望ましい場合があります。
あなたのコメントに基づいて、私が言おうとしていたことを誤解したかもしれないと思います. たぶんこれが役立ちます:
#!/usr/bin/env perl
use strict; use warnings;
use AnyEvent::DNS;
use AnyEvent::Socket;
use YAML;
my %nameservers = (
'Google' => '8.8.4.4',
'Dnsadvantage' => '156.154.71.1',
'OpenDNS' => '208.67.222.222',
'Norton' => '198.153.194.1',
'Verizon' => '4.2.2.4',
'ScrubIt' => '207.225.209.66',
);
for my $ip ( values %nameservers ) {
$ip = AnyEvent::DNS->new(
server => [ parse_address($_) ],
timeout => [3],
);
}
my @domains = qw(example.com cnn.com bing.com);
my $cv = AnyEvent->condvar;
for my $domain (@domains) {
for my $ns (keys %nameservers) {
$cv->begin;
$nameservers{$ns}->resolve(
$domain, 'a', sub {
$cv->end;
print Dump { $ns => [ @{$_[0]}[0,4] ] };
}
);
}
}
$cv->recv;
出力:
---
スクラブ:
-example.com
- 192.0.43.10
---
スクラブ:
- cnn.com
- 157.166.226.26
---
ノートン:
-example.com
- 192.0.43.10
---
OpenDNS:
-example.com
- 192.0.43.10
---
利点:
-example.com
- 192.0.43.10
---
ベライゾン:
-example.com
- 192.0.43.10
---
グーグル:
-example.com
- 192.0.43.10
---
スクラブ:
-bing.com
- 65.52.107.149
---
ノートン:
- cnn.com
- 157.166.255.18
---
OpenDNS:
- cnn.com
- 157.166.255.19
---
利点:
- cnn.com
- 157.166.226.25
---
ベライゾン:
- cnn.com
- 157.166.226.26
---
グーグル:
- cnn.com
- 157.166.255.18
---
ノートン:
-bing.com
- 65.52.107.149
---
OpenDNS:
-bing.com
- 65.52.107.149
---
利点:
-bing.com
- 65.52.107.149
---
ベライゾン:
-bing.com
- 65.52.107.149
---
グーグル:
-bing.com
- 65.52.107.149