python实现自动获取IP并发送到邮箱


Posted in Python onDecember 26, 2018

树莓派没有显示器,而不想设置固定IP,因为要随身携带外出,每个网络环境可能网段不一样。因此想用python写个脚本,让树莓派开机后自动获取本机ip,并且自动发送到我指定邮箱。(完整源码)

1.获取所有连接的网络接口,比如有线、wifi等接口

def get_ip_address():

  #先获取所有网络接口
  SIOCGIFCONF = 0x8912
  SIOCGIFADDR = 0x8915
  BYTES = 4096     
  sck = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  names = array.array('B',b'\0' * BYTES)
  bytelen = struct.unpack('iL', fcntl.ioctl(sck.fileno(), SIOCGIFCONF, struct.pack('iL', BYTES, names.buffer_info()[0])))[0]
  namestr = names.tostring()
  ifaces = [namestr[i:i+32].split('\0', 1)[0] for i in range(0, bytelen, 32)]

  #再获取每个接口的IP地址
  iplist = []
  for ifname in ifaces:
    ip = socket.inet_ntoa(fcntl.ioctl(sck.fileno(),SIOCGIFADDR,struct.pack('256s',ifname[:15]))[20:24])
    iplist.append(ifname+':'+ip)
  return iplist

2.把IP地址发送到指定邮箱

def ip_send_mail(iptxt):

  #设置收件邮箱
  toaddrs = 'to@mail.com'
  #设置发送邮箱
  fromaddr = 'send@mail.com'

  #设置发送邮箱的账号密码
  username = 'your_sendmail@mail.com' 
  password = 'your_pass'

  #设置SMTP服务器、端口,根据你的邮箱设置,
  server = smtplib.SMTP('smtp.mail.com:25')
  #设置邮件正文,get_ip_address()返回的是list,要转换成str
  ip = '\r\n'.join(iptxt)

  #设置邮件标题和正文
  msg = MIMEText(ip,'plain', 'utf-8')
  msg['Subject'] = 'IP For RaspberryPi'
  msg['From'] = fromaddr
  msg['To'] = toaddrs

  #启动SMTP发送邮件
  server.ehlo()
  server.starttls()
  server.login(username,password)
  server.sendmail(fromaddr, toaddrs, msg.as_string())
  server.quit()

3.最后调用以上函数运行即可

if __name__ == '__main__':

  #获取IP
  iptxt = get_ip_address()
  #将IP存入文件,如果直接发送邮件,这步可以省略。
  ip_save_file(iptxt)  
  #将IP地址发送到指定邮箱
  ip_send_mail(iptxt)

4.设置开机运行

把以上代码都放入一个文件,把文件放到树莓派卡里面,如: /home/pi/get_ip_address.py

给python脚本可执行权限

sudo chmod +x get_ip_address.py

设置系统启动时运行

sudo vi /etc/profile

编辑profile文件,在profile最后面,fi之前添加如下:

python /home/pi/get_ip_address.py

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现遍历数据库并获取key的值
May 17 Python
Python中str is not callable问题详解及解决办法
Feb 10 Python
Python学习笔记之解析json的方法分析
Apr 21 Python
python实现报表自动化详解
Nov 16 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
Apr 10 Python
python爬虫之模拟登陆csdn的实例代码
May 18 Python
使用python存储网页上的图片实例
May 22 Python
python的sorted用法详解
Jun 25 Python
python中树与树的表示知识点总结
Sep 14 Python
Matplotlib中%matplotlib inline如何使用
Jul 28 Python
基于python调用jenkins-cli实现快速发布
Aug 14 Python
Django rest framework分页接口实现原理解析
Aug 21 Python
python 实现分页显示从es中获取的数据方法
Dec 26 #Python
python 获取页面表格数据存放到csv中的方法
Dec 26 #Python
python 产生token及token验证的方法
Dec 26 #Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 #Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
Dec 26 #Python
python处理multipart/form-data的请求方法
Dec 26 #Python
Python实现的简单线性回归算法实例分析
Dec 26 #Python
You might like
使用PHPMyAdmin修复论坛数据库的图文方法
2012/01/09 PHP
php empty()与isset()区别的详细介绍
2013/06/17 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
php实现俄罗斯乘法实例
2015/03/07 PHP
Laravel框架Blade模板简介及模板继承用法分析
2019/12/03 PHP
基于jquery的分页控件(C#)
2011/01/06 Javascript
Jquery 绑定时间实现代码
2011/05/03 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
Angular Js文件上传之form-data
2015/08/28 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
JavaScript类型系统之正则表达式
2016/01/05 Javascript
总结几道关于Node.js的面试问题
2017/01/11 Javascript
jquery代码规范让代码越来越好看
2017/02/03 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
JS实现小球的弹性碰撞效果
2017/11/11 Javascript
微信小程序实现搜索历史功能
2020/03/26 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
Python实现身份证号码解析
2015/09/01 Python
Python读取MRI并显示为灰度图像实例代码
2018/01/03 Python
使用Python制作自动推送微信消息提醒的备忘录功能
2018/09/06 Python
python创建文件备份的脚本
2018/09/11 Python
Python面向对象之继承原理与用法案例分析
2019/12/31 Python
HTML5的新特性(1)
2016/03/03 HTML / CSS
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
机械绘图员岗位职责
2013/11/19 职场文书
采购主管工作职责
2013/12/12 职场文书
查环查孕证明
2014/01/10 职场文书
幼儿园大班教学反思
2014/02/10 职场文书
推荐信模板
2014/05/09 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
个人违纪检讨书
2014/09/15 职场文书
2015年度高中教师工作总结
2015/05/26 职场文书
培训感想范文
2015/08/07 职场文书
追悼会答谢词范文
2015/09/29 职场文书
2019个人半年工作总结
2019/06/21 职场文书