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获取beautifulphoto随机某图片代码实例
Dec 18 Python
跟老齐学Python之折腾一下目录
Oct 24 Python
详解Python的单元测试
Apr 28 Python
python安装与使用redis的方法
Apr 19 Python
python dataframe astype 字段类型转换方法
Apr 11 Python
windows下搭建python scrapy爬虫框架步骤
Dec 23 Python
Python3安装Pillow与PIL的方法
Apr 03 Python
python数据挖掘需要学的内容
Jun 23 Python
详解python实现数据归一化处理的方式:(0,1)标准化
Jul 17 Python
基于Python实现签到脚本过程解析
Oct 25 Python
django项目中新增app的2种实现方法
Apr 01 Python
Python面向对象实现方法总结
Aug 12 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
ip签名探针
2006/10/09 PHP
QueryPath PHP 中的jQuery
2010/04/11 PHP
php设计模式  Command(命令模式)
2011/06/17 PHP
php的array_multisort()使用方法介绍
2012/05/16 PHP
深入PHP内存相关的功能特性详解
2013/06/08 PHP
Win下如何安装PHP的APC拓展
2013/08/07 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
2017/03/14 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
JS加ASP二级域名转向的代码
2007/05/17 Javascript
javascript实现多栏闭合展开式广告位菜单效果实例
2015/08/05 Javascript
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
2015/08/25 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
Bootstrap页面标题Page Header的实现方法
2017/03/22 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
2020/06/19 Javascript
对VUE中的对象添加属性
2018/09/18 Javascript
微信小程序实现批量倒计时功能
2020/11/01 Javascript
python实现划词翻译
2020/04/23 Python
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
Python实现学校管理系统
2018/01/11 Python
Python实现翻转数组功能示例
2018/01/12 Python
Django文件存储 默认存储系统解析
2019/08/02 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
2020/11/02 Python
python飞机大战游戏实例讲解
2020/12/04 Python
python实现学生信息管理系统源码
2021/02/22 Python
为什么使用接口?
2014/08/13 面试题
介绍一下Linux文件的记录形式
2013/09/29 面试题
Java程序开发中如何应用线程
2016/03/03 面试题
小学教师师德整改措施
2014/09/29 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书
2016幼儿园新学期寄语
2015/12/03 职场文书
HTML5页面音频自动播放的实现方式
2021/06/21 HTML / CSS
python 安全地删除列表元素的方法
2022/03/16 Python
Redis特殊数据类型Geospatial地理空间
2022/06/01 Redis