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中的私有属性
Aug 21 Python
Python for Informatics 第11章之正则表达式(二)
Apr 21 Python
详解Python中的相对导入和绝对导入
Jan 06 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
Oct 25 Python
从头学Python之编写可执行的.py文件
Nov 28 Python
使用python为mysql实现restful接口
Jan 05 Python
Python with语句上下文管理器两种实现方法分析
Feb 09 Python
pycharm debug功能实现跳到循环末尾的方法
Nov 29 Python
Python Threading 线程/互斥锁/死锁/GIL锁
Jul 21 Python
python如何变换环境
Jul 21 Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
Nov 24 Python
聊聊python在linux下与windows下导入模块的区别说明
Mar 03 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
Windows中安装Apache2和PHP4权威指南
2006/11/18 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
php 参数过滤、数据过滤详解
2015/10/26 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
java script编程起步(第三课)
2007/01/10 Javascript
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
JQuery 将元素显示在屏幕的中央的代码
2010/02/27 Javascript
使用Firebug对js进行断点调试的图文方法
2011/04/02 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
js获取某月的最后一天日期的简单实例
2013/06/22 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
2015/11/21 Javascript
很不错的两款Bootstrap Icon图标选择组件
2016/01/28 Javascript
第九篇Bootstrap导航菜单创建步骤详解
2016/06/21 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
2017/07/08 jQuery
使用D3.js制作图表详解
2017/08/13 Javascript
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
利用百度地图API获取当前位置信息的实例
2017/11/06 Javascript
vue实现微信浏览器左上角返回按钮拦截功能
2020/01/18 Javascript
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
Python Process多进程实现过程
2019/10/22 Python
python 实现仿微信聊天时间格式化显示的代码
2020/04/17 Python
东南亚地区最大的购物网站Lazada新加坡站点:Lazada.sg
2016/07/17 全球购物
回馈慈善的设计师太阳镜:DIFF eyewear
2019/10/17 全球购物
小孩百日宴答谢词
2014/01/15 职场文书
捐书寄语赠言
2014/01/18 职场文书
建设工地安全标语
2014/06/07 职场文书
初中班级口号
2014/06/09 职场文书
委托书的样本
2015/01/28 职场文书
中班下学期个人总结
2015/02/12 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
中国古代史学名著《战国策》概述
2019/08/09 职场文书
详解Html5项目适配系统深色模式方案总结
2021/04/14 HTML / CSS
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python
nginx配置虚拟主机的详细步骤
2021/07/21 Servers