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中__slots__用法实例
Jun 04 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
Nov 11 Python
Win10下Python环境搭建与配置教程
Nov 18 Python
Python连接SQLServer2000的方法详解
Apr 19 Python
python读取文本中数据并转化为DataFrame的实例
Apr 10 Python
python实现校园网自动登录的示例讲解
Apr 22 Python
Python拼接字符串的7种方法总结
Nov 01 Python
django将网络中的图片,保存成model中的ImageField的实例
Aug 07 Python
Python3直接爬取图片URL并保存示例
Dec 18 Python
使用Django清空数据库并重新生成
Apr 03 Python
Softmax函数原理及Python实现过程解析
May 22 Python
Python操作Excel的学习笔记
Feb 18 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判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
PHP实现的简单sha1加密功能示例
2017/08/27 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
php和asp语法上的区别总结
2019/05/12 PHP
jquery插件jbox使用iframe关闭问题
2009/02/09 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
2016/01/04 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
2018/11/08 Javascript
JavaScript闭包原理与用法学习笔记
2020/05/29 Javascript
如何在Vue.JS中使用图标组件
2020/08/04 Javascript
python爬虫的工作原理
2017/03/05 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
2017/10/20 Python
浅谈python装饰器探究与参数的领取
2017/12/01 Python
python放大图片和画方格实现算法
2018/03/30 Python
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
在matplotlib的图中设置中文标签的方法
2018/12/13 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
filter使用python3代码进行迭代元素的实例详解
2020/12/03 Python
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
凯伦·米莲女装网上商店:Karen Millen
2017/11/07 全球购物
英国手机零售商:Carphone Warehouse
2018/06/06 全球购物
static函数与普通函数有什么区别
2015/12/25 面试题
ddl,dml和dcl的含义
2016/05/08 面试题
在校生钳工实习自我鉴定
2013/09/19 职场文书
金融学专业大学生职业生涯规划
2014/03/07 职场文书
《小鹰学飞》教学反思
2014/04/23 职场文书
机械制造专业大学生自我鉴定
2014/09/19 职场文书
高中社区服务活动报告
2015/02/05 职场文书
2015年学校禁毒工作总结
2015/05/27 职场文书
女方家长婚礼致辞
2015/07/27 职场文书
2016年秋季开学典礼新闻稿
2015/11/25 职场文书
正确的理解和使用Django信号(Signals)
2021/04/14 Python
mybatis中sql语句CDATA标签的用法说明
2021/06/30 Java/Android
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android