树莓派论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3200|回复: 2
收起左侧

[中级教程] 让树莓派开机后发送邮件告诉你 IP地址

[复制链接]
发表于 2014-7-12 21:55:14 | 显示全部楼层 |阅读模式
对于ssh 党,什么最重要?当然是小 pi 的IP 地址咯,那么前面我们说到 /etc/rc.local 文件是用来配置启动后执行的,我们可以在里面添加一些自定义的内容。
那么我们可以写一个脚本,获取本机IP然后将此地址发送到指定的邮箱中,这样我们除了能够获取IP 地址之外,还可以知道什么时候系统重启过(有可能是上面的看门狗发现系统状况不对后重启的系统!)。有了此步骤,即使我设置了dhcp 动态分配IP 也不怕找不到树莓派IP 了!!(当然,大神可以使用nmap 查找当前网段的IP,那么不在一个网段呢?如果树莓派在家里呢?)
我们可以先写一个python 脚本叫做 sendip.py:
#/bin/env python
# -*-coding:utf8-*-
import socket
import fcntl
import time
import struct
import smtplib
import urllib
import datetime
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage


#发送邮件的基本函数,参数依次如下
# smtp服务器地址、邮箱用户名,邮箱秘密,发件人地址,收件人地址(列表的方式),邮件主题,邮件html内容
def sendEmail(smtpserver, username, password, sender, receiver, subject, msghtml):
    msgRoot = MIMEMultipart('related')
    msgRoot["To"] = ','.join(receiver)
    msgRoot["From"] = sender
    msgRoot['Subject'] =  subject
    msgText = MIMEText(msghtml,'html','utf-8')
    msgRoot.attach(msgText)
    #sendEmail
    smtp = smtplib.SMTP()
    smtp.connect(smtpserver)
    smtp.login(username, password)
    smtp.sendmail(sender, receiver, msgRoot.as_string())
    smtp.quit()


# 检查网络连同性
def check_network():
    # 试验5次ping 百度,如果连通就返回True,否则返回False
    for i in range(0, 5):
        try:
            result=urllib.urlopen('http://baidu.com').read()
            #print result
            print "Network is Ready!"
            break
        except Exception , e:
            print e
            print "Network is not ready,Sleep 5s...."
            time.sleep(5)
    else:
        print "Sorry that pi isn't connectted to Internet now"
        return False
    return True


# 获得本级制定接口的ip地址
def get_ip_address():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(("1.1.1.1",80))
    ipaddr=s.getsockname()[0]
    s.close()
    return ipaddr


if __name__ == '__main__':
    if check_network():
        ipaddr = get_ip_address()
        now = datetime.datetime.now()
        time_info = now.strftime('%Y-%m-%d %A %H:%M:%S')
        send_text = "Boot time: %s\nIP addr: %s" % (time_info, ipaddr)
        sendEmail('smtp.163.com','网易邮箱账号','网易邮箱密码','邮箱邮箱地址',['收件人地址'], 'Raspberry Pi boot status', send_text)
    else:
        print "Sorry that I can't help without network"


将上面的脚本倒数第三行中相应信息修改了即可!注意,收件人是列表形式,可以添加多个邮箱。建议创建一个新的邮箱,专门用作发送树莓派发送邮件之用。
那么最后我们将运行它的命令 “ /usr/bin/python /home/pi/sendip.py ” 添加到文件“ /etc/rc.local ”中(exit 语句之前!)让它开机自运行即可!


回复

使用道具 举报

 楼主| 发表于 2014-7-12 21:56:39 | 显示全部楼层
沙发自己占,更多ssh 党配置参见《树莓派玩耍笔记4 -- 树莓派ssh党必备的配置
回复 支持 反对

使用道具 举报

发表于 2014-7-16 17:55:36 | 显示全部楼层
赞一个
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|树莓派论坛 ( 粤ICP备15075382号-1  

GMT+8, 2024-11-8 07:47 , Processed in 1.093750 second(s), 27 queries , Gzip On.

Powered by Shumeipai.net! X3.2

© 2001-2015 树莓派论坛安全联盟

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