SHOW:
|
|
- or go back to the newest paste.
1 | #!/bin/sh | |
2 | # Dependencies: | |
3 | # Required: | |
4 | # ifconfig && grep && wc && awk && ( curl || wget ) | |
5 | # Recommended: | |
6 | # stat ca-certificates | |
7 | # Notes: | |
8 | # Change eth0 to the correct interface, see ifconfig output for details, if you are behind a router and dont care to look it up "lo" should work | |
9 | ||
10 | # Basic Configuration Options: | |
11 | - | LOG="/var/log/ip_log" |
11 | + | |
12 | TOKEN="YOUR_TOKEN_HERE" | |
13 | LOG="/tmp/duckdns" | |
14 | - | NEW=$(/sbin/ifconfig $NIC | awk -F':' '/inet addr/{split($2,_," ");print _[1]}') |
14 | + | |
15 | - | #NEW=$(hostname -I) # If this works (and gets the right address) it is better than the above, some systems may use -i |
15 | + | DEBUG="off" |
16 | - | if [ $(echo $NEW | grep '^192.\|^10.\|^127.\|^172.' | wc -l) -eq 1 ];then |
16 | + | |
17 | - | echo "Using external IP check" |
17 | + | # Advanced Configuration Options: |
18 | IP="$LOG.log" | |
19 | TIME="$LOG-time.log" | |
20 | WARN="$LOG-warn.log" | |
21 | ERROR="$LOG-warn.log" | |
22 | ||
23 | # NEW=$(hostname -I) # If this works (and gets the right address) use this, some systems may use -i | |
24 | - | echo "Failed to get external IP" > "$LOG-error" |
24 | + | |
25 | # You should not need to edit anything below this line | |
26 | ||
27 | if [ -z "$NEW" ];then | |
28 | NEW=$(/sbin/ifconfig $NIC | awk -F':' '/inet addr/{split($2,_," ");print _[1]}') | |
29 | fi | |
30 | if [ $(echo $NEW | grep '^192.168.\|^10.\|^127.\|^172.1[6-9].\|^172.2[0-9].\|^172.3[0-1].\|^169.254.[1-2]' | wc -l) -eq 1 ];then | |
31 | # Match IP range: 192.168. 10. 127. --> 172.(16-31). <-- 169.254.(1,2) | |
32 | echo "Using external IP check, use 11 second intervals or more to avoid being blocked" >> "$WARN" | |
33 | - | if [ -f "$LOG" ];then |
33 | + | |
34 | NEW=$(curl http://ipecho.net/plain 2>/dev/null) | |
35 | - | THEN=$(stat -c "%Y" "$LOG") |
35 | + | |
36 | NEW=$(wget -qO- http://ipecho.net/plain) | |
37 | - | THEN=$(cat "$LOG.time") |
37 | + | |
38 | if [ $? -ne 0 ];then | |
39 | - | OLD=$(cat "$LOG") |
39 | + | echo "Failed to get external IP" >> "$ERROR" |
40 | exit | |
41 | fi | |
42 | fi | |
43 | TAT=1 | |
44 | if [ $(type stat > /dev/null;echo $?) -eq 0 ];then | |
45 | TAT=0; | |
46 | - | S="https" |
46 | + | |
47 | - | D="http" |
47 | + | |
48 | - | URL="://www.duckdns.org/update?domains=$DOMAIN&token=$TOKEN&ip=$NEW" |
48 | + | if [ -f "$IP" ];then |
49 | if [ $TAT -eq 0 ];then | |
50 | THEN=$(stat -c "%Y" "$IP") | |
51 | else | |
52 | - | echo "Looks like ca-serticates is missing or outdated" > "$LOG-warn" |
52 | + | THEN=$(cat "$TIME") |
53 | fi | |
54 | OLD=$(cat "$IP") | |
55 | else | |
56 | THEN=864000 | |
57 | OLD="0.0.0.0" | |
58 | fi | |
59 | - | echo "Looks like ca-serticates is missing or outdated" > "$LOG-warn" |
59 | + | |
60 | if [ "$OLD" != "$NEW" ] || [ $(($NOW-$THEN)) -gt 863999 ];then | |
61 | S="https://" | |
62 | - | echo "wget does not appear to support SSL" > "$LOG-warn" |
62 | + | D="http://" |
63 | URL="www.duckdns.org/update?domains=$DOMAIN&token=$TOKEN&ip=$NEW" | |
64 | if [ $DEBUG != "off" ];then | |
65 | echo $URL | |
66 | fi | |
67 | if [ $(type curl > /dev/null;echo $?) -eq 0 ];then | |
68 | - | echo "$NEW" > "$LOG" |
68 | + | |
69 | if [ $? -eq 77 ];then | |
70 | - | echo "$(date +%s)" > "$LOG.time" |
70 | + | echo "Looks like ca-certificates is missing or outdated" >> "$WARN" |
71 | NOW=$(curl -k "$S$URL" 2>/dev/null) | |
72 | fi | |
73 | - | echo "$NOW" > "$LOG-error" |
73 | + | |
74 | NOW=$(wget -q -O - "$S$@" "$URL") | |
75 | if [ $? -eq 1 ];then | |
76 | if [ $(wget --help|grep '--no-check-certificate') ];then | |
77 | echo "Looks like ca-certificates is missing or outdated" >> "$WARN" | |
78 | NOW=$(wget --no-check-certificate -q -O - "$@" "$S$URL") | |
79 | else | |
80 | echo "wget does not appear to support SSL" >> "$WARN" | |
81 | NOW=$(wget -q -O - "$@" "$D$URL") | |
82 | fi | |
83 | fi | |
84 | fi | |
85 | if [ "$NOW" = "OK" ]; then | |
86 | echo "$NEW" > "$IP" | |
87 | if [ $TAT -eq 1 ];then | |
88 | echo "$(date +%s)" > "$TIME" | |
89 | fi | |
90 | elif [ "$NOW" = "KO" ]; then | |
91 | echo "Double-check your Token/Domain" >> "$ERROR" | |
92 | else | |
93 | echo "$NOW" >> "$ERROR" | |
94 | fi | |
95 | fi | |
96 | fi | |
97 | if [ $DEBUG != "off" ];then | |
98 | if [ -f "$ERROR" ];then | |
99 | ls -l "$ERROR" | |
100 | echo "Error Log:" | |
101 | cat "$ERROR" | |
102 | echo '--------------------' | |
103 | fi | |
104 | if [ -f "$WARN" ];then | |
105 | ls -l "$WARN" | |
106 | echo "Warning Log:" | |
107 | cat "$WARN" | |
108 | echo '--------------------' | |
109 | fi | |
110 | if [ -f "$IP" ];then | |
111 | ls -l "$IP" | |
112 | echo "Last IP:" | |
113 | cat "$IP" | |
114 | else | |
115 | echo "NO last IP, well this is not good" | |
116 | fi | |
117 | else | |
118 | if [ $(cat "$ERROR" | wc -l) -gt 16 ];then | |
119 | cat "$ERROR" | tail -8 > "$ERROR" | |
120 | fi | |
121 | if [ $(cat "$WARN" | wc -l) -gt 16 ];then | |
122 | cat "$WARN" | tail -8 > "$WARN" | |
123 | fi | |
124 | fi |