自动重启路由器,更新外网IP地址。

引子

最近家里的WiFi路由(带花生壳功能)总是断线,导致家里的CT3服务无法正常从外面访问。

如果路由器可以定时检测网络状态,当网络无法访问时自己可以重拔上网,就可以解决问题了。但路由器是不支持这个功能的呀。

好吧,在CT3上写一个定时检测脚本吧。

思路是使用PHP写一个脚本,只关心执行时,网络当前状态是否可用(即是否能访问到自己在外网ip地址),如果获取不到,就说明网络当前状态已经断线,重启一下路由器。

准备

  1. CT3服务器内网ip: 192.168.0.100,通过ARP已经绑死DHCP服务地址了

  2. 路由器的内网IP: 192.168.0.1
    水星 MW151R

  3. 获取外网ip地址的接口: http://1111.ip138.com/ic.asp

  4. 我的SAE服务,通过SAE提供的Memcache来缓存家里服务器的外网ip地址。(可选项哈~)

编写代码

在重启路由器时,遇到了一个HTTP Auth认证的问题,详细解决办法参见后面。

PHP代码 : 下载源码[@Github]

代码在CT3上的位置 /data/utils/bin/update.remote.ipaddr ,并设置为可执行 chmod +x /data/utils/bin/update.remote.ipaddr 设置定时任务 设置每5分钟自动执行一次

*/5 * * * * /data/utils/bin/update.remote.ipaddr > /data/logs/crontab/update.remote.ipaddr.log

附 : 如何做HTTP AUTH认证操作

什么是HTTP Basic Authentication?直接看http://en.wikipedia.org/wiki/Basic_authentication_scheme吧。
简单点说,HTTP AUTH是一种基于HTTP协议的简单认证方式。
可以通过以下两种方法进行认证

  1. 在请求头中添加Authorization:
Authorization: "Basic 用户名和密码的base64加密字符串"
  1. 在url中添加用户名和密码:
http://userName:password@api.minicloud.com.cn/statuses/friends_timeline.xml

参考文章:


补充一下

------ update by Robert @ 2015-07-05 ------

获取外网IP的方法

------ end update ------

赞赏