Вопрос или проблема
Команда dig устарела. Я использую drill из ldns. У drill, похоже, нет короткого варианта для отображения только IP. Кто-нибудь знает, как сделать так, чтобы он показывал только IP и не выводил другой текст?
Чуть поздно к вечеринке, но похоже, что drill
~сейчас~ имеет флаг -Q
(“тихий”), который делает то же самое, что и +short
для dig:
$ drill -Q superuser.com
104.18.8.56
104.18.9.56
ОБНОВЛЕНИЕ: Похоже, что эта функция присутствует в ldns
с по крайней мере, с версии 1.0.0. Вы, вероятно, просто пропустили это в своем исследовании, потому что drill
не нацелен на 100% замену dig
?
Предыдущий Ответ
Что немного удивительно, так это то, что эта функция была зафиксирована в 2005 году, но не была выпущена до ноября 2021 года.
Я не уверен, что вызвало задержку (и другие коммиты) на 16 лет, но, по крайней мере, у вас теперь есть нативное решение
drill
!
dig
с +short
выглядит так:
$ dig +short example.com
XXX.XX.XX.XXX
Таким образом, вы можете просто сделать:
$ drill example.com | awk '{if(NF > 0 && substr($1,1,1) != ";" && $0 !~ /SOA/) print $NF }'
XXX.XX.XX.XXX
Понимание моего awk
if (NF > 0) # Если строка не пустая
if (substr($1,1,1) != ";") # Если первый символ не `;`
if ($0 !~ /SOA/) # Если строка не содержит SOA
print $NF # Печатаем последний столбец.
Нашел способ сделать это с помощью curl и cloudflare
curl -fSs https://1.1.1.1/cdn-cgi/trace | awk -F= '/ip/ { print $2 }'
Ответ или решение
Дорогие коллеги,
В последнее время мы наблюдаем значительные изменения в используемых инструментах для работы с DNS-запросами. В частности, команда dig
, которая долгое время служила стандартом в этой области, была объявлена устаревшей. Взамен ей предлагается использовать утилиту drill
, входящую в пакет ldns
. Однако многие пользователи столкнулись с проблемой — drill
не имеет короткой опции для получения только IP-адреса, аналогичной +short
в dig
.
Решение проблемы
К счастью, решение уже существует! В версии ldns
1.0.0 была добавлена флаг -Q
(quiet), который позволяет сократить вывод команды до минимального. Теперь вы можете использовать drill
следующим образом:
drill -Q superuser.com
Вывод этой команды будет содержать только IP-адреса:
104.18.8.56
104.18.9.56
Историческая справка
Этот флаг существует в коде ldns
с 2005 года, но был доступен в выпусках только с ноября 2021 года. Причины задержки в добавлении этой функции остаются неведомыми. Теперь у вас есть возможность использовать drill
как более современную альтернативу dig
.
Альтернативные подходы
Если по какой-то причине у вас не получается воспользоваться флагом -Q
, существуют и другие способы для извлечения только IP-адреса из вывода drill
. Например, вы можете применить команду awk
, которая позволяет фильтровать ненужные строки:
drill example.com | awk '{if(NF > 0 && substr($1,1,1) != ";" && $0 !~ /SOA/) print $NF}'
Этот командный фрагмент проверяет каждую строку вывода drill
на наличие пустоты, отбрасывает строки, начинающиеся с точки с запятой (символа комментария в DNS), и не включает записи типа SOA.
Дополнительные инструменты
Кроме того, вы также можете использовать curl
для получения IP-адреса через публичный DNS-сервер. Например, команда с использованием Cloudflare выглядела бы следующим образом:
curl -fSs https://1.1.1.1/cdn-cgi/trace | awk -F= '/ip/ { print $2 }'
Данная команда обращается к API Cloudflare и возвращает только ваш IP-адрес.
Заключение
Таким образом, с недавними обновлениями drill
теперь можно эффективно использовать для извлечения IP-адресов. Надеюсь, что приведенные выше способы и решения окажутся полезными в вашей практической деятельности. Если у вас возникнут какие-либо дополнительные вопросы или потребуются более детальные пояснения — не стесняйтесь обращаться!