Пакетное преобразование домена в IP - PullRequest
3 голосов
/ 07 января 2011

У меня есть список доменов, которые я хотел бы преобразовать в соответствующие им IP-адреса. Допустим,

domain1.com
domain2.com
domain3.com

Я хотел бы получить IP-адрес каждого из этих доменов, например:

domain1.com -> 111.111.111.111
domain2.com -> 222.222.222.222
domain3.com -> 333.333.333.333

Я использую Perl-скрипт, который я нашел в сети, и добавляю свой список доменов, где написано:

echo "
<insert_list>
" | perl -MSocket -lne'
my $address = ( split /:/ )[ 0 ] or next;
my $number  = inet_aton $address;
my $ip      = inet_ntoa $number;
print "$address -> $ip";
'

Это работает, но срок действия некоторых доменов в моем списке истек, и у них больше нет IP-адресов, и в этом случае я получаю следующее сообщение об ошибке:

Bad arg length for Socket::inet_ntoa, length is 0, should be 4 at -e line 4, <> line 9.

Я хотел бы иметь распечатанный список, в котором также будет указано, не назначен ли домен. Пример:

domain1.com -> 111.111.111.111
domain2.com -> 222.222.222.222
domain3.com -> 333.333.333.333
domain4.com -> Неизвестный хост

Мой список довольно длинный: у меня есть около 500 доменов для организации и очистки. Каков наилучший способ получить IP каждого домена?

Любая помощь будет принята с благодарностью. Спасибо!

1 Ответ

3 голосов
/ 07 января 2011

Попробуйте изменить строку назначения $ip на:

my $ip = $number ? inet_ntoa $number : "Unknown Host";

. Эта переменная $number проверяет, является ли она пустой или нет, и только если это не так, она вызывает inet_ntoaпреобразовать адрес в печатную форму.Если $number пусто, ему присваивается строка «Неизвестный хост».

...