我需要使用 perl 查找电子邮件地址和名称(管理员、注册商、技术人员(如果有))。
我检查了 whois 输出有不同的输出格式。我试过 Net::ParseWhois 和 Net::WhoisNG,但我没有得到不同域的电子邮件地址或名称。
例如:whois google.com
有什么方法可以让我使用任何 perl 模块从任何域获取上述详细信息(电子邮件和姓名),或者我如何解析 perl 中任何域的 whois 输出。
直接从以下产生的概要中快速复制/粘贴:
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
我将从自由文本中提取电子邮件的练习留给你。
使用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";
}