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自动格式化json文件的方法
Mar 11 Python
JSONLINT:python的json数据验证库实例解析
Nov 28 Python
Python3结合Dlib实现人脸识别和剪切
Jan 24 Python
在scrapy中使用phantomJS实现异步爬取的方法
Dec 17 Python
浅谈python中get pass用法
Mar 19 Python
Python 给定的经纬度标注在地图上的实现方法
Jul 05 Python
Django发送邮件功能实例详解
Sep 02 Python
python查看数据类型的方法
Oct 12 Python
Python for循环通过序列索引迭代过程解析
Feb 07 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
Jun 02 Python
Python xmltodict模块安装及代码实例
Oct 05 Python
Python爬虫新手入门之初学lxml库
Dec 20 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
利用static实现表格的颜色隔行显示
2006/10/09 PHP
php array_filter除去数组中的空字符元素
2020/06/21 PHP
smarty巧妙处理iframe中内容页的代码
2012/03/07 PHP
php中的常用魔术方法总结
2013/08/02 PHP
thinkphp中ajax与php响应过程详解
2014/12/08 PHP
php银联网页支付实现方法
2015/03/04 PHP
试用php中oci8扩展
2015/06/18 PHP
nginx下安装php7+php5
2016/07/31 PHP
php中foreach结合curl实现多线程的方法分析
2016/09/22 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
javascript中的location用法简单介绍
2007/03/07 Javascript
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
2011/03/28 Javascript
js中点击空白区域时文本框与隐藏层的显示与影藏问题
2013/08/26 Javascript
初识SmartJS - AOP三剑客
2014/06/08 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
2015/12/03 Javascript
JavaScript中的原始值和复杂值
2016/01/07 Javascript
老司机带你解读jQuery插件开发流程
2016/05/16 Javascript
浅谈js和css内联外联注意事项
2016/06/30 Javascript
用jQuery实现可输入多选下拉组合框实例代码
2017/01/18 Javascript
Angular实现双向折叠列表组件的示例代码
2017/11/21 Javascript
解决微信小程序云开发中获取数据库的内容为空的方法
2019/05/15 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
8 个有用的JS技巧(推荐)
2019/07/03 Javascript
vuex页面刷新导致数据丢失的解决方案
2020/12/10 Vue.js
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
2014/06/25 Python
解决python 无法加载downsample模型的问题
2018/10/25 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
python字典按照value排序方法
2020/12/28 Python
详解HTML5 录音的踩坑之旅
2017/12/26 HTML / CSS
数控技术学生的自我评价
2014/02/15 职场文书
初中生散播谣言检讨书
2014/11/17 职场文书
户外拓展训练感想
2015/08/07 职场文书
Python获取百度热搜的完整代码
2021/04/07 Python
Mysql效率优化定位较低sql的两种方式
2021/05/26 MySQL
python中的装饰器该如何使用
2021/06/18 Python
关于springboot配置druid数据源不生效问题(踩坑记)
2021/09/25 Java/Android