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 相关文章推荐
Python3通过Luhn算法快速验证信用卡卡号的方法
May 14 Python
python开发之thread线程基础实例入门
Nov 11 Python
spyder常用快捷键(分享)
Jul 19 Python
python中装饰器级连的使用方法示例
Sep 29 Python
python 通过麦克风录音 生成wav文件的方法
Jan 09 Python
Python进程池Pool应用实例分析
Nov 27 Python
Python变量作用域LEGB用法解析
Feb 04 Python
设置jupyter中DataFrame的显示限制方式
Apr 12 Python
Django模板获取field的verbose_name实例
May 19 Python
Python如何爬取b站热门视频并导入Excel
Aug 10 Python
python判断变量是否为列表的方法
Sep 17 Python
python opencv实现图像配准与比较
Feb 09 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
PHP 数组教程 定义数组
2009/10/23 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
PHP实现操作redis的封装类完整实例
2015/11/14 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
laravel 解决paginate查询多个字段报错的问题
2019/10/22 PHP
js常用排序实现代码
2010/12/28 Javascript
基于jQuery架构javascript基础体系
2011/01/01 Javascript
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
jQuery的animate函数学习记录
2014/08/08 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
js实现分页功能
2017/05/24 Javascript
详解如何用webpack4从零开始构建react开发环境
2019/01/27 Javascript
如何自动化部署项目?折腾服务器之旅~
2019/04/16 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
python dict 字典 以及 赋值 引用的一些实例(详解)
2017/01/20 Python
MySQL适配器PyMySQL详解
2017/09/20 Python
python numpy和list查询其中某个数的个数及定位方法
2018/06/27 Python
解决python中使用plot画图,图不显示的问题
2018/07/04 Python
python获取引用对象的个数方式
2019/12/20 Python
HTML5 canvas画矩形时出现边框样式不一致的解决方法
2013/10/14 HTML / CSS
html2canvas截图空白问题的解决
2020/03/24 HTML / CSS
HTML5 HTMLCollection和NodeList的区别详解
2020/04/29 HTML / CSS
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
美国最大的在线寄售和旧货店:Swap.com
2018/08/27 全球购物
幼师自荐信
2013/10/26 职场文书
网络信息管理员岗位职责
2014/01/05 职场文书
优秀少先队辅导员先进事迹材料
2014/05/18 职场文书
禁毒宣传活动总结
2014/08/26 职场文书
普通党员自我剖析材料
2014/10/07 职场文书
英文感谢信范文
2015/01/21 职场文书
MySql开发之自动同步表结构
2021/05/28 MySQL