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中使用hashlib模块处理算法的教程
Apr 28 Python
浅谈python中的数字类型与处理工具
Aug 02 Python
基于Python和Scikit-Learn的机器学习探索
Oct 16 Python
Python 列表理解及使用方法
Oct 27 Python
Python实现查找字符串数组最长公共前缀示例
Mar 27 Python
python实现五子棋程序
Apr 24 Python
Python使用itcaht库实现微信自动收发消息功能
Jul 13 Python
PyCharm最新激活码(2020/10/27全网最新)
Oct 27 Python
基于python爬取梨视频实现过程解析
Nov 09 Python
安装python依赖包psycopg2来调用postgresql的操作
Jan 01 Python
Python Selenium异常处理的实例分析
Feb 28 Python
教你怎么用python爬取爱奇艺热门电影
May 20 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无限级分类方法及代码
2013/06/21 PHP
php获取中文拼音首字母类和函数分享
2014/04/24 PHP
PHP Curl出现403错误的解决办法
2014/05/29 PHP
微信公众平台天气预报功能开发
2014/07/06 PHP
php实现短信发送代码
2015/07/05 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
ie和firefox不兼容的解决方法集合
2009/04/28 Javascript
js抽奖实现随机抽奖代码效果
2013/12/02 Javascript
JS保留两位小数,多位小数的示例代码
2014/01/07 Javascript
js使用for循环查询数组中是否存在某个值
2014/08/12 Javascript
JavaScript中合并数组的N种方法
2014/09/16 Javascript
jquery让指定的元素闪烁显示的方法
2015/03/17 Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
2015/08/13 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
2016/06/29 Javascript
纯JS焦点图特效实例(可一个页面多用)
2016/12/07 Javascript
js实现自动图片轮播代码
2017/03/22 Javascript
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
jQuery实现简单评论功能
2020/08/19 jQuery
ant design vue导航菜单与路由配置操作
2020/10/28 Javascript
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
Python列表计数及插入实例
2014/12/17 Python
python3中的md5加密实例
2018/05/29 Python
详解Python是如何实现issubclass的
2019/07/24 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
Python常用断言函数实例汇总
2020/11/30 Python
微软中国官方旗舰店:销售Surface、Xbox One、笔记本电脑、Office
2018/07/23 全球购物
继承权公证书
2014/04/09 职场文书
电气工程及其自动化专业求职信
2014/06/23 职场文书
个人党性分析材料
2014/12/19 职场文书
同学聚会通知书
2015/04/20 职场文书
七年级英语教学反思
2016/02/15 职场文书
《圆明园的毁灭》教学反思
2016/02/16 职场文书
 Redis 串行生成顺序编码的方法实现
2022/04/03 Redis