介绍

为什么会有这篇文章呢?首先前几天为了更好的翻墙和学习翻墙,不小心找到了一个可以免费翻墙的网站,但但是这个网站却会6个小时更新一次密码。好吧……于是就有了一次打算使用go截取密码的冲动。

明明go就是用于大型系统构建的,你居然为了不想打开浏览器而使用go去爬一个密码!!【怒摔

那么下面先贴乱兮兮的代码:

// Test1 project main.go
package main

import (
	"net/http"
	"fmt"
	"io/ioutil"
	"regexp"
//	"encoding/json"
	"os"
	"strings"
)
 
func main() {
   	resp ,err :=http.Get("http://www.ishadowsocks.com")
	pattern :="密码:[\\d]*"
	
	if err !=nil{
		fmt.Println(err)
		return
	}

	a ,er:=ioutil.ReadAll(resp.Body)
	if er!=nil{
		fmt.Println(er)
		return
	}

	 ok,_:= regexp.MatchString(pattern, string(a));
	if ok{
		fmt.Println("ok")
		}
	reg, _ := regexp.Compile(pattern)
    all := reg.FindAllString(string(a), -1)
    fmt.Println(all)//输出密码
	//然后匹配个算法是纯数字
	fmt.Println(all[0])
	bbs :=strings.Replace(all[0],"密码:","",1)
	all_1 := "{\n\"configs\" : [\n{\"server\" : \"US.SSSERVER.PW\",\n\"server_port\" : 8989,\n\"password\" : \""
	all_2 := bbs+"\",\n"
	all_3 := "\"method\" : \"aes-256-cfb\",\n\"remarks\" : \"这个是备忘录\"}\n],\n\"index\" : 0,\n\"global\" : false,\n\"enabled\" : false,\n\"shareOverLan\" : true,\n\"isDefault\" : false,\n\"localPort\" : 1080}"
	
	bbs_all:=all_1+all_2+all_3
	fmt.Println(bbs_all)
	
	file,_:=os.Create("gui-config.json")
	file.WriteString(bbs_all)
	file.Close()
	}

那么从代码中讲解一开始的思路吧。首先使用GET 提取网页的信息,然后观看这些信息中有没有保存密码的那个数据字符串。
想办法匹配这个字符串……看网页中浏览看到,匹配的字符为密码:纯数字 …… 没错就是纯数字,那么匹配的规则就出现了

记得对函数的调用之后进行错误处理……有错误就退出提醒

看看一开始的引用其他包的时候,是不是看到有引用json呢?没错……我本来就是打算用json重新生成一段符号文档内容的信息,然后保存……后来发现好像没必要,确实没必要。引用用string就可以完成的事情,为什么要弄得那么复杂呢?
最后用多个string拼揍字符……完成对下面类似json格式的整理
目标的json

{
"configs" : [
{"server" : "US.SSSERVER.PW",
"server_port" : 8989,
"password" : "08474740",
"method" : "aes-256-cfb",
"remarks" : "这个是备忘录"}
],
"index" : 0,
"global" : false,
"enabled" : false,
"shareOverLan" : true,
"isDefault" : false,
"localPort" : 1080}

实话告诉你吧,这个json就是翻墙软件的一个配置文档……
我懒得每次都编辑配置文档,只好每次引用程序的时候重新生成一份配置文档……
当然,从理论上也只是修改文档而已。如果没有文档而是创建文档。
最后还是需要写一个bat的脚本文件,为什么呢?因为go运行的程序有点快……

只有俩行东西 Test1.exe pause

Test1.exe是程序的名字 pause是程序运行结束没,不会自动关闭

小结

我们为了方便,可是什么事都会干出来哦……

运行的效果图: