首页 编程设计Python编程正文

python实现自动获取IP并发送到邮箱

云水 Python编程 2020-08-03 08:58:28 1586 0 python

树莓派没有显示器,而不想设置固定IP,因为要随身携带外出,每个网络环境可能网段不一样。因此想用python写个脚本,让树莓派开机后自动获取本机ip,并且自动发送到我指定邮箱。

功能组成:

  • get_ip_address.py ,主程序,包含以下三个内容:

get_ip_address():获取所有接口的ip;

ip_save_file():把获取到的ip存入文件(后续想在raspberry pi上通过蓝牙获取ip);

ip_send_mail():把获取的IP发送到指定邮箱。

  • config.py,邮件账户配置文件

使用说明:

先在config里面设置好收发的邮箱地址和账号信息,以及SMTP服务器地址和端口。

运行环境<=python 2.7

源码:

1. config.py 内容

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# version <= python 2.7
#__author__ = 'Page Wong'
if __name__ == '__main__': 
    print("这是配置文件,不能单独运行")
#设置收件邮箱
toaddrs  = 'to@mail.com'
#设置发送邮箱
fromaddr = 'send@mail.com' 
    
#设置发送邮箱的账号密码
username = 'your_sendmail@mail.com' 
password = 'your_password'
    
#设置SMTP服务器、端口,根据你的邮箱设置,
smtp_sever = 'smtp.mail.com:25'

2. get_ip_address.py 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#version <= python 2.7
#__author__ = 'Page Wong'
import array
import struct
import socket
import fcntl
from datetime import datetime
import smtplib
from email.mime.text import MIMEText
def get_ip_address():
    '''
    #获取IP地址功能# 
    '''
    #先获取所有网络接口
    SIOCGIFCONF = 0x8912
    SIOCGIFADDR = 0x8915
    BYTES = 4096         
    sck = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    names = array.array('B',b'' * 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('', 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
    
def ip_save_file(iptxt):
    '''
    #存入IP地址到文件#
    直接发邮件不需读取次文件
    后续通过其它途径传送IP地址时用到 
    '''
    #获取当前时间,因为每次启动IP都在变,记录上时间容易区分
    now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    
    #写入文件
    with open('ipaddress.txt','w') as f:
        f.write(now+'
')
        for ip in get_ip_address(): 
            f.write(ip+'
')
            
def ip_send_mail(iptxt):
    '''
    #发送IP地址到制定邮箱#
    '''
    #导入邮件账户配置文件
    import config as mail
    
    fromaddr = mail.fromaddr
    toaddrs = mail.toaddrs
    username = mail.username
    password = mail.password
    server = smtplib.SMTP(mail.smtp_sever)
    
    #设置邮件正文,get_ip_address()返回的是list,要转换成str
    ip = '
'.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()
def main():
    '''
    #程序入口#
    '''
    #获取IP
    iptxt = get_ip_address()
    
    #将IP存入文件,如果直接发送邮件,这步可以省略。
    ip_save_file(iptxt)
    
    #将IP地址发送到指定邮箱
    ip_send_mail(iptxt)
if __name__ == '__main__': 
    '''
    #运行
    '''   
    main()

保存以上源码后,运行 python get_ip_address.py 即可。

版权声明

1.本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行测试。
2.本站资源仅供学习和交流使用,版权归资源原作者所有,请在下载后24小时之内自觉删除。
3.若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,与本站无关。
4.若内容涉及侵权或违法信息,请联系本站管理员进行下架处理,邮箱ganice520@163.com(本站不支持其他投诉反馈渠道,谢谢合作)

本文链接:http://apod.cc/index.php/post/446.html

发表评论

评论列表(0人评论 , 1586人围观)
☹还没有评论,来说两句吧...