【问题标题】:perl get ip of website using lwp or www::mechanizeperl 使用 lwp 或 www::mechanize 获取网站的 ip
【发布时间】:2012-06-10 02:09:53
【问题描述】:

所以我正在开发一个爬虫,我想存储的一些关于我爬取的网站的数据是它们的 IP 地址。我宁愿这样做而不必再次访问他们的服务器,那么在您已经请求网页之后,无论如何可以从 LWP 或 WWW::Mechanize 获取此信息?例如:

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

我查看了 LWP 和 WWW::Mechanize 的文档,似乎找不到任何东西,但是我之前错过了一些东西。那么有谁知道用这些模块之一来做到这一点的方法吗?或者甚至是另一个可以做到的类似模块?感谢您的帮助!

【问题讨论】:

    标签: perl ip web-crawler www-mechanize lwp


    【解决方案1】:

    如果它只是您想要存储的任意 (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;
            }
        };
    };
    

    【讨论】:

    • 原始的quick'n'dirty方法:join(".", unpack("W4", scalar gethostbyname "stackoverflow.com"))
    【解决方案2】:

    使用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-10
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      相关资源
      最近更新 更多