-
Notifications
You must be signed in to change notification settings - Fork 35
/
Copy pathfetchstats
executable file
·99 lines (84 loc) · 2.12 KB
/
fetchstats
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/bin/bash
#
# OpenDNS Stats Fetcher
# Brian Hartvigsen <[email protected]>
# Richard Crowley <[email protected]>
#
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 formtoken \
| sed 's/^.*name="formtoken" value="\([0-9a-f]*\)".*$/\1/' \
`
# Sign into OpenDNS
SIGNIN=`curl --silent --insecure \
--cookie "$COOKIEJAR" \
--cookie-jar "$COOKIEJAR" \
--data "formtoken=$FORMTOKEN&username=$USERNAME&password=$PASSWORD&sign_in_submit=foo" \
"$LOGINURL"`
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"