Извлеките IP-адрес из строки

Я не знаю ни о каком существующем дистрибутиве, но это должно быть довольно просто создать с Debian с помощью предварительного отбора.

Вы Просто создаете свой собственный пакет, который в основном зависит от пакетов для Вашего решения для сравнительного тестирования. Тот пакет идет с/etc/init.d/сценарием, который запускает сравнительное тестирование при начальной загрузке, хранит результаты везде, где Вам нужны они, и завершает работу системы впоследствии.

С предварительным отбором можно автоматизировать debian установщик, чтобы просто взять систему, хлопнуть debian на, установить пользовательский пакет, перезагрузку, иметь тестовый прогон и завершить работу системы.

2
04.01.2012, 09:22
4 ответа

Так как Вы отправили это на сайте Unix & Linux вместо StackOverflow, я задаюсь вопросом, не является ли что-то вроде этого тем, что Вы ищете:

cat hostlist.txt | xargs resolveip -s

Это только возвратит один IP-адрес все же.

Некоторые имена хостов будут иметь несколько IP-адресов связанными с ними:

$ host www.google.com
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 74.125.227.18
www.l.google.com has address 74.125.227.17
www.l.google.com has address 74.125.227.16
www.l.google.com has address 74.125.227.20
www.l.google.com has address 74.125.227.19

Для получения просто списка дюйм/с один способ сделать это:

host <hostname> | grep "has address" | awk '{print $4}'

Если Вы хотите придерживаться Perl, с помощью resolveip:

$ipaddr = qx(resolveip -s $hostname);

Или получить всего дюйм/с, не выполняя команд оболочки:

use Socket;
@ipaddrs = map { inet_ntoa($_) } (gethostbyname($hostname))[4,];
5
27.01.2020, 21:51
  • 1
    Отметьте , который делает это особенным для захвата всех адресов :-) Пример: @addresses = gethostbyname($name) or die "Can't resolve $name: $!\n"; @addresses = map { inet_ntoa($_) } @addresses[4 .. $#addresses]; # @addresses is a list of IP addresses ("208.201.239.48", "208.201.239.49") –  Nikhil Mulley 17.01.2012, 14:29

Почему не просто используют dig +short?

3
27.01.2020, 21:51

Я использовал бы что-то как:

(\d{1,3}\.){3}\d{1,3}

Если Вы захотите что-то более обременительное, то Вы будете, вероятно, иметь:

([012]?\d{1,2}\.){3}[012]?\d{1,2}

Но даже это все еще несколько свободно. Например, это все еще позволяет '269.278.287.296' ложно соответствовать.

Но оба соответствуют стандартным 0.0.0.0 к 255.255.255.255.

1
27.01.2020, 21:51
  • 1
    \b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b соответствовал бы для всего возможного и допустимого диапазона IP-адреса. –  Nikhil Mulley 14.01.2012, 13:29
  • 2
    , который я также использую search.cpan.org / ~ neely/Data-Validate-IP-0.14/lib/Data/Validate / … модуль жемчуга, чтобы проверить, является ли IP-адрес допустимым стилем IPv4. –  Nikhil Mulley 14.01.2012, 13:35

Для добавления к ответу @mkopala если у Вас есть несколько хостов и Вы хотите отслеживать их, создать хеш, так, чтобы была легкая ссылка хоста IP отображения.

Пример:

#!/usr/bin/perl
use Socket;
@hostnames = ('www.google.com', 'www.yahoo.com', 'www.facebook.com');
%ipaddrs = ();
foreach $hostname (@hostnames) {
        map { $ipaddrs{$hostname} = inet_ntoa($_) } (gethostbyname($hostname))[4,];
}
0
27.01.2020, 21:51

Теги

Похожие вопросы