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


013 | "github.com/Unknwon/goconfig" |
021 | DDNS_STR = "test.allgo.cc" |
022 | INI_PATH = "C:/CCProxy/AccInfo.ini" |
023 | EXE_PATH = "C:/CCProxy/CCProxy.exe" |
032 | cfg, err := goconfig.LoadConfigFile(INI_PATH) |
034 | log.Fatalf( "无法加载配置文件:%s" , err) |
037 | cfg_ip, err = cfg.GetValue( "User001" , "IPAddressLow" ) |
039 | log.Fatalf( "无法获取键值(%s):%s" , "IPAddressLow" , err) |
041 | log.Printf( "%s > %s: %s" , "User001" , "IPAddressLow" , cfg_ip) |
044 | now_ip, err := get_cfg_ip() |
046 | log.Printf( "dns无法解析: %s" , err) |
048 | if now_ip != cfg_ip { |
050 | log.Printf( "now_ip ->[%s] , cfg_ip->[%s]" , now_ip, cfg_ip) |
053 | isInsert := cfg.SetValue( "User001" , "IPAddressLow" , now_ip) |
054 | log.Printf( "设置键值 %s 为插入操作:%v" , "IPAddressLow" , isInsert) |
056 | isInsert0 := cfg.SetValue( "User001" , "IPAddressHigh" , now_ip) |
057 | log.Printf( "设置键值 %s 为插入操作:%v" , "IPAddressHigh" , isInsert0) |
060 | isInsert1 := cfg.SetValue( "User001" , "DisableDateTime" , ntime()) |
061 | log.Printf( "设置键值 %s 为插入操作:%v" , "DisableDateTime" , isInsert1) |
063 | err := goconfig.SaveConfigFile(cfg, INI_PATH) |
065 | log.Fatalf( "无法保存配置文件:%s" , err) |
070 | log.Fatalf( "重新载入ini配置失败:%s" , err) |
072 | cfg_ip, err = cfg.GetValue( "User001" , "IPAddressLow" ) |
074 | log.Fatalf( "无法获取键值(%s):%s" , "IPAddressLow" , err) |
076 | log.Printf( "%s > %s: %s" , "User001" , "IPAddressLow" , cfg_ip) |
078 | log.Printf( "DNS IP not change !" ) |
081 | time.Sleep(time.Second * TIME_INTERVAL) |
087 | func 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) |
097 | return fmt.Sprintf(tmpnow.Format( "2006-01-02 15:04:05" )) |
101 | func iptostr(tip net.IP) string { |
102 | return fmt.Sprintf( "%s" , tip) |
106 | func reload_ccproxy_cfg() { |
107 | log.Println( "Reload CCProxy Config..." ) |
108 | argv := []string{ "-update" } |
110 | _, err := exec.Command(EXE_PATH, argv...).Output() |
112 | log.Printf( "Reload CCProxy Config Error: %s" , err) |