Я хотел изменить команду dig
для автоматического применения обратного просмотра к любой записи A, которую я получаю на выходе.
Поэтому я создал следующую функцию:
dt ()
{
remove=$(echo $@ | sed 's^https*^^' | sed 's^[,/*:]^^g' );
dig any +trace +nocl +nodnssec $remove | sed "s/\($remove.*A\s*\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)\)/dig -x \2 +short | xargs echo \"\1 ->\"/e"
}
С этим кодом у меня есть следующий вывод (только часть записи показана, чтобы избежать увеличения вопроса):
domain.com. 1200 A 198.54.115.174 -> server224-3.web-hosting.com.
Однако теперь мне также необходимо выполнить поиск по whois с использованием полученного IP-адреса.из вывода dig, но только в том случае, если dig -x \2 +short
не дает никакого результата (stackoverflow.com может быть хорошим примером домена с записями A, у которых нет PTR).
Я пробовал что-то подобноепроверить код завершения обычной команды host
(поскольку dig
подразумевает, что вывод успешен, даже если он пуст) и выполнить правильную команду в зависимости от результата:
dig any +trace +nocl +nodnssec "$remove" | sed -e "s/\($remove.*A\s*\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)\)/echo -n \"\1 -> \"; host \2 | grep -q ''; if [ ${PIPESTATUS[0]} -eq 0 ]; then dig -x \2 +short; else whois \2 | grep 'network:Network-Name:';fi; /e"
Но кажется, что sed как-то влияетзначение массива ${PIPESTATUS[0]}
.
Я хотел сделать эти изменения в sed, потому что мне нужно было что-то, что будет печатать строки на ходу.Если я использую переменные и изменяю вывод из них, функция будет работать медленнее, по крайней мере визуально.
Может быть, awk
может быть полезным здесь, но я не уверен, как мне написать код, используя этокоманда.
Есть ли способ обойти эту проблему?Можно ли использовать sed для этой цели или я должен использовать какой-то другой инструмент?Спасибо.