![]() ![]() |
czf4bfu.prosek.czf |
Subversion Repositories: |
Compare with Previous - Blame - Download
#!/bin/sh# stahovatko czf4bfu souboru ze serveru podle zadanych zdroju# pokousi se i o rekurzivni pristup a stahnuti jinak nedostupnych# baliku# sources je soubor s IP na jednom radku#SOURCES="${1:-$HOME/czf4bfu/zdroje.txt}"SOURCES="zdroje.txt"# domeny ve kterych budu hledat czf4bfu host, jeho IP pouziju.#DOMENY="${2:-$HOME/czf4bfu/domeny.txt}"DOMENY="domeny.txt"# parametry pro wgetDSTDIR="/home/www/html/czf4bfu"# parametry wgetu.# -N zapina overovani posledni modifikace, bohuzel dost serveru# to nepodporuje nebo nema zapnute. Pripadne vypnout a nahradit# -nc, coz zajisti pri kazdem pokusu prepsani starehoWGETPARAMS="-r -l 0 -N -np -nd -t 3 -A '.txt,.deu' -P $DSTDIR"TMPFILE="/tmp/getall-czf-$RANDOM"HOST=hostfunction getbyip(){IP=$1# prvni zkusim soubor primo z tou IP.# momentalne nutne u czela.czfif wget $WGETPARAMS "http://$IP/czf4bfu/global-$IP.txt"; then# pokud probehlo uspesne stazeni hlavniho souboru, zkus stahnout# i pripadne dalsi soubory# potom zkusim rekuznivne nalezt pripadne sousedy, o kterych# on vi a ja ne, a stahnu taky jejich datawget $WGETPARAMS "http://$IP/czf4bfu/"fi}# vrati na stdout IP podle A zaznamu.# predany parametr je domenafunction getdnsip(){DOMAIN=$1# Potom prihodim seznamy dle A recordu$HOST $DOMAIN | sed \-e "/has address/ ! d" \-e "s/^.*has address \([[:digit:].]\+\)[[:space:]]*$/\1/"}function getsrvip(){# Ziskani pomoci SRV zaznamu# trosku komplikace je, ze SRV vraci zaznam hostname, ne IP, takze jeste# jednou resolve.DOMAIN=$1host -t SRV _http._tcp.czf4bfu.$DOMAIN | sed \-e "/SRV [[:digit:]]\+ [[:digit:]]\+ [[:digit:]]\+/ ! d" \-e "s/^.*SRV [[:digit:]]\+ [[:digit:]]\+ [[:digit:]]\+ \([[:alnum:].-]\+\)[[:space:]]*$/\1/" | \while read HOSTNAME; dogetdnsip $HOSTNAMEdone}echo -n > "$TMPFILE"# Jako prvni zkus najit zdroje v defaultni domene# Pozor. Pokud nebude fungovat timestamp, je lepsi dat svuj lokalni# DEU soubor jako read-only pro toho kdo spousti tento skript, jinak by# mohl prepsat deu soubor pro tento stroj.getdnsip czf4bfu >> "$TMPFILE"# Napred zkusime hledani podle domen zadanych v souboru[ -f "$DOMENY" ] && cat "$DOMENY" | while read DOMAIN; dogetsrvip $DOMAIN >> "$TMPFILE"# Potom prihodim seznamy dle A recordugetdnsip czf4bfu.$DOMAIN >> "$TMPFILE"done# ted pridam do seznamu rucne zadane IPcat "$SOURCES" >> "$TMPFILE"# seradim a vyhazu duplikatyIPS=$(cat "$TMPFILE" | sort -u )echo "Nalezene IP: $IPS"# a ted uz jenom stahnufor IP in $IPS; dogetbyip $IPdone