Серверный скрипт, который отправляет электронное письмо каждый раз, когда меняется глобальный ip

Я настраиваю веб-сервер, который не будет иметь статический глобальный IP-адрес. Он будет в доме моих родителей, и я не смогу подключиться к нему по SSH, когда изменится глобальная ИС. Глобальный IP-адрес будет меняться при каждом перезапуске маршрутизатора, что происходит один раз в месяц.

Мне нужен скрипт, который отправляет мне электронное письмо каждый раз, когда меняется глобальный IP-адрес. Так что я могу обновить DNS, чтобы мой сайт снова работал.

Я ничего не знаю о скриптах в Ubuntu, но я знаю основы Java и PHP.

Компьютер: сервер Ubuntu 13.10, iMac G4 Globe.

6 ответов

Рассматривали ли вы использовать динамический сценарий / инструмент обновления DNS?

например, ddclient доступен в виде пакета Debian/Ubuntu.

Он может обновить вашу DNS-зону ИЛИ обновить вашу динамическую DNS-запись (чтобы вы могли войти в ssh) и выполнить собственный скрипт для отправки вам электронной почты.

Основываясь на коде из этого ответа, я изменил и добавил еще несколько опций для отладки.

Я должен был настроить почтовый сервер и пользователя crontab -e чтобы получить это, напишите мне мой текущий IP-адрес. Вам также нужно сделать исполняемый файл скрипта и убедиться, что ваш пользователь прочитал и записал в папку, в которую вы помещаете скрипты.

#!/bin/bash
NOWIPADDR="/home/scripts/nowipaddr"
GETIPADDR="dig +short myip.opendns.com @resolver1.opendns.com"
LOG="/home/scripts/ip.log"
timestamp=$( date +%T )
curDate=$( date +"%m-%d-%y" )

if [ -f $NOWIPADDR ]; then
  if [[ `$GETIPADDR` = $(< $NOWIPADDR) ]]; then
    echo $curDate $timestamp " IP address check: " $(< $NOWIPADDR) >> $LOG
  else
    $GETIPADDR > $NOWIPADDR
    mail -s "Server IP" email@gmail.com < $NOWIPADDR
fi
else
  curl $GETIPADDR > $NOWIPADDR
  mail -s "Server IP" email@gmail.com < $NOWIPADDR
fi

Вы можете написать простой скрипт для запуска из cron и ежедневно в определенное время.

Возьмите существующий ip в файл и затем запустите ваш цикл if, чтобы проверить новый ip с существующим ip, и если оба ip остаются одинаковыми, он может пропустить отправку почты. иначе, если есть изменение в IP, это должно послать почту с новым ip.

Вы можете запускать скрипт ежечасно, ежедневно, еженедельно.

NOWIPADDR="nowipaddr"
GETIPADDR="ifconfig.me"


    if [ -f $NOWIPADDR ]
    then
       if [ `cat $NOWIPADDR` = `curl $GETIPADDR` ]
       then
           echo "no change in IP."
       else
           $GETIPADDR > $NOWIPADDR
           mail -s "IP is $GETIPADDR" yourmailadd@gmail.com
        fi
    else
        curl $GETIPADDR >> $NOWIPADDR
    fi

Я использую это для проверки моего IP-адреса один раз в день.

wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//' > ~/myip

Если у вас есть Linux-компьютер со статическим IP-адресом, я бы сказал, что просто скопируйте файл ~/myip там.

Если это не так, вы всегда можете использовать удобный инструмент командной строки под названием sendEmail (не путать с sendmail). Этот инструмент позволяет очень легко отправить электронное письмо с помощью однострочной команды. http://caspian.dotconf.net/menu/Software/SendEmail/

Вы могли бы написать что-то вроде этого:

myip=`wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'`<br>
sendEmail -f you@yourmail.com -m $myip 

Немного старый поток, но он занимает довольно высокое место в списке, когда вы ищете в Google, как отслеживать внешние изменения IP.

В качестве альтернативы, которая может вам помочь, я написал скрипт на python, предназначенный для отслеживания изменений внешних IP-адресов. В настоящее время он сохраняет "текущий" внешний IP-адрес в файл и при запуске захватывает новый IP-адрес, а затем сравнивает его со старым. Это дизайн, чтобы отправить вам электронное письмо в случае обнаружения изменений.

Он предназначен для запуска в качестве cronjob и не работает как фоновый демон самостоятельно.

Вот ссылка на репозиторий github: https://github.com/begleysm/ipwatch

Надеюсь, это поможет!

Это то, что я использовал, настроил свой сервер для отправки электронных писем с обновленным (и прежним) IP-адресом, используя мою учетную запись gmail, установив постфикс по этой ссылке. Запуск Ubuntu 22.04 ARM.

Сначала запустите эту команду, чтобы сохранить текущий IP-адрес в файл.

      wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//' > ~/myip

Следующее теперь будет сохранено в файл *.sh, который вы можете вызывать cron так часто, как это необходимо.

      # retrieve last saved IP address
NOWIPADDR=$( cat ~/myip )
# check current IP and save in temp
wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//' > ~/myiptemp
GETIPADDR=$( cat ~/myiptemp )

# check if there have been changes

if [ $NOWIPADDR == $GETIPADDR ]
then
    # if there were no changes do nothing
    echo "No change in IP."
else
    # if there were changes, save new IP and send out email informing of such

    OLDIP=$NOWIPADDR
    wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//' > ~/myip
    NOWIPADDR=$( cat ~/myip )
    echo "IP has changed."
    echo "Your IP has changed from $OLDIP to $NOWIPADDR" | mail -s "IP has Changed on Server" youremail@gmail.com
fi

# lastly, delete the temp ipfile
rm ~/myiptemp
Другие вопросы по тегам