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多线程编程(三):threading.Thread类的重要函数和方法
Apr 05 Python
Python中的Numeric包和Numarray包使用教程
Apr 13 Python
Python读取网页内容的方法
Jul 30 Python
python shell根据ip获取主机名代码示例
Nov 25 Python
Python中常见的异常总结
Feb 20 Python
python opencv之SURF算法示例
Feb 24 Python
TensorFlow用expand_dim()来增加维度的方法
Jul 26 Python
Python 实现异步调用函数的示例讲解
Oct 14 Python
pyqt5实现俄罗斯方块游戏
Jan 11 Python
opencv python统计及绘制直方图的方法
Jan 21 Python
python 统计list中各个元素出现的次数的几种方法
Feb 20 Python
python实现批量移动文件
Apr 05 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/06/08 PHP
基于PHP Web开发MVC框架的Smarty使用说明
2013/04/19 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
php精度计算的问题解析
2019/06/21 PHP
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
window.onload和$(function(){})的区别介绍
2013/10/30 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
2015/08/18 Javascript
JavaScript数组方法大全(推荐)
2016/07/05 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
jQuery实现的购物车物品数量加减功能代码
2016/11/16 Javascript
利用jQuery解析获取JSON数据
2017/04/08 jQuery
canvas+gif.js打造自己的数字雨头像的示例代码
2017/10/26 Javascript
JavaScript反射与依赖注入实例详解
2018/05/29 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
在nuxt中使用路由重定向的实例
2020/11/06 Javascript
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
[38:23]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第二场 11.01
2020/11/02 DOTA
python基础教程之实现石头剪刀布游戏示例
2014/02/11 Python
python判断图片宽度和高度后删除图片的方法
2015/05/22 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
Python探索之修改Python搜索路径
2017/10/25 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
Pandas之排序函数sort_values()的实现
2019/07/09 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
Python判断三段线能否构成三角形的代码
2020/04/12 Python
解决python 执行sql语句时所传参数含有单引号的问题
2020/06/06 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
canvas之万花筒效果的简单实现(推荐)
2016/08/16 HTML / CSS
CSS3 box-shadow属性实例详解
2020/06/19 HTML / CSS
最耐用行李箱,一箱永流传:Briggs & Riley(全球终身保修)
2017/12/07 全球购物
介绍一下内联、左联、右联
2013/12/31 面试题
sql字段解析器的实现示例
2021/06/23 SQL Server
nginx之queue的具体使用
2022/06/28 Servers