实现了利用GAE监控GHS IP在国内的可用性并且自动修改DNS设置

利用的道具有:

1)  Google AppEngine  ------  用来部署监控程序
2)  利用了GAE的Cron Jobs  ------  实现定时监控的功能
3)  利用了GAE的Task Queues  ------  将需要扫描的可用IP推入队列 , 分散每次处理占用的CPU.
4)  DNSPod 及其提供的最新的API(v1.5)  ------  一旦发现某IP可用性的变动, 通过API 新建/激活某个A记录 ,或者禁用某个A记录
5)  在国内找一个Web代理  ------  此代理的IP一定要在国内,否则在GAE上监控始终是有效的,那就没有意义了
6)  尽可能收集全 所有的可用不可用的公共的GHS IP ,甚至包括私人通过反向代理架设GHS服务
7) 并且还实现利用GAE的邮件服务,进行GHS IP可用性变动的邮件通知功能.

从今往后再也不需要关注 GHS IP.  (除非所有的公共 GHS IP 和 私人搭建的GHS IP 都不可用,但我会收到邮件通知的.) 
并且还有一个附带的功效, 如果有多个可用IP, 而程序自动创建的都是A记录, 那么按DNSPod的文档说明知道, 顺带实现了负载均衡(DNS轮询机制)

2010-2-8补记: 目前从GAE无法访问www.dnspod.com ,我咨询了 DNSPod技术,对方告诉我没有封我的程序,并且从2月3号以来没有收到我请求. 我怀疑可能是 我们国家的大墙 封了 GAE对www.dnspod.com等网站的访问. 现在该程序已经无法使用了.

  目前我已经用 C#重写了该程序,作为Windows服务 设置为开机自动运行在我电脑本地.

狮子座BABY 齐齐

转载请注明:来自無處不在
本文地址:http://blog.chaoskey.com/2009/12/11/gaeghsipmonitoring



16 条评论

我要留言
  • #655601

    混沌 发表于 2010-06-09 at 21:41 回复 引用

    @stbrine
    给你发了两个版本的程序代码: Python GAE版 和 C#windows服务版
  • #641601

    stbrine 发表于 2010-06-08 at 13:38 回复 引用

    楼主能否将程序发到我邮箱,学习一下.
  • #434601

    混沌 发表于 2010-05-12 at 12:16 回复 引用

    @gbate-433601: 给你发了两个版本的程序代码: Python GAE版 和 C#windows服务版
  • #433601

    gbate 发表于 2010-05-06 at 23:09 回复 引用

    能否发个源码到gbate#cntip.com 研究一下!谢谢
  • #32601

    混沌 发表于 2010-02-08 at 09:01 回复 引用

    @barry-30601: 目前从GAE无法访问www.dnspod.com ,我咨询了 DNSPod技术,对方告诉我没有封我的程序,并且从2月3号以来没有收到我请求. 我怀疑可能是 我们国家的大墙 封了 GAE对www.dnspod.com等网站的访问. 现在该程序已经无法使用了.
  • #30601

    barry 发表于 2010-02-04 at 21:57 回复 引用

    谢谢!已明白!
    怪我自己太着急,没有看API里其他几个功能。

    不过还是想学习一下你的程序,有时间请发一份代码给我,谢谢!
  • #29601

    混沌 发表于 2010-02-03 at 10:11 回复 引用

    @barry-28601: 比如 xxx.yourdomain.com 将要A指向的IP之一: 1.1.1.1 首先你可以字符串分析出 两个部分, xxx 和 yourdomain.com. 通过 https://www.dnspod.com/API/Domain.List 可以知 yourdomain.com 是否已创建,如果没有则创建之, 之后获得domain_id ,同理, 通过https://www.dnspod.com/API/Record.List 和已知的domain_id 可知 xxx记录是否已经创建,如果没有也创建之,之后就有record_id. 当然为了避免重复调用API,最后缓存已查询的结果,除非查询结果已经改变,就将相关结果的缓存清空.
  • #28601

    barry 发表于 2010-02-01 at 19:25 回复 引用

    下面是DNSPOD的API文档,其中的
    domain_id

    record_id
    是什么?我怎么知道我想更新的记录的domain_id和record_id


    == 修改记录


    URL: https://www.dnspod.com/API/Record.Modify
    方法: POST
    参数:
    login_email - 用户帐号
    login_password - 用户密码
    format {json,xml} - 返回的数据格式,支持json和xml.
    domain_id - 域名ID, 如 12345
    record_id - 记录ID, 如 1234567
    sub_domain - 主机记录, 如 www
    record_type {'A','CNAME','MX','URL','NS','TXT','AAAA'} - 记录类型
    record_line {'default', 'tel', 'cnc', 'edu', 'cmc', 'foreign'} - 记录线路依次为:默认、电信、网通、教育网、移动、国外(红字仅对VIP有效)
    value - 记录值, 如 IP:200.200.200.200, CNAME: cname.dnspod.com., MX: mail.dnspod.com.
    mx {1-20} - MX优先级, 当记录类型是 MX 时有效,范围1-20
    ttl {1-604800} - TTL,范围1-604800
  • #26604

    混沌 发表于 2010-01-11 at 17:03 回复 引用

    @barry-26603:
    目前的代码和其它项目中混在一起,等我有空时(估计明天或后天)整理出一份再发给你.
  • #26603

    barry 发表于 2010-01-09 at 16:59 回复 引用

    实现该功能的GAE代码能否可以给我发一份,我学习一下!
    如果可以,请发到邮箱:barry1984@163.com,谢谢!
  • #22602

    猪猪 发表于 2009-12-23 at 14:59 回复 引用

    对对,应该是用域名,用DNS来转换域名,否则没法访问GAE了:)
  • #22601

    混沌 发表于 2009-12-23 at 14:40 回复 引用

    @猪猪: 不能用IP ,要用域名绑定。 首先,AppEngine只支持http(s)的跨站点调用,其次,用IP 你无法访问你AppEngine上的站点。
  • #20606

    猪猪 发表于 2009-12-22 at 22:55 回复 引用

    噢,偶把Proxy代理和Web代理混淆了,这样就没问题了,其实直接填IP访问也可以吧http://xxx.com/webproxy?url=http://test1_ip/ok,确定成功后调用DNS的API修改A记录就可以吧
  • #20605

    混沌 发表于 2009-12-22 at 22:05 回复 引用

    @猪猪: 当然,如果你监控程序部署在国内,(而不是 AppEngine上),那就不需要那么麻烦了。
  • #20604

    混沌 发表于 2009-12-22 at 21:58 回复 引用

    @猪猪: 其实很简单,首先,将所有GHS IP(包括可用的和不可用),分别对应一个绑定域名,比如 test1.chaoskey.com,test2.chaoskey.com,.... ,其实都指向blog.chaoskey.com 对应的空间。但test1,....,testn对应A记录IP不一样,有多少个GHS IP,就设多少个测试点 。 然后,假设选定的Web代理(国内IP)调用形如:http://xxx.com/webproxy?url=http://test1.chaoskey.com/ok 最后,定时循环调用测试点,就可以判定是否成功,如果成功,说明test1.chaoskey.com对应的IP 可用
  • #20603

    猪猪 发表于 2009-12-22 at 21:34 回复 引用

    高!很受启发!问个小问题:GAE的URL Fetch函数怎么实现通过国内Web代理访问目标服务器呢?
  • #20602

    Zhu8 发表于 2009-12-21 at 15:33 回复 引用

    @混沌: 哦。原来是这样啊,好吧,那我继续看天朝脸色行事算了。哈哈!
  • #21603

    混沌 发表于 2009-12-21 at 15:27 回复 引用

    @Zhu8: 不好意思,我是将域名动态做多个A记录同时指向不同的可用GHS IP. 其中有3个IP,是别人私人架设的反向代理,需要向别人申请的,否则就算我给你,你也用不了.
  • #21602

    Zhu8 发表于 2009-12-21 at 13:24 回复 引用

    你好,混沌,看得出你是个Geek啊,问下,可否借用你的GHS啊?