介绍
为什么会有这篇文章呢?首先前几天为了更好的翻墙和学习翻墙,不小心找到了一个可以免费翻墙的网站,但但是这个网站却会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是程序运行结束没,不会自动关闭
小结
我们为了方便,可是什么事都会干出来哦……
运行的效果图: