4

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

export IP=`curl http://network-tools.com/default.asp?host=www.example.com | 
       grep -oE '<br>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | 
       cut -c5-`

Работает нормально, но у меня есть несколько вопросов:

  1. Есть ли простой инструмент для получения такого же результата? Мне нужно, чтобы он работал через прокси, который ограничивает имена хостов, поэтому я использую страницу сетевых инструментов.
  2. Как я могу сделать это функцией имени хоста? что-то вроде getIP(имя хоста)

2 ответа2

5

Попробуйте что-то вроде

export IP=`( dig ${HOSTNAME} A +short | tail -n1; \
             dig ${HOSTNAME} AAAA +short | tail -n1 ) \
           | head -n1`

Это даст вам:

  • Для хоста с хотя бы одним IPv4-адресом (одним из) IPv4-адресом
  • Для хоста без IPv4-адресов, но с хотя бы одним IPv6-адресом (одним из) IPv6-адресов
  • Для хоста без адреса (IPv4 или IPv6) вообще в DNS или в случае сбоя распознавателя пустое значение

Если вам не нужны возможности IPv4 или IPv6 (кажется, ваш вопрос указывает на то, что вы в основном заинтересованы в адресе IPv4), просто удалите эту команду dig (A - IPv4, AAAA - IPv6). Итак, если вас интересуют только адреса IPv4:

export IP=`dig ${HOSTNAME} A +short | tail -n1`

tail -n1 гарантирует, что вы получите IP-адрес (в случае CNAME и, возможно, других типов записей, dig выводит ссылочное каноническое имя в первой строке). head -n1 гарантирует, что вы получите только один адрес, возвращая только первую строку оставшихся выходных данных (не требуется в случае только одного семейства адресов, поскольку tail вернет только один адрес). Поскольку записи DNS обычно обслуживаются в циклическом порядке, нет гарантии, какой точный адрес будет возвращен для хостов с несколькими адресами.

Я не слишком знаком с написанием функций bash, но должно быть относительно легко превратить это в функцию.

2

Попробуйте следующее:

  • host www.example.com
  • nslookup www.example.com
  • dig www.example.com

В зависимости от того, сколько дополнительной информации вы хотите, выберите подходящего кандидата.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .