需要在perl中解析whois输出

时间:2012-08-10 10:12:17

标签: perl whois

我需要使用perl查找电子邮件地址和名称(管理员,注册商,技术,如果有)。

我已经检查过whois输出有不同的输出格式。 我尝试了Net :: ParseWhois以及Net :: WhoisNG,但我没有得到不同域名的电子邮件地址或名称。

例如:whois google.com

有什么方法可以使用任何perl模块从任何域获得上述详细信息(电子邮件和名称),或者我如何解析perl中任何域的whois输出。

2 个答案:

答案 0 :(得分:4)

直接从简介中快速复制/粘贴以下内容:

use strict;
use warnings;
use Net::WhoisNG;
my $w=new Net::WhoisNG('google.com');
if(!$w->lookUp()){
    print "Domain not Found\n";
    exit;
}
# If lookup is successful, record is parsed and ready for use

foreach my $type (qw(admin tech registrant bill)) {
    my $contact=$w->getPerson($type);
    if ($contact) {
        print "$type\n";
        my $email = $contact->getEmail();
        if ($email and $email =~ /\S/) {
            print "$email\n";
        } else {
            my $unparsed = join(' ', @{$contact->getCredentials()});
            # Use an regexp to extract e-mail from freeform text here, you can even pick ready one somewhere here on SO
            print "$unparsed\n";
        }
        print "----\n\n";
    }
}

结果:

admin
 dns-admin@google.com +1.6506234000 Fax: +1.6506188571
----

tech
 dns-admin@google.com +1.6503300100 Fax: +1.6506181499

我将继续从自由格式文本中提取电子邮件给你。

答案 1 :(得分:4)

使用Net::Whois::Parser,它会为您解析现有的whois文字或致电Net::Whois::Raw以获取相关信息。

但请注意,whois信息可能不会针对所有已注册的域名公开:google.com就是一个例子。

此代码演示了这个想法

use strict;
use warnings;

use Net::Whois::Parser;
$Net::Whois::Parser::GET_ALL_VALUES = 1;

my $whois = parse_whois(domain => 'my.sample.url.com');

my @keys = keys %$whois;

for my $category (qw/ admin  registrant  tech/) {
  print "$category:\n";
  printf "  $_ => $whois->{$_}\n" for grep /^${category}_/, @keys;
  print "\n";
}