jablonka.czprosek.czf

czf4bfu.prosek.czf

Subversion Repositories:
[/] [zal/] [get-http.sh] - Rev 5 Go to most recent revision

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 wget
DSTDIR="/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 stareho
WGETPARAMS="-r -l 0 -N -np -nd -t 3 -A '.txt,.deu' -P $DSTDIR"

TMPFILE="/tmp/getall-czf-$RANDOM"
HOST=host

function getbyip()
{
IP=$1
        # prvni zkusim soubor primo z tou IP.
        # momentalne nutne u czela.czf
        if 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 data
        wget $WGETPARAMS "http://$IP/czf4bfu/"
        fi

}

# vrati na stdout IP podle A zaznamu.
# predany parametr je domena
function 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=$1
        host -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; do
                        getdnsip $HOSTNAME
                done
}

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; do
        getsrvip $DOMAIN >> "$TMPFILE"
# Potom prihodim seznamy dle A recordu
        getdnsip czf4bfu.$DOMAIN >> "$TMPFILE"
done

# ted pridam do seznamu rucne zadane IP
cat "$SOURCES" >> "$TMPFILE"

# seradim a vyhazu duplikaty
IPS=$(cat "$TMPFILE" | sort -u )

echo "Nalezene IP: $IPS"

# a ted uz jenom stahnu
for IP in $IPS; do
        getbyip $IP
done


Powered by WebSVN 2.2.1