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读写Redis数据库操作示例
Mar 18 Python
Python Web框架Flask中使用七牛云存储实例
Feb 08 Python
Python中计算三角函数之cos()方法的使用简介
May 15 Python
Python爬虫实现全国失信被执行人名单查询功能示例
May 03 Python
python 把列表转化为字符串的方法
Oct 23 Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 Python
详解如何用TensorFlow训练和识别/分类自定义图片
Aug 05 Python
python是否适合网页编程详解
Oct 04 Python
python新手学习使用库
Jun 11 Python
Python selenium如何打包静态网页并下载
Aug 12 Python
python实现三阶魔方还原的示例代码
Apr 28 Python
python基础之模块的导入
Oct 24 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
一个域名查询的程序
2006/10/09 PHP
用header 发送cookie的php代码
2007/03/16 PHP
实用函数7
2007/11/08 PHP
php数字每三位加逗号的功能函数
2015/10/22 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
Javascript 去除数组的重复元素
2010/05/04 Javascript
jqgrid 编辑添加功能详细解析
2013/11/08 Javascript
JavaScript打印网页指定区域的例子
2014/05/03 Javascript
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
jQuery页面弹出框实现文件上传
2017/02/09 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
Python实现的最近最少使用算法
2015/07/10 Python
Python实现将HTML转成PDF的方法分析
2019/05/04 Python
Python 给定的经纬度标注在地图上的实现方法
2019/07/05 Python
使用Python和Scribus创建一个RGB立方体的方法
2019/07/17 Python
Pytorch之contiguous的用法
2019/12/31 Python
推荐10个HTML5响应式框架
2016/02/25 HTML / CSS
接口中的方法可以是abstract的吗
2015/07/23 面试题
工作表现自我评价
2014/02/08 职场文书
《藤野先生》教学反思
2014/02/19 职场文书
旅游节目策划方案
2014/05/26 职场文书
财务会计专业求职信
2014/06/09 职场文书
经典团队口号大全
2014/06/21 职场文书
入党转正申请书范文
2019/05/20 职场文书
MySQL数字类型自增的坑
2021/05/07 MySQL
Python还能这么玩之用Python修改了班花的开机密码
2021/06/04 Python
HTML中的表格元素介绍
2022/02/28 HTML / CSS
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android