![如何通过 DNSExit 邮寄给我更新的 IP 地址?](https://linux22.com/image/818736/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20DNSExit%20%E9%82%AE%E5%AF%84%E7%BB%99%E6%88%91%E6%9B%B4%E6%96%B0%E7%9A%84%20IP%20%E5%9C%B0%E5%9D%80%EF%BC%9F.png)
我在 Ubuntu 服务器(Natty 11.04)上使用 DNSExit,并安装了ipUpdate rpm 文件并对 chkconfig 执行了 apt-get install 以启用 ipUpdate。
我希望每当 IP 地址发生变化时都能收到一封电子邮件,这样我就可以使用 PuTTY 通过 SSH 进入该框(因为除非我知道当前的 IP 地址,否则我无法做到这一点)。
当前 IP 地址存储在中/tmp/dnsexit-ip.txt
,我希望每当该文件发生更改时,将该文件的内容和/var/log/dnsexit.log
(包含 IP 更改的历史记录)的内容邮寄到我的电子邮件地址。
我该如何完成这项任务?我认为 cronjob 可以解决这个问题,但我不确定如何做到这一点。
答案1
先决条件
安装发电子邮件。它是一款轻量级的命令行 SMTP 电子邮件客户端。我们将使用它通过脚本使用 Gmail 帐户发送电子邮件。
sudo apt-get install sendemail libio-socket-ssl-perl libnet-ssleay-perl
创建脚本
创建名为“ip-通知工具“在某处,例如在”脚本“目录在您的主文件夹中;使其可执行,然后打开它进行编辑。
mkdir -p ~/Scripts && touch ~/Scripts/ip-notify.sh && chmod a+x ~/Scripts/ip-notify.sh && gedit ~/Scripts/ip-notify.sh
在文件中插入以下文本:
#!/bin/bash
# Modify the following values!
SENDERNAME="Computer" # This is the name that will show in the 'From' field. Purely esthetic.
RECIPIENTNAME="Your Name" # This is the name that will show in the 'To' field. Also purely esthetic.
GMAILADDRESS="[email protected]" # This is your Gmail address.
GMAILUSER="someemail" # This is your Gmail username, without the '@gmail.com' part.
GMAILPASS="password" # This is your Gmail password.
# You can stop modifying here
DIR=/tmp/
CURIP=dnsexit-ip.txt
IPLOG=/var/log/dnsexit.log
SMTPSERVER="smtp.gmail.com:587"
if [[ $(find $DIR -mmin -2 -name $CURIP) ]];
then
echo "$CURIP has been modified in the last two minutes."
# Send an email
sendemail -u "IP Address" -m "IP address has changed!" -f "$SENDERNAME <$GMAILADDRESS>" -t "$RECIPIENTNAME <$GMAILADDRESS>" -s $SMTPSERVER -xu $GMAILUSER -xp $GMAILPASS -a $DIR$CURIP $IPLOG
fi
完成后,保存并关闭文件。
定期运行脚本
我们将每两分钟运行一次此脚本。打开您的 crontab。
crontab -e
将以下行添加到文件底部:
*/2 * * * * bash ~/Scripts/ip-notify.sh
你完成了!
如果一切顺利,当您的机器的 IP 地址发生变化时,您应该会收到电子邮件更新。
答案2
如果您安装了邮件(我使用 postfix ...即 sudo apt-get install postfix)您可以每 5 分钟在 cron 中运行一个 bash 脚本。
该脚本使用“stat”来检查文件在过去五分钟(300 秒)内是否发生了变化,如果是,则 $diff 变量将等于 1。
像这样的事情应该有效:
#!/bin/bash
filemtime=`stat -c %Y /tmp/dnsexit-ip.txt`
currtime=`date +%s`
diff=$(( (currtime - filemtime) / 300 ))
x=1
if [ $diff -eq $x ]
then
SUBJECT="DCHP CHANGE"
EMAIL="[email protected]"
EMAILMESSAGE="/tmp/emailmessage.txt"
echo "Contents of dnsexit-ip.txt" >$EMAILMESSAGE
cat /tmp/dnsexit-ip.txt >> $EMAILMESSAGE
echo "Contents of dnsexit.log" >>$EMAILMESSAGE
cat /var/log/dnsexit.log >> $EMAILMESSAGE
sudo /usr/bin/mail -s "$SUBJECT" "$EMAIL" < $EMAILMESSAGE
fi