0

私はクローラーに取り組んでおり、クロールするサイトに関して保存したいデータの一部は、その IP アドレスです。私は彼らのサーバーに再びアクセスせずにこれを行うことを望んでいます.Webページをリクエストした後、LWPまたはWWW::Mechanizeからこの情報を取得する方法はありますか? 例えば:

my $mech = WWW::Mechanize->new();
$mech->get($url);
$ip = $mech->url_ip;

LWP と WWW::Mechanize のドキュメントを調べましたが、何も見つからないように見えますが、以前は見落としていました。これらのモジュールのいずれかでこれを行う方法を知っている人はいますか? または、それを実行できる別の同様のモジュールでさえありますか? 助けてくれてありがとう!

4

2 に答える 2

2

保存したいのが任意の (quad-)A レコードである場合は、次のようなものを試すこともできます。

use strictures;
use Perl6::Take qw(gather take);
use Socket 1.96 qw(getaddrinfo getnameinfo AF_INET6 AF_INET SOCK_STREAM NI_NUMERICHOST NIx_NOSERV);
# require 1.96 or better for NIx_NOSERV, ships with Perl 5.14
⋮
my $host = $mech->url->host;
my @ip = gather {
    for my $family (AF_INET6, AF_INET) {
        my ($err, @addrinfo) = getaddrinfo($host, 'http', { family => $family, socktype => SOCK_STREAM });
        warn "Cannot getaddrinfo - $err" if $err;
        for my $ai (@addrinfo) {
            my ($err, $ipaddr) = getnameinfo($ai->{addr}, NI_NUMERICHOST, NIx_NOSERV);
            warn "Cannot getnameinfo - $err" if $err;
            take $ipaddr;
        }
    };
};
于 2012-06-06T03:43:52.417 に答える
0

Net::DNSを使用します。簡単な例を次に示します。

my $resolver = Net::DNS::Resolver->new();
my $response = $Resolver->send("example.com", "A");
my @rr = grep { $_->type eq "A" } $response->answer;
my $ip = $rr[0]->address;
于 2012-06-06T03:32:42.243 に答える