blob: d5fa29c22e8d396f121220b614b621f4b07246cb (
plain)
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
#!/bin/bash
set -euo pipefail
# ==== Variables ====
# Output warning if fewer than this number of seconds until expiry
WARNSECONDS=1209600 # Two weeks
# File containing a newline separated list of host:port combinations to be checked
DOMAINS="domains.txt"
# ==== Variables ====
# === Not variables ===
SUPPORTEDTLDS=(.co.uk .com .eu .info .je .net .org .ovh .uk)
# === Not variables ===
#for TLD in "${SUPPORTEDTLDS[@]}" ; do
# echo "DEBUG: Supported TLD: $TLD."
#done
# Loop through all host:port combinations
while read -r DOMAIN ; do
echo "DEBUG: DOMAIN: $DOMAIN."
# Work out the TLD
TLD=""
DOTS=0
for TLDTEST in "${SUPPORTEDTLDS[@]}" ; do
# echo "DEBUG: Checking $DOMAIN against $TLDTEST."
if echo "$DOMAIN" | grep -q "$TLDTEST$" ; then
# echo "DEBUG: $DOMAIN may be a $TLDTEST domain..."
DOTSTEST=$(echo "$TLDTEST" | grep -o "\." | wc -l)
# echo "DEBUG: $TLDTEST has $DOTSTEST dots compared to the previous $DOTS."
if [ "$DOTSTEST" -gt "$DOTS" ] ; then
# echo "DEBUG: Yes, $TLDTEST is the current winner."
TLD="$TLDTEST"
DOTS="$DOTSTEST"
fi
fi
done
if [ "$TLD" == "" ] ; then
echo "ERROR: Unknown TLD for $DOMAIN, ignoring."
continue
else
echo "DEBUG: $DOMAIN is a $TLD domain."
fi
# Get the WHOIS data
WHOIS="$(whois $DOMAIN)"
# Do the appropriate WHOIS grepping magic based on what the TLD was
case "$TLD" in
.co.uk)
# echo "DEBUG: Doing the .co.uk domain stuff"
DATESTR=$(echo "$WHOIS" | grep -E '^\s*Expiry date:' | sed -r 's/^\s*Expiry date:\s*//')
# echo "DEBUG: DATESTR: $DATESTR"
EXPIRY=$(date --date "$DATESTR" +%s)
# echo "DEBUG: $DOMAIN expires on $EXPIRY aka "$(date --date @"$EXPIRY")"."
;;
.je)
# echo "DEBUG: Doing the .je domain stuff"
# .je WHOIS returns two dates, so pick the earlier one just in case
# Strip out st/nd/rd/th (e.g. 30th -> 30) for parsing with `date`
DATESTR=$(echo "$WHOIS" | grep -E '^\s*Registry fee due on' | sed -r 's/\s*Registry fee due on //; s/ each year//; s/(st |nd |rd |th )/ /')
echo "DEBUG: DATESTR: $DATESTR"
# Same again, plus the original registration year (e.g. 30th January 2011 -> 30 January)
DATESTR2=$(echo "$WHOIS" | grep -E "^\s*Registered on" | sed -r 's/\s*Registered on //; s/ [0-9]+//; s/(st |nd |rd |th )/ /')
echo "DEBUG: DATESTR2: $DATESTR2"
# These date only strings will be assumed to be this year by `date`
EXPIRY=$(date --date "$DATESTR" +%s)
EXPIRY2=$(date --date "$DATESTR2" +%s)
# Pick whichever is lower (i.e. sooner)
if [ "$EXPIRY" -gt "$EXPIRY2" ] ; then
EXPIRY="$EXPIRY2"
# Keep the original chosen DATESTR for use later
DATESTR="$DATESTR2"
fi
# If this date is in the past, assume it actually expires next year
NOW=$(date +%s)
if [ "$EXPIRY" -lt "$NOW" ] ; then
YEAR=$(date +%Y)
YEAR=$((YEAR+1))
EXPIRY=$(date --date "$DATESTR $YEAR" +%s)
# echo "DEBUG: Chosen DATESTR: $DATESTR $YEAR"
# else
# echo "DEBUG: Chosen DATESTR: $DATESTR"
fi
# echo "DEBUG: $DOMAIN expires on $EXPIRY aka "$(date --date @"$EXPIRY")"."
;;
.uk)
echo "DEBUG: Doing the .uk domain stuff"
DATESTR=$(echo "$WHOIS" | grep -E '^\s*Expiry date:' | sed -r 's/^\s*Expiry date:\s*//')
# echo "DEBUG: DATESTR: $DATESTR"
EXPIRY=$(date --date "$DATESTR" +%s)
# echo "DEBUG: $DOMAIN expires on $EXPIRY aka "$(date --date @"$EXPIRY")"."
;;
*)
echo "ERROR: Unknown TLD for $DOMAIN, I have no idea how we got here, exiting."
exit
;;
esac
NOW=$(date +%s)
# echo "DEBUG: NOW: $NOW."
# Number of seconds left
DIFFERENCE=$(("$EXPIRY" - "$NOW"))
# echo "DEBUG: DIFFERENCE: $DIFFERENCE."
# Warn if less than WARNSECONDS less
if [ "$DIFFERENCE" -lt "$WARNSECONDS" ] ; then
echo "Warning! The domain $DOMAIN expires in $DIFFERENCE seconds (~$((DIFFERENCE / 60 / 60 / 24)) days)."
else
echo "DEBUG: The domain $DOMAIN expires in $DIFFERENCE seconds (~$((DIFFERENCE / 60 / 60 / 24)) days)."
fi
done < "$DOMAINS"
|