发 帖  
原厂入驻New
[资料]

怎么让树莓派自动上报IP地址到邮箱email

2014-6-30 21:42:51  22615
分享
怎么让树莓派自动上报IP地址到邮箱/Let Raspberry Pi to report its IP address via Email

由于我使用树莓派的场景大多数是在没有显示器、只用terminal连接它的情况下,所以,它的IP地址有时会在重启之后变掉(DHCP的),导致我无法通过terminal连接上它。然后我又要很麻烦地登录路由器的管理界面里,去看它被分配到的新IP是什么,然后用terminal重连,太麻烦了,不是么?作为一个树莓派玩家,这种麻烦简直是无法接受的!

为了解决这个问题,我让Pi开机的时候,自动向我指定的Email发送一封邮件,告诉我它此次开机时的IP地址。
步骤:开机时执行一个脚本,检测网络可用性→网络通畅后获取自己的IP地址→发送邮件到指定的邮箱。
下面一一道来。

1、开机启动项
开机执行一个脚本是怎么做到的?
在这篇文章的第2条里,详细陈述了如何让 /etc/rc.local 成为开机执行的文件,搞定之后,我只需要向此文件中添加一句话,即可开机执行一个脚本了:
  1. # send a mail to noti€€Fy the IP address of Pi
  2. /root/data/source/send-ip-mail.sh >> /root/data/source/send-ip-mail.log 2>&1
复制代码

2、上报IP地址的脚本实现
send-ip-mail.sh脚本的内容如下:
  1. #!/bin/bash

  2. # check network availability
  3. while true
  4. do
  5.     TIMEOUT=5
  6.     SITE_TO_CHECK="www.126.com"
  7.     RET_CODE=`curl -I -s --connect-timeout $TIMEOUT $SITE_TO_CHECK -w %{http_code} | tail -n1`
  8.     if [ "x$RET_CODE" = "x200" ]; then
  9.         echo "Network OK, will send mail..."
  10.         break
  11.     else
  12.         echo "Network not ready, wait..."
  13.         sleep 1s
  14.     fi
  15. done

  16. # get the IP address of eth0, e.g. "192.168.16.5"
  17. ETH0_IP_ADDR=`ifconfig eth0 | sed -n "2,2p" | awk '{print substr($2,1)}'`

  18. # send the Email
  19. echo "Current time: `date '+%F %T'`. Enjoy it" | mutt -s "IP Address of Raspberry Pi: $ETH0_IP_ADDR" xxx@gmail.com
复制代码


脚本很简单,分为3部分:第一部分检测网络可用性;第二部分取树莓派的eth0网卡的IP地址;第三部分发送邮件到指定的Email。
其中,第一部分是必须要有的,因为经过我试验,在本脚本执行时,树莓派的网络还没有初始化好,此时你直接发邮件是发不出去的。在这里我通过访问www.126.com来确定网络可用性。
第三部分需要你预先配置好mutt和mSMTp。

3、安装配置mutt和msmtp
配置好mutt和msmtp后,就可以像上面一样,通过一句代码将邮件发送出去。
首先要在Pi上安装mutt和msmtp:
pacman -S msmtp
pacman -S mutt
安装后,先配置msmtp。在你用户的根目录下创建文件 .msmtprc,内容如下:
  1. account default
  2. host smtp.126.com
  3. from xxx@126.com
  4. auth plain
  5. user xxx@126.com
  6. password your_password
  7. logfile /var/log/msmtp.log
复制代码

其中,smtp.126.com是我使用的邮箱的SMTP服务器地址,xxx@126.com是我用于发送邮件的邮箱,your_password是邮箱密码,你要根据你的情况修改。

然后配置mutt。在你用户的根目录下创建文件 .muttrc,内容如下:
  1. set sendmail="/usr/bin/msmtp"
  2. set use_from=yes
  3. set realname="AlARM"
  4. set editor="vim"
复制代码

其中,realname是发件人的名字,接收到的邮件中会显示出来。

4、这样子就全部搞定,以后每次Pi开机的时候,就会“自报家门”,我们再也不愁找不到Pi了。

1
· 2014-9-2 17:33:49
顶一个,不错
· 2014-9-15 09:13:34
很详细,支持支持。。。。。。。
· 2015-1-6 13:53:17
如果树莓派连接的路由器的话,eth0网卡的IP地址应该是内网的IP地址,意义就不大了
· 2015-4-12 11:15:51
4楼说的对,在局域网还可以用树莓派的名字代替IP地址,关键有用的是怎么把树莓派的广域网地址发送给你自己,然后用ssh登陆
· 2015-6-8 10:48:36
楼主你如果有域名,直接用dnspod绑一个二级域名上去就好了,dnspod上也有linux可以用的后台脚本,python,ruby各种版本的都有
广域网地址的获取,这些第三方脚本里面很多,就不一一说了,自己看吧
github.com/TimothyYe/DynDNS
GetPublicIPAddr方法里有

个人觉得绑域名方式更简单,流程跟你发邮件的流程差不多,都是定期获取IP,只是从发邮件改成自己自动刷新域名的IP地址,从使用的角度来说更简单更方便
· 2015-8-31 09:03:04
买个花生棒方便。。。。easy。。。。。。直接端口映射域名解析
· 2015-10-30 10:11:16
还没试 感觉好厉害

只有小组成员才能发言,加入小组>>

651个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表