【精品教程】让newifi发送IP邮件到指定邮箱
说明:本文是本人之前在 NBD论坛发过的,今只做搬迁和部分修改
背景:由于本人搭建个人网站需要,所以需要实时知道newifi所在广域网IP(即公网IP),因为域名解析需要绑定该IP,由此想到让路由器自动发送IP到我的邮箱(也是因为之前一直在玩树莓派,树莓派上有相应的需求,继而移植到路由器)。
需要:
1、路由器升级到最新抢先版固件(其他版本未测试,如果可以满足一下几点要求应该也可以);
2、开启Telnet(安装一键root(Telnet)插件并启动,小云OS固件只需在高级设置里打开ssh);
3、安装Python(安装Python2插件,小云OS固件只需我适配的Python插件),因为获取IP和发送邮件的脚步要通过Python脚步实现;
4、安装ftp服务器,并开启,具体安装方法论坛里找下,具体链接我忘记了,知道的坛友麻烦跟帖告知,谢谢;
5、电脑安装putty(ssh、Telnet等链接工具软件)和FileZilla Client、Winscp(ftp传输工具软件);
具体步骤:
a、编写Python脚本ip.py,最好在Linux环境下编写,因为系统差异可能出现各种报错;
#! /usr/bin/env python
import socket
import time
import smtplib
import urllib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
def sendEmail(smtpserver,username,password,sender,receiver,subject,msghtml):
msgRoot = MIMEMultipart('related')
msgRoot["To"] = ','.join(receiver)
msgRoot["From"] = sender
msgRoot['Subject'] = subject
msgText = MIMEText(msghtml,'html','utf-8')
msgRoot.attach(msgText)
#sendEmail
smtp = smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(username, password)
smtp.sendmail(sender, receiver, msgRoot.as_string())
smtp.quit()
def check_network():
while True:
try:
result=urllib.urlopen('http://baidu.com').read()
print result
print "Network is Ready!"
break
except Exception , e:
print e
print "Network is not ready,Sleep 5s...."
time.sleep(5)
return True
def get_ip_address():
response = urllib.urlopen('http://www.net.cn/static/customercare/yourip.asp')
ipaddr = response.read()
ipaddr = unicode(ipaddr,"gb2312")
#s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#s.connect(("1.1.1.1",80))
#ipaddr=s.getsockname()[0]
#s.close()
return ipaddr
if __name__ == '__main__':
check_network()
ipaddr=get_ip_address()
sendEmail('smtp.163.com','你的邮箱','邮箱登录密码','你的邮箱',['你的邮箱'],'IP Address Of newifi',ipaddr)
注:
i、本脚本使用的是网易163的邮箱,如若改用其他邮箱强自行更改邮箱服务器(脚本最后红色部分改成你自己的邮箱信息),至此ip.py脚本编写完成;
ii、原理:通过万网提供的查询本地外网ip的网页(http://www.net.cn/static/customercare/yourip.asp),获取外网ip,
再通过python实现网页抓取;
b、通过ftp吧改脚本上传到路由器指定目录,我放在/usr/sbin/该目录下,并制定文件可执行(可以直接用FileZilla Client修改——右键选中ip.py更改权限为0755;或者通过ssh命令修改——chmod +x /usr/sbin/ip.py);
c、关于如何实现开机启动,我的办法是把启动脚本写入环境变量(/etc/profile)里并且把加载环境变量的脚本命令加入LED灯脚本中(/etc/init.d/led),这样做的好处是不仅实现开机启动而且当公网IP变化时会自动发邮件告知IP改变了,这样才正在做到实时掌控,便于及时修改域名解析(要知道固定公网IP是很贵的);
最后:触类旁通,不止路由器,其他所有Linux平台或者可运行Python脚本的系统,都可以使用这种方法实现IP变动实时掌控


路由器不是有web服务器吗,直接用php实现,然后在路由器添加计划任务不就好咯!
这个初音太碍事了!