Created
May 24, 2024 22:11
-
-
Save yunginnanet/23f958f382e9a4e42a739cd07bdd0ad1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
function newFile() { | |
_resfile="dns_results.$(date +%s).csv" | |
echo "hostname,ips" >>"$_resfile" | |
echo "$_resfile" | |
} | |
resfile="$(newFile)" | |
export resfile | |
function resolve() { | |
dig +tries=5 +short "$1" | tr '\n' ' ' | grep -v ';;' | grep . || return 1 | |
} | |
function writeResult() { | |
( | |
flock 5 | |
echo "$@" >>"$resfile" | |
) 5>>"$resfile.lock" | |
} | |
export resolve | |
export writeResult | |
function tryResolve() { | |
for delay in {1,2,3,4,5,10,15,20,30,45}; do | |
if resolve "$1"; then | |
return 0 | |
else | |
echo -n "." | |
sleep "$delay" | |
fi | |
done | |
# fail | |
return 1 | |
} | |
export tryResolve | |
function try() { | |
( | |
flock -s 6 | |
if _t="$(tryResolve "$domain")"; then | |
writeResult "$domain,$_t" | |
else | |
echo "$domain" >>"$resfile.failed" | |
fi | |
) 6>>"$resfile.readlock" | |
} | |
clear | |
function log() { | |
tput home | |
_fin="$(wc -l "$resfile" 2>/dev/null | awk '{print $1}')" | |
_failed="$(wc -l "$resfile.failed" 2>/dev/null | awk '{print $1}')" | |
echo -e "\nfinished: \e[0;32m$_fin\e[0m\nfailed: \e[31m$_failed\e[0m\n" | |
} | |
_want=0 | |
export _want | |
while read -r domain; do | |
(("_want = $_want + 1")) | |
try "$domain" & | |
log | |
done | |
function _total() { | |
wc -l --total always "$resfile" "$resfile.failed" 2>/dev/null | grep total | tr -d ' total' 2>/dev/null | |
} | |
while :; do | |
sleep 1 | |
log | |
if test "$(_total)" -ge "$_want" 2>/dev/null; then | |
if flock -n "$resfile.readlock"; then | |
echo -e "\n\nfin." | |
break | |
else | |
echo -n "." | |
sleep 1 | |
continue | |
fi | |
fi | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment