我正在设置一个没有静态全局 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
希望有帮助!