由于家中是移动公司网络,故无法申请公网ip,只得利用ipv6实现外网访问内网。
具体方法是:
1.内网机器自动执行ifconfig命令,获取ipv6地址
2.内网机器利用python程序实现自动发送到自己指定的邮箱
3.上述发送过程每天定时执行
具体python为:
/home/getip.py
#内网ipv6连接
#通过ifconfig定时执行,发送邮件,实现外网获取内网设备的ipv6信息
#中移动网络下,ipv6每隔一定周期会变化
import os
import re
import smtplib
# 此处一定要绝对路径
output = os.popen("/usr/sbin/ifconfig").read()
print(output)
my_sender = '***@sina.com'
receivers = ['****@163.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
# 第三方 SMTP 服务
my_user="smtp.sina.com" #设置服务器
mail_user="****" #用户名
my_pass="*****" #口令
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email import encoders
from email.utils import parseaddr,formataddr
import smtplib
from_addr=my_sender#用来发送邮件的邮箱地址
password=my_pass#邮箱密码或者是授权密码
to_addr=receivers#目标邮箱地址
smtp_server='smtp.sina.com'#这里是新浪的SMTP服务器地址
#发送的信息格式
content=MIMEText(output,'plain','utf-8')
msg=MIMEMultipart()
msg['From']=Header(from_addr)#定义发件人
msg['Subject']=Header('get-ip','utf-8')#定义邮件名
msg.attach(content)#加上邮件的内容
try:
server=smtplib.SMTP()
server.connect(smtp_server,25)#连接SMTP服务器
#server.set_debuglevel(1)#打印调试信息
server.login(from_addr,password)#登陆邮箱
server.sendmail(from_addr,to_addr,msg.as_string())#发送邮件
print("Send successfully!")
except smtplib.SMTPException as e:
server.quit()#退出
print("发送失败")
参考:Python实现SMTP协议发送邮件(网易、新浪、qq)
定时发送:
利用crontab
crontab -e
每五分钟执行
*/5 * * * * /usr/bin/python3 /home/getip.py
每6小时执行
0 */6 * * * /usr/bin/python3 /home/getip.py