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类定义的讲解
Nov 01 Python
Python中 Lambda表达式全面解析
Nov 28 Python
python简单线程和协程学习心得(分享)
Jun 14 Python
python读取一个目录下所有txt里面的内容方法
Jun 23 Python
一篇文章弄懂Python中所有数组数据类型
Jun 23 Python
python脚本执行CMD命令并返回结果的例子
Aug 14 Python
python 实现矩阵按对角线打印
Nov 29 Python
opencv-python 提取sift特征并匹配的实例
Dec 09 Python
Python是什么 Python的用处
May 26 Python
python绘制分布折线图的示例
Sep 24 Python
python openssl模块安装及用法
Dec 06 Python
教你如何使用Python下载B站视频的详细教程
Apr 29 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
php5.2.0内存管理改进
2007/01/22 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
syntaxhighlighter 使用方法
2007/07/02 Javascript
javascript中length属性的探索
2011/07/31 Javascript
jQuery EasyUI API 中文文档 - EasyLoader 加载器
2011/09/29 Javascript
JavaScript 图像动画的小demo
2012/05/23 Javascript
jquery实现的美女拼图游戏实例
2015/05/04 Javascript
vue bootstrap小例子一枚
2017/06/09 Javascript
js装饰设计模式学习心得
2018/02/17 Javascript
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
2018/11/15 Javascript
微信小程序实现的picker多级联动功能示例
2019/05/23 Javascript
ant-design-vue 实现表格内部字段验证功能
2019/12/16 Javascript
Openlayers绘制地图标注
2020/09/28 Javascript
微信小游戏中three.js离屏画布的示例代码
2020/10/12 Javascript
vue实现拖拽进度条
2021/03/01 Vue.js
pymssql ntext字段调用问题解决方法
2008/12/17 Python
Python编程中对文件和存储器的读写示例
2016/01/25 Python
python代码过长的换行方法
2018/07/19 Python
python常用库之NumPy和sklearn入门
2019/07/11 Python
pandas 对group进行聚合的例子
2019/12/27 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
2020/04/14 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
PyQt5的相对布局管理的实现
2020/08/07 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
拉斯维加斯酒店、演出、旅游、俱乐部及更多:Vegas.com
2019/02/28 全球购物
会计学应届毕业生推荐信
2013/11/04 职场文书
注塑工厂厂长岗位职责
2013/12/02 职场文书
大学生个人事迹材料
2014/01/21 职场文书
妇产医师自荐信
2014/01/29 职场文书
企业法人授权委托书
2014/04/03 职场文书
会计专业自荐书
2014/07/08 职场文书
护士求职简历自我评价
2015/03/10 职场文书
教师培训简讯
2015/07/20 职场文书
Go语言中的UTF-8实现
2021/04/26 Golang
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
2022/02/12 Servers