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定时检查某个进程是否已经关闭的方法
May 20 Python
一些常用的Python爬虫技巧汇总
Sep 28 Python
Python 爬取携程所有机票的实例代码
Jun 11 Python
Python实现简单的文本相似度分析操作详解
Jun 16 Python
JSON文件及Python对JSON文件的读写操作
Oct 07 Python
学习python的前途 python挣钱
Feb 27 Python
详解如何减少python内存的消耗
Aug 09 Python
Python 根据数据模板创建shapefile的实现
Nov 26 Python
Python ATM功能实现代码实例
Mar 19 Python
python基于opencv 实现图像时钟
Jan 04 Python
flask框架中的cookie和session使用
Jan 31 Python
Python中threading库实现线程锁与释放锁
May 17 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
php4的session功能评述(三)
2006/10/09 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
Laravel5.7框架安装与使用学习笔记图文详解
2019/04/02 PHP
jquery select下拉框操作的一些说明
2010/04/02 Javascript
如何确保JavaScript的执行顺序 之实战篇
2011/03/03 Javascript
firebug的一个有趣现象介绍
2011/11/30 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
JavaScript中的prototype.bind()方法介绍
2014/04/04 Javascript
标题过长使用javascript按字节截取字符串
2014/04/24 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
JS获取当前脚本文件的绝对路径
2016/03/02 Javascript
基于jquery编写分页插件
2016/03/07 Javascript
javascirpt实现2个iframe之间传值的方法
2016/06/30 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
js简易版购物车功能
2017/06/17 Javascript
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
Vue 重置组件到初始状态的方法示例
2018/10/10 Javascript
Vue自定义属性实例分析
2019/02/23 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
2019/11/26 Javascript
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
Python中的FTP通信模块ftplib的用法整理
2016/07/08 Python
Python实现的json文件读取及中文乱码显示问题解决方法
2018/08/06 Python
python的mysql数据库建立表与插入数据操作示例
2019/09/30 Python
tensorflow 报错unitialized value的解决方法
2020/02/06 Python
不用游标的SQL语句有哪些
2012/09/07 面试题
年会主持词结束语
2014/03/27 职场文书
小学语文教研活动总结
2014/07/01 职场文书
法人代表证明书格式
2014/10/01 职场文书
颐和园导游词
2015/01/30 职场文书
颐和园导游词400字
2015/01/30 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript
详解Python类和对象内容
2021/06/22 Python
Golang 对es的操作实例
2022/04/20 Golang