X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=dynamic-ip-update;h=4b5983fbed4153e5c9b7a57d3203863b2093393f;hb=12cab163424e3a7b0815646d1d4407f9b5839bcb;hp=e10cdb7a4749f295ad1806c3a62b59ed9faf74de;hpb=5e45ae077e790c0e798f09ffad8ecd3cb6c3bb28;p=distro-setup diff --git a/dynamic-ip-update b/dynamic-ip-update index e10cdb7..4b5983f 100755 --- a/dynamic-ip-update +++ b/dynamic-ip-update @@ -1,6 +1,8 @@ #!/bin/bash source ~/.bashrc + + main() { fqdn=$(hostname -f) @@ -11,7 +13,7 @@ main() { up4=false - if ! read -r _ _ gateway _ < <(ip -4 route get 85.119.83.50 2>/dev/null); then + if ! read -r _ _ gateway _ ifdev _ < <(ip -4 route get 85.119.83.50 2>/dev/null); then # if our internet is down, just give up, no need to have an error if [[ ! $INVOCATION_ID ]]; then echo $0: failed to get route, giving up @@ -28,8 +30,22 @@ main() { ;; esac - if timeout -s 9 5 ssh-keyscan -p 2220 -t rsa $gateway 2>/dev/null | grep -qFx "[$gateway]:2220 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCH+/h1dGEfKEusBblndU2e6QT4wLCm5+yqr/sqh/0X9YfjR7BfWWm8nNmuP55cYc+Wuf5ljB1H1acXEcsl1y8e0j3agHfF0V74FE1N1zz5nn2Ep8NHnmqgEhza38ZxMPh+4p3X7zklEKU7+3SzybKBi8sg0wLzlS2LM0JaUN80zR2sK11Kye3dURUXPk78u5wodOkgcEYRwSYaDMJlUzWP+poRXIDJwFaMQnwmxbl/c84yOyaU0x/d6hFwoRscWecihX+vvBNeSyxR4xr2HDOyUWwJkctyAgt2p7w3tfkXOKcCRzTAjGVIMQLTvo0sG/yJbcyHoEFdFybCsgDvfyYn"; then - # we are on a home network + athome=false + if [[ -s /dev/shm/dynamic-ip-update-state ]]; then + oldbytes=$(cat /dev/shm/dynamic-ip-update-state) + newbytes=$(awk '$1 == "'$ifdev':" {print $2 + $10}' /proc/net/dev) + if [[ $oldbytes == [1-9]* ]] && (( newbytes >= oldbytes )); then + athome=true + printf "%s\n" "$newbytes" >/dev/shm/dynamic-ip-update-state + fi + fi + if ! $athome && timeout -s 9 5 ssh-keyscan -p 2220 -t rsa $gateway 2>/dev/null | grep -qFx "[$gateway]:2220 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCH+/h1dGEfKEusBblndU2e6QT4wLCm5+yqr/sqh/0X9YfjR7BfWWm8nNmuP55cYc+Wuf5ljB1H1acXEcsl1y8e0j3agHfF0V74FE1N1zz5nn2Ep8NHnmqgEhza38ZxMPh+4p3X7zklEKU7+3SzybKBi8sg0wLzlS2LM0JaUN80zR2sK11Kye3dURUXPk78u5wodOkgcEYRwSYaDMJlUzWP+poRXIDJwFaMQnwmxbl/c84yOyaU0x/d6hFwoRscWecihX+vvBNeSyxR4xr2HDOyUWwJkctyAgt2p7w3tfkXOKcCRzTAjGVIMQLTvo0sG/yJbcyHoEFdFybCsgDvfyYn"; then + athome=true + awk '$1 == "'$ifdev':" {print $2 + $10}' /proc/net/dev > /dev/shm/dynamic-ip-update-state + fi + + + if $athome; then cur4="$(dig +short $dynhost @iankelling.org | tail -1)" if ip4=$(curl -s4 https://iankelling.org/cgi/pubip); then if [[ $cur4 && $ip4 && $cur4 != $ip4 ]]; then