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实现文本文件合并
Dec 29 Python
Python模块WSGI使用详解
Feb 02 Python
python pandas 组内排序、单组排序、标号的实例
Apr 12 Python
Python嵌套式数据结构实例浅析
Mar 05 Python
python自动化之Ansible的安装教程
Jun 13 Python
python批量爬取下载抖音视频
Jun 17 Python
Django admin model 汉化显示文字的实现方法
Aug 12 Python
python实现数字炸弹游戏程序
Jul 17 Python
Django如何实现防止XSS攻击
Oct 13 Python
python 逆向爬虫正确调用 JAR 加密逻辑
Jan 12 Python
python pygame 愤怒的小鸟游戏示例代码
Feb 25 Python
django 认证类配置实现
Nov 11 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漏洞全解(详细介绍)
2012/11/13 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
Sample script that displays all of the users in a given SQL Server DB
2007/06/16 Javascript
JQuery 入门实例1
2009/06/25 Javascript
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
2009/10/20 Javascript
javascript iframe编程相关代码
2009/12/28 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
JS在IE下缺少标识符的错误
2014/07/23 Javascript
JS中from 表单序列化提交的代码
2017/01/20 Javascript
jQuery动态生成不规则表格(前后端)
2017/02/21 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
Vue侧滑菜单组件——DrawerLayout
2017/12/18 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
es6函数之严格模式用法实例分析
2020/03/17 Javascript
Python控制多进程与多线程并发数总结
2016/10/26 Python
老生常谈Python序列化和反序列化
2017/06/28 Python
基于Python __dict__与dir()的区别详解
2017/10/30 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
2018/04/19 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
2018/06/04 Python
使用Python将Mysql的查询数据导出到文件的方法
2019/02/25 Python
Python中list循环遍历删除数据的正确方法
2019/09/02 Python
python 解决flask 图片在线浏览或者直接下载的问题
2020/01/09 Python
如何使用pycharm连接Databricks的步骤详解
2020/09/23 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
在canvas上实现元素图片镜像翻转动画效果的方法
2018/03/20 HTML / CSS
工作经常出错的检讨书
2014/09/13 职场文书
2014年医务科工作总结
2014/12/18 职场文书
入党积极分子个人总结
2015/03/02 职场文书
财政局长个人总结
2015/03/04 职场文书
2015年七年级班主任工作总结
2015/05/21 职场文书
百家讲坛观后感
2015/06/12 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书
python-for x in range的用法(注意要点、细节)
2021/05/10 Python