标签归档:golang动态更新CCProxy配置

golang动态更新CCProxy账号对应的IP

环境:
Windows2008R2系统上安装CCProxy代理,安全起见只允许自己的IP可以使用代理。
由于自己使用的ADSL拨号,IP不固定,每次手动修改太麻烦。
所以使用Golang自动更新CCProxy配置。
大概过程:
1、自己这边使用一个DDNS,域名为 test.allgo.cc
2、使用golang每个1分钟解析一次test.allgo.cc
3、解析结果若同CCProxy配置中的不同,则更新配置
4、重新载入CCProxy配置

 

001package main
002 
003/*
004编译后台运行
005go build -ldflags "-H windowsgui" -o ddns_ccproxy.exe edit_win_ini.go
006 
007goconfig库教程
009*/
010 
011import (
012    "fmt"
013    "github.com/Unknwon/goconfig"
014    "log"
015    "net"
016    "os/exec"
017    "time"
018)
019 
020const (
021    DDNS_STR      = "test.allgo.cc"
022    INI_PATH      = "C:/CCProxy/AccInfo.ini"
023    EXE_PATH      = "C:/CCProxy/CCProxy.exe"
024    TIME_INTERVAL = 60
025)
026 
027var (
028    cfg_ip string
029)
030 
031func main() {
032    cfg, err := goconfig.LoadConfigFile(INI_PATH)
033    if err != nil {
034        log.Fatalf("无法加载配置文件:%s", err)
035    }
036 
037    cfg_ip, err = cfg.GetValue("User001", "IPAddressLow")
038    if err != nil {
039        log.Fatalf("无法获取键值(%s):%s", "IPAddressLow", err)
040    }
041    log.Printf("%s > %s: %s", "User001", "IPAddressLow", cfg_ip)
042 
043    for {
044        now_ip, err := get_cfg_ip()
045        if err != nil {
046            log.Printf("dns无法解析: %s", err)
047        } else {
048            if now_ip != cfg_ip {
049 
050                log.Printf("now_ip ->[%s] , cfg_ip->[%s]", now_ip, cfg_ip)
051 
052                //更新ini文件IP
053                isInsert := cfg.SetValue("User001", "IPAddressLow", now_ip)
054                log.Printf("设置键值 %s 为插入操作:%v", "IPAddressLow", isInsert)
055 
056                isInsert0 := cfg.SetValue("User001", "IPAddressHigh", now_ip)
057                log.Printf("设置键值 %s 为插入操作:%v", "IPAddressHigh", isInsert0)
058 
059                //更新ini文件时间
060                isInsert1 := cfg.SetValue("User001", "DisableDateTime", ntime())
061                log.Printf("设置键值 %s 为插入操作:%v", "DisableDateTime", isInsert1)
062 
063                err := goconfig.SaveConfigFile(cfg, INI_PATH)
064                if err != nil {
065                    log.Fatalf("无法保存配置文件:%s", err)
066                }
067                reload_ccproxy_cfg()
068                err1 := cfg.Reload()
069                if err1 != nil {
070                    log.Fatalf("重新载入ini配置失败:%s", err)
071                }
072                cfg_ip, err = cfg.GetValue("User001", "IPAddressLow")
073                if err != nil {
074                    log.Fatalf("无法获取键值(%s):%s", "IPAddressLow", err)
075                }
076                log.Printf("%s > %s: %s", "User001", "IPAddressLow", cfg_ip)
077            } else {
078                log.Printf("DNS IP not change !")
079            }
080        }
081        time.Sleep(time.Second * TIME_INTERVAL)
082    }
083 
084}
085 
086//解析域名,返回字符串类型IP
087func get_cfg_ip() (ip_str string, err error) {
088    dns_ip, err := net.LookupIP(DDNS_STR)
089    ip_str = iptostr(dns_ip[0])
090    log.Printf("dns resolve : %s", ip_str)
091    return ip_str, err
092}
093 
094//获取当前时间
095func ntime() string {
096    tmpnow := time.Now()
097    return fmt.Sprintf(tmpnow.Format("2006-01-02 15:04:05"))
098}
099 
100//ip类型转字符串类型
101func iptostr(tip net.IP) string {
102    return fmt.Sprintf("%s", tip)
103}
104 
105//重新加载CCProxy配置
106func reload_ccproxy_cfg() {
107    log.Println("Reload CCProxy Config...")
108    argv := []string{"-update"}
109    //fmt.Println(argv)
110    _, err := exec.Command(EXE_PATH, argv...).Output()
111    if err != nil {
112        log.Printf("Reload CCProxy Config Error: %s", err)
113    }
114}