2014-10-31 5 views
0

В настоящее время я пытаюсь написать скрипт, который будет выписывать домены, которые он обнаруживает. Первая идея заключалась в том, чтобы выписать все, что включает «NXDOMAIN», но это закончилось тем, что я нашел домен, который я не смог зарегистрировать. Поэтому я добавил требование для «a.gtld-servers.net». Проблема в том, что оба этих условия выполняются на доменах, уже зарегистрированы. Я свеж от идей относительно того, что я могу использовать для фильтрации моих результатов.Проверка наличия домена в bash с dig

У кого-нибудь есть идеи? Вот мой код:

function getResponse() { 
    output=$(dig $1.com +nostats +noanswer +noquestion) 
    if [[ $output == *NXDOMAIN* ]] && [[ $output == *a.gtld-servers.net.* ]]; then 
    echo "$1.com" 
    fi 
} 

for v in {a..z}; do 
    for w in {a..z}; do 
    for x in {a..z}; do 
     getResponse $v$w$x & 
     sleep 0.01s 
    done 
    done 
done 

for v in {a..z}; do 
    for w in {a..z}; do 
    for x in {a..z}; do 
     for y in {a..z}; do 
     getResponse $v$w$x$y & 
     sleep 0.01s 
     done 
    done 
    done 
done 
+0

КСТАТИ: 'для V в {a..z} {} {a..z a..z }; do echo $ v; done' – Cyrus

+0

Спасибо - я знаю, что я очень неэффективен в своих сценариях, но он выполняет работу в отношении цикла, который мне нужен. Если бы добавить спать 0,01 с, он разбил мой компьютер. Я думаю, он сбежал с ОЗУ. Любые идеи RE: мой вопрос? – Jack

+0

Удалите '&' или добавьте новую строку с 'wait' после первого' done' – Cyrus

ответ

3

Вот скрипт, который, кажется, работает:

#! /bin/bash 

do_query() # name 
{ 
    dig "$1" +noquestion +nostat +noanswer +noauthority 2> /dev/null 
} 

get_answers_number() # name 
{ 
    local res=$(do_query "$1") 
    res=${res##*ANSWER: } 
    echo "${res%%,*}" 
} 

# Unregistered domains saved in file 
file="unregistered.txt" 
echo "Results will be saved in $file" 

for adr in {a..z}{a..z}{a..z} {a..z}{a..z}{a..z}{a..z} 
do 
    name="$adr.com" 
    printf "Checking %s ...\r" "$name" 
    r=$(get_answers_number "$name") 
    if ((r==0)); then 
     echo "Found $name   " 
     echo "$name" >&3 
    fi 
done 3>| "$file"