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使用range函数计算一组数和的方法
May 07 Python
分享一下Python 开发者节省时间的10个方法
Oct 02 Python
python如何定义带参数的装饰器
Mar 20 Python
python实现泊松图像融合
Jul 26 Python
python设计微型小说网站(基于Django+Bootstrap框架)
Jul 08 Python
Django 接收Post请求数据,并保存到数据库的实现方法
Jul 12 Python
Python编写通讯录通过数据库存储实现模糊查询功能
Jul 18 Python
Pytorch之contiguous的用法
Dec 31 Python
python中matplotlib实现随鼠标滑动自动标注代码
Apr 23 Python
使用Keras实现简单线性回归模型操作
Jun 12 Python
python实现测试工具(二)——简单的ui测试工具
Oct 19 Python
python获取字符串中的email
Mar 31 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
长波知识介绍
2021/03/01 无线电
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
php switch语句多个值匹配同一代码块的实现
2014/03/03 PHP
PHP Streams(流)详细介绍及使用
2015/05/12 PHP
iOS10推送通知开发教程
2016/09/19 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
javascript 操作文件 实现方法小结
2009/07/02 Javascript
Javascript简单改变表单元素背景的方法
2015/07/15 Javascript
Jquery Mobile 自定义按钮图标
2015/11/18 Javascript
详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
2018/08/02 Javascript
Vue动画事件详解及过渡动画实例
2019/02/09 Javascript
如何实现echarts markline标签名显示自己想要的
2020/07/20 Javascript
Vue2.0 $set()的正确使用详解
2020/07/28 Javascript
vue实现表格合并功能
2020/12/01 Vue.js
Vue基本指令实例图文讲解
2021/02/25 Vue.js
[03:08]TI9战队档案 - Vici Gaming
2019/08/20 DOTA
python根据时间生成mongodb的ObjectId的方法
2015/03/13 Python
python处理xml文件的方法小结
2017/05/02 Python
python验证码识别教程之利用投影法、连通域法分割图片
2018/06/04 Python
python 接收处理外带的参数方法
2018/12/03 Python
对python:threading.Thread类的使用方法详解
2019/01/31 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
python 轮询执行某函数的2种方式
2020/05/03 Python
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
巴西最大的珠宝连锁店:Vivara
2019/04/18 全球购物
Antler英国官网:购买安特丽行李箱、拉杆箱
2019/08/25 全球购物
护理自我鉴定范文
2013/10/06 职场文书
西式结婚主持词
2014/03/14 职场文书
人力资源求职信
2014/05/25 职场文书
我是一名护士演讲稿
2014/08/28 职场文书
交警作风整顿剖析材料
2014/10/11 职场文书
水电工岗位职责
2015/02/14 职场文书
民事申诉状范本
2015/05/20 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python
利用Python实现Picgo图床工具
2021/11/23 Python
Redis基本数据类型哈希Hash常用操作命令
2022/06/01 Redis