/
fetchstats
executable file
·78 lines (67 loc) · 1.55 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
#!/bin/sh
#
# OpenDNS Stats Fetcher
# Richard Crowley <richard@opendns.com>
#
URL="https://opendns.com/dashboard"
HEADING="Rank,Domain,Total,Blacklisted,Blocked by Category,Blocked as Phishing,Blocked as Malware"
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
COOKIEJAR=$(mktemp /tmp/opendns-fetchstats-XXXXXX)
# Get the signin page's form token
FORMTOKEN=$(curl --silent --insecure \
--cookie-jar "$COOKIEJAR" \
"$URL/signin" \
| grep formtoken \
| sed 's/^.*name="formtoken" value="\([0-9a-f]*\)".*$/\1/' \
)
# Sign into OpenDNS
curl --silent --insecure \
--cookie "$COOKIEJAR" \
--cookie-jar "$COOKIEJAR" \
--data "formtoken=$FORMTOKEN&username=$USERNAME&password=$PASSWORD&sign_in_submit=foo" \
"$URL/signin" \
> /dev/null
# Fetch pages of Top Domains
echo "$HEADING"
GO="yes"
PAGE=1
while [ "yes" = "$GO" ] ; do
CSV=$(curl --silent --insecure \
--cookie "$COOKIEJAR" \
"$URL/stats/$NETWORK_ID/topdomains/$DATE/page$PAGE.csv" \
| grep -v "$HEADING"
)
if [ -z "$CSV" ] ; then GO="no"
else echo "$CSV" ; fi
PAGE=$(($PAGE + 1))
done
rm -f "$COOKIEJAR"