Получение TLD из записи ptr?

Возможный дубликат:
Извлечение TLD из URL-адресов и сортировка доменов и поддоменов для каждого файла TLD

Например: получение yahoo.com из записи PTR 45.36.190.206.in-addr.arpa указателя доменного имени ir1.fp.vip.gq1.yahoo.com.

Я использую Net::Nslookup; nslookup(host => "206.190.36.45", type => "PTR"); который возвращает ir1.fp.vip.gq1.yahoo.com.

Нужно получить только "yahoo.com" из записи ptr.

Как получить это с помощью Perl?


person ks_1010    schedule 04.02.2013    source источник
comment
Ваш вопрос просто Как получить TLD ir1.fp.vip.gq1.yahoo.com, а именно yahoo.com?   -  person ikegami    schedule 05.02.2013
comment
@ikegami да, нужно получить TLD.   -  person ks_1010    schedule 05.02.2013
comment
Что касается вашего удаленного вопроса, ::PortState просто проверяет, может ли он создать сокет. Для протокола без установления соединения, такого как UPD, это бесполезная проверка, потому что удаленная машина никогда не связывается.   -  person ikegami    schedule 27.02.2013


Ответы (1)


Ваш вопрос просто "Как получить TLD ir1.fp.vip.gq1.yahoo.com, а именно yahoo.com?"

use Domain::PublicSuffix qw( );

my $dps = Domain::PublicSuffix->new();

my $host = 'ir1.fp.vip.gq1.yahoo.com';

$host =~ s/\.\z//;  # D::PS doesn't handle "domain.com.".
my $root = $dps->get_root_domain($host)
   or die $dps->error();

say $root;

Кстати, вы можете использовать встроенный / системный вызов gethostbyaddr для получения записи PTR.

use Socket qw( inet_aton AF_INET );
my $host = gethostbyaddr(inet_aton("206.190.36.45"), AF_INET);
person ikegami    schedule 04.02.2013
comment
Работает. Потрясающе спасибо! - person ks_1010; 05.02.2013
comment
В этом случае «корень» может преобразоваться в исходный IP-адрес, но так будет не всегда. - person ikegami; 05.02.2013
comment
да, я использовал блок if для обработки списка из 500 нечетных IP-адресов, но для пары из них это не удалось. - person ks_1010; 05.02.2013