每次全局 IP 发生变化时发送电子邮件的服务器脚本

每次全局 IP 发生变化时发送电子邮件的服务器脚本

我正在设置一个没有静态全局 IP 的 Web 服务器。它将位于我父母家中,当全局 IP 发生变化时,我将无法通过 SSH 进入它。每次路由器重新启动时,全局 IP 都会发生变化,这种情况大约每月发生一次。

我需要一个脚本,每次全局 IP 发生变化时都会给我发送电子邮件。这样我就可以更新 DNS,让我的网站再次正常运行。

我对 Ubuntu 中的脚本一无所知,但我知道 Java 和 PHP 的基础知识。

计算机:Ubuntu 13.10 服务器、iMac G4 Globe。

答案1

您是否考虑过使用动态 DNS 更新脚本/工具?

例如dd客户端可作为 Debian/Ubuntu 软件包使用。

它可以更新你的 DNS 区域或者更新您的动态 DNS 记录(以便您可以通过 ssh 进入)并执行自定义脚本向您发送电子邮件。

答案2

根据以下代码这个答案我修改并添加了一些用于调试的选项。

我必须设置电子邮件服务器,并使用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 protected] < $NOWIPADDR
  fi
else
  $GETIPADDR > $NOWIPADDR
  mail -s "Server IP" [email protected] < $NOWIPADDR
fi

答案3

您可以编写一个简单的脚本,从 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
           curl $GETIPADDR > $NOWIPADDR
           mail -s "IP is $GETIPADDR" [email protected]
        fi
    else
        curl $GETIPADDR >> $NOWIPADDR
    fi

答案4

这是一个有点老旧的线程,但是当您使用 Google 搜索如何监控外部 IP 变化时,它会在列表中排名相当靠前。

作为可能对您有帮助的替代选项,我编写了一个用于监控外部 IP 地址变化的 Python 脚本。它当前将“当前”外部 IP 地址保存到文件中,并在运行时获取新 IP 地址,然后将其与旧 IP 地址进行核对。如果检测到更改,它会向您发送电子邮件。

它被设计为作为 cronjob 运行,而不是作为后台守护进程单独运行。

这是 github 存储库的链接:https://github.com/begleysm/ipwatch

希望有帮助!

相关内容