Нужно разобрать вывод whois в perl

Мне нужно найти адрес электронной почты и имя (администратора, регистратора, техника, если есть), используя perl.

Я проверил, что вывод whois имеет разные форматы вывода. Я пробовал Net::ParseWhois, а также Net::WhoisNG, но я не получаю адрес электронной почты или имя для разных доменов.

Например: whois google.com

Есть ли способ получить вышеуказанные данные (адрес электронной почты и имя) из любого домена, используя любой модуль perl, или как я могу проанализировать вывод whois для любого домена в perl.


person kailash19    schedule 10.08.2012    source источник
comment
Вы также можете взглянуть на Net::DRI (я его автор). Обратите внимание, что какую бы библиотеку вы ни использовали, ваше требование из любого домена будет трудно достичь, поскольку почти каждый сервер whois имеет разные выходные данные, поэтому для этого требуется много усилий в библиотеках, чтобы удовлетворить все случаи.   -  person Patrick Mevzek    schedule 04.01.2018


Ответы (2)


Быстрое копирование/вставка прямо из синопсиса дало следующее:

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
 [email protected] +1.6506234000 Fax: +1.6506188571
----

tech
 [email protected] +1.6503300100 Fax: +1.6506181499

Я оставлю вам упражнение по извлечению электронной почты из произвольного текста.

person Oleg V. Volkov    schedule 10.08.2012

Используйте 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";
}
person Borodin    schedule 10.08.2012
comment
Но новая версия командной строки whois предоставляет информацию о Google. - person kailash19; 21.08.2012
comment
По определению, вывод whois является общедоступным. Некоторые реестры ограничивают его содержание, например удаляют личные идентификационные данные, но, по крайней мере, для gTLD вы получаете абсолютно все прямо сейчас (за исключением, конечно, прокси-сервисов конфиденциальности). Однако вы можете столкнуться с конкретным случаем тонкого реестра, поэтому вам понадобятся два запроса whois для получения всех данных (в настоящее время все еще для .COM/.NET, но это изменится в 2018/2019). - person Patrick Mevzek; 04.01.2018