Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #
- # OpenDNS Stats Fetcher
- # Brian Hartvigsen <brian.hartvigsen@opendns.com>
- # Richard Crowley <richard@opendns.com>
- # JvdZ - 2018 oktober - small changes made due error "login failed. check username and password."
- #
- CSVURL="https://dashboard.opendns.com"
- LOGINURL="https://login.opendns.com/?source=dashboard"
- usage() {
- echo "Usage: $0 <username> <network_id> <YYYY-MM-DD> [<YYYY-MM-DD>]" >&2
- exit 1
- }
- date_check() {
- case "$1" in
- [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9])
- ;;
- *)
- echo "Error: dates must be in the YYYY-MM-DD form" >&2
- exit 2
- ;;
- esac
- }
- USERNAME=$1
- if [ -z "$USERNAME" ] ; then usage ; fi
- NETWORK_ID="$2"
- if [ -z "$NETWORK_ID" ] ; then usage ; fi
- date_check "$3"
- if [ -z "$4" ] ; then
- DATE="$3"
- else
- date_check "$4"
- DATE="$3to$4"
- fi
- echo -n "Password for $USERNAME: " >&2
- stty -echo
- read PASSWORD
- stty echo
- echo "" >&2
- PASSWORD=`echo -n "$PASSWORD" | od -A n -t x1 | tr -d '\n' | sed 's/ *$//;s/[ ]\{1,\}/%/g'`
- USERNAME=`echo -n "$USERNAME" | od -A n -t x1 | tr -d '\n' | sed 's/ *$//;s/[ ]\{1,\}/%/g'`
- COOKIEJAR=`mktemp /tmp/opendns-fetchstats-XXXXXX`
- # Get the signin page's form token
- FORMTOKEN=`curl --silent --insecure --cookie-jar "$COOKIEJAR" "$LOGINURL" | grep -m 1 formtoken | sed 's/^.*name="formtoken" value="\([0-9a-f]*\)".*$/\1/' `
- # Sign into OpenDNS
- SIGNIN=`curl --silent --insecure --cookie "$COOKIEJAR" --cookie-jar "$COOKIEJAR" --data "username=$USERNAME" --data "password=$PASSWORD" --data "return_to=$CSVURL" --data "formtoken=$FORMTOKEN" "$LOGINURL" | grep "firstName" `
- if [ "$SIGNIN" == "" ]; then
- echo "Login failed. Check username and password." >&2
- exit 2
- fi
- # Fetch pages of Top Domains
- GO="yes"
- PAGE=1
- while [ "yes" == "$GO" ] ; do
- CSV=`curl --silent --insecure \
- --cookie "$COOKIEJAR" \
- "$CSVURL/stats/$NETWORK_ID/topdomains/$DATE/page$PAGE.csv" \
- `
- if [ "$PAGE" == "1" ]; then
- if [ "$CSV" == "" ]; then
- echo "You can not access $NETWORK_ID" >&2
- exit 2
- fi
- HEADING=`echo "$CSV" | head -n 1`
- if [[ "$HEADING" == *DOCTYPE* ]]; then
- echo "Error retrieving data. Date range may be outside of available data." >&2
- exit 2
- fi
- else
- CSV=`echo "$CSV" | tail -n +2`
- fi
- if [ -z "$CSV" ] ; then GO="no"
- else echo "$CSV" ; fi
- PAGE=$(($PAGE + 1))
- done
- rm -f "$COOKIEJAR"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement