From cff11d662b079167165294ae9630bb645311bf64 Mon Sep 17 00:00:00 2001 From: netscane <2498788665@qq.com> Date: Sun, 16 Aug 2020 21:07:19 +0800 Subject: [PATCH 1/5] my version --- main.go | 126 ++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 91 insertions(+), 35 deletions(-) diff --git a/main.go b/main.go index 5b263e3..e3ab245 100644 --- a/main.go +++ b/main.go @@ -6,70 +6,126 @@ import ( "net/http" "os" "path/filepath" - "text/template" + "io" + "bytes" + "fmt" + "strings" ) -var listUrl = "https://ngosang.github.io/trackerslist/trackers_best.txt" +var ( + trackerUrl = "https://cdn.jsdelivr.net/gh/ngosang/trackerslist/trackers_best_ip.txt" + //trackerUrl = "https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_best.txt" //need http proxy +) -var tmpl = `bt-tracker={{range $k, $v := .}}{{if eq $k 0}}{{$v}}{{else}},{{$v}}{{end}}{{end}} -enable-dht=true -bt-enable-lpd=true -enable-peer-exchange=true -` +func getTrackers() ([]string, error) { + client := &http.Client{} + request, err := http.NewRequest("GET", trackerUrl, nil) + if err != nil { + return nil, err + } + //add header + request.Header.Add("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36") -func downloadList() ([]string, error) { - resp, err := http.Get(listUrl) + resp, err := client.Do(request) if err != nil { return nil, err } defer resp.Body.Close() rd := bufio.NewReader(resp.Body) - res := []string{} + trackers := []string{} for { - line1, _, err := rd.ReadLine() + line, _, err := rd.ReadLine() if err != nil { break } - //fmt.Println("url:", string(line1), len(line1)) - if len(line1) > 0 { - res = append(res, string(line1)) + if len(line) > 0 { + trackers = append(trackers, string(line)) } } - return res, nil + return trackers, nil } -func writeConf(data []string) error { - home, err := os.UserHomeDir() - if err != nil { - return err - } - dir1 := filepath.Join(home, ".aria2") - os.Mkdir(dir1, os.ModePerm) - confPath := filepath.Join(home, ".aria2", "aria2.conf") - fp, err := os.Create(confPath) +func getConfFilePath() (string, error) { + var ( + home string + confPath string + err error + ) + home, err = os.UserHomeDir() if err != nil { - return err + return "", err } - defer fp.Close() - t := template.New("") - t, err = t.Parse(tmpl) - if err != nil { - return err - } - return t.Execute(fp, data) + confPath = filepath.Join(home, "aria2", "aria2.conf") + return confPath, nil +} + +func updateConfFile(confPath string, trackers []string) error { + var ( + err error + file *os.File + lineb []byte + line string + reader *bufio.Reader + bufw *bytes.Buffer + ) + + file, err = os.OpenFile(confPath, os.O_RDWR, 0666) + if err != nil { + fmt.Println("Open conf file error!", err) + return err + } + defer file.Close() + + reader = bufio.NewReader(file) + bufw = new(bytes.Buffer) + for { + lineb, _, err = reader.ReadLine() + if err != nil { + if err == io.EOF { + break + } else { + fmt.Println("Read file error!", err) + return err + } + } + line = string(lineb) + if strings.HasPrefix(line, "bt-tracker") && + !strings.HasPrefix(line, "bt-tracker-") { + line = "bt-tracker=" + strings.Join(trackers, ",") + "\n" + } + bufw.WriteString(line) + bufw.WriteString("\n") + } + file.Seek(0, 0) + _, err = file.WriteString(bufw.String()) + if err != nil { + fmt.Println("Write conf file error!", err) + return err + } + return nil } func main() { flag.Parse() if len(flag.Arg(0)) > 0 { - listUrl = flag.Arg(0) + trackerUrl = flag.Arg(0) + } + var ( + trackers []string + err error + confPath string + ) + trackers, err = getTrackers() + if err != nil { + panic(err.Error()) } - list1, err := downloadList() + confPath, err = getConfFilePath() if err != nil { panic(err.Error()) } - err = writeConf(list1) + err = updateConfFile(confPath, trackers) if err != nil { panic(err.Error()) } + fmt.Println("Update tracker success!") } From 1ec3ab391390e9663bdd48d977a6619a25cf132a Mon Sep 17 00:00:00 2001 From: netscane <2498788665@qq.com> Date: Sat, 22 Aug 2020 13:03:18 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=AF=8F=E6=AC=A1?= =?UTF-8?q?=E8=BF=90=E8=A1=8C=E4=BC=9A=E4=BA=A7=E7=94=9F=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E6=8D=A2=E8=A1=8C=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/main.go b/main.go index e3ab245..239dc48 100644 --- a/main.go +++ b/main.go @@ -93,8 +93,10 @@ func updateConfFile(confPath string, trackers []string) error { !strings.HasPrefix(line, "bt-tracker-") { line = "bt-tracker=" + strings.Join(trackers, ",") + "\n" } + if bufw.Len() > 0 { + bufw.WriteString("\n") + } bufw.WriteString(line) - bufw.WriteString("\n") } file.Seek(0, 0) _, err = file.WriteString(bufw.String()) From 0a9fc35459fa41695bc0cb6a9c97929ec83d49d6 Mon Sep 17 00:00:00 2001 From: netscane <2498788665@qq.com> Date: Fri, 11 Dec 2020 12:04:09 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=A7=E7=94=9F?= =?UTF-8?q?=E9=A2=9D=E5=A4=96=E7=A9=BA=E6=A0=BC=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/main.go b/main.go index 239dc48..1637c77 100644 --- a/main.go +++ b/main.go @@ -6,6 +6,7 @@ import ( "net/http" "os" "path/filepath" + "runtime" "io" "bytes" "fmt" @@ -91,12 +92,14 @@ func updateConfFile(confPath string, trackers []string) error { line = string(lineb) if strings.HasPrefix(line, "bt-tracker") && !strings.HasPrefix(line, "bt-tracker-") { - line = "bt-tracker=" + strings.Join(trackers, ",") + "\n" - } - if bufw.Len() > 0 { - bufw.WriteString("\n") + line = "bt-tracker=" + strings.Join(trackers, ",") } bufw.WriteString(line) + if "windows" == runtime.GOOS { + bufw.WriteString("\r\n") + }else{ + bufw.WriteString("\n") + } } file.Seek(0, 0) _, err = file.WriteString(bufw.String()) From 280ddc172271e7b53d0d0c2cf0fa5c0e64a637a3 Mon Sep 17 00:00:00 2001 From: netscane <2498788665@qq.com> Date: Sat, 11 Sep 2021 00:08:26 +0800 Subject: [PATCH 4/5] fix bug --- main.go | 168 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 96 insertions(+), 72 deletions(-) diff --git a/main.go b/main.go index 1637c77..d2cd026 100644 --- a/main.go +++ b/main.go @@ -2,30 +2,30 @@ package main import ( "bufio" + "bytes" "flag" + "fmt" + "io" "net/http" "os" "path/filepath" "runtime" - "io" - "bytes" - "fmt" - "strings" + "strings" ) var ( - trackerUrl = "https://cdn.jsdelivr.net/gh/ngosang/trackerslist/trackers_best_ip.txt" - //trackerUrl = "https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_best.txt" //need http proxy + trackerUrl = "https://cdn.jsdelivr.net/gh/ngosang/trackerslist/trackers_best_ip.txt" + //trackerUrl = "https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_best.txt" //need http proxy ) func getTrackers() ([]string, error) { - client := &http.Client{} - request, err := http.NewRequest("GET", trackerUrl, nil) - if err != nil { - return nil, err - } - //add header - request.Header.Add("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36") + client := &http.Client{} + request, err := http.NewRequest("GET", trackerUrl, nil) + if err != nil { + return nil, err + } + //add header + request.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36") resp, err := client.Do(request) if err != nil { @@ -47,67 +47,86 @@ func getTrackers() ([]string, error) { } func getConfFilePath() (string, error) { - var ( - home string - confPath string - err error - ) + var ( + home string + confPath string + err error + ) home, err = os.UserHomeDir() if err != nil { return "", err } confPath = filepath.Join(home, "aria2", "aria2.conf") - return confPath, nil + return confPath, nil +} + +func readConfLines(confPath string) ([]string, error) { + var ( + lines []string + line string + line_bs []byte + file *os.File + reader *bufio.Reader + err error + ) + file, err = os.OpenFile(confPath, os.O_RDONLY, 0666) + reader = bufio.NewReader(file) + if err != nil { + fmt.Printf("open config file[%s] error!%v\n", confPath, err) + return nil, err + } + for { + line_bs, _, err = reader.ReadLine() + if err != nil { + if err == io.EOF { + break + } else { + fmt.Printf("read config file[%s] error!%v\n", confPath, err) + return nil, err + } + } + line = string(line_bs) + if strings.HasPrefix(line, "#") || strings.Index(line, "=") > 0 { + lines = append(lines, line) + } + } + return lines, nil } -func updateConfFile(confPath string, trackers []string) error { - var ( - err error - file *os.File - lineb []byte - line string - reader *bufio.Reader - bufw *bytes.Buffer - ) +func updateConfFile(confPath string, lines []string, trackers []string) error { + var ( + err error + file *os.File + line string + bufw *bytes.Buffer + ) - file, err = os.OpenFile(confPath, os.O_RDWR, 0666) - if err != nil { - fmt.Println("Open conf file error!", err) - return err - } - defer file.Close() + file, err = os.OpenFile(confPath, os.O_WRONLY|os.O_TRUNC, 0666) + if err != nil { + fmt.Printf("open config file[%s] error!%v\n", confPath, err) + return err + } + defer file.Close() - reader = bufio.NewReader(file) - bufw = new(bytes.Buffer) - for { - lineb, _, err = reader.ReadLine() - if err != nil { - if err == io.EOF { - break - } else { - fmt.Println("Read file error!", err) - return err - } - } - line = string(lineb) - if strings.HasPrefix(line, "bt-tracker") && - !strings.HasPrefix(line, "bt-tracker-") { - line = "bt-tracker=" + strings.Join(trackers, ",") - } - bufw.WriteString(line) - if "windows" == runtime.GOOS { - bufw.WriteString("\r\n") - }else{ - bufw.WriteString("\n") + bufw = new(bytes.Buffer) + for _, line = range lines { + if strings.HasPrefix(line, "bt-tracker") && + !strings.HasPrefix(line, "bt-tracker-") { + line = "bt-tracker=" + strings.Join(trackers, ",") + } + bufw.WriteString(line) + if "windows" == runtime.GOOS { + bufw.WriteString("\r\n") + } else { + bufw.WriteString("\n") + } } - } - file.Seek(0, 0) - _, err = file.WriteString(bufw.String()) - if err != nil { - fmt.Println("Write conf file error!", err) - return err - } - return nil + _, err = file.WriteString(bufw.String()) + if err != nil { + fmt.Printf("write conf file[%s] error!%v\n", confPath, err) + return err + } + return nil } func main() { @@ -115,22 +134,27 @@ func main() { if len(flag.Arg(0)) > 0 { trackerUrl = flag.Arg(0) } - var ( - trackers []string - err error - confPath string - ) + var ( + trackers []string + confLines []string + err error + confPath string + ) trackers, err = getTrackers() if err != nil { panic(err.Error()) } - confPath, err = getConfFilePath() + confPath, err = getConfFilePath() + if err != nil { + panic(err.Error()) + } + confLines, err = readConfLines(confPath) if err != nil { panic(err.Error()) } - err = updateConfFile(confPath, trackers) + err = updateConfFile(confPath, confLines, trackers) if err != nil { panic(err.Error()) } - fmt.Println("Update tracker success!") + fmt.Println("Update tracker success!") } From a84e6b92537d2caaba687584ce5cee1c8b98600a Mon Sep 17 00:00:00 2001 From: wangfs <2498788665@qq.com> Date: Thu, 11 Nov 2021 02:22:02 +0800 Subject: [PATCH 5/5] 2021-11-11 --- main.go | 47 +++++++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/main.go b/main.go index d2cd026..c06d85e 100644 --- a/main.go +++ b/main.go @@ -14,13 +14,20 @@ import ( ) var ( - trackerUrl = "https://cdn.jsdelivr.net/gh/ngosang/trackerslist/trackers_best_ip.txt" + tracker_url string + default_tracker_url = "https://cdn.jsdelivr.net/gh/ngosang/trackerslist/trackers_best_ip.txt" + conf_path string //trackerUrl = "https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_best.txt" //need http proxy ) +func init() { + flag.StringVar(&tracker_url, "tracker-url", default_tracker_url, "tracker url") + flag.StringVar(&conf_path, "conf-path", "", "aria2 conf path") +} + func getTrackers() ([]string, error) { client := &http.Client{} - request, err := http.NewRequest("GET", trackerUrl, nil) + request, err := http.NewRequest("GET", tracker_url, nil) if err != nil { return nil, err } @@ -46,18 +53,18 @@ func getTrackers() ([]string, error) { return trackers, nil } -func getConfFilePath() (string, error) { +func getDefaultConfPath() (string, error) { var ( - home string - confPath string - err error + home string + path string + err error ) home, err = os.UserHomeDir() if err != nil { return "", err } - confPath = filepath.Join(home, "aria2", "aria2.conf") - return confPath, nil + path = filepath.Join(home, ".aria2c", "aria2.conf") + return path, nil } func readConfLines(confPath string) ([]string, error) { @@ -117,8 +124,14 @@ func updateConfFile(confPath string, lines []string, trackers []string) error { bufw.WriteString(line) if "windows" == runtime.GOOS { bufw.WriteString("\r\n") + if !strings.HasPrefix(line, "#") { + bufw.WriteString("\r\n") + } } else { bufw.WriteString("\n") + if !strings.HasPrefix(line, "#") { + bufw.WriteString("\n") + } } } _, err = file.WriteString(bufw.String()) @@ -131,28 +144,26 @@ func updateConfFile(confPath string, lines []string, trackers []string) error { func main() { flag.Parse() - if len(flag.Arg(0)) > 0 { - trackerUrl = flag.Arg(0) - } var ( trackers []string confLines []string err error - confPath string ) - trackers, err = getTrackers() - if err != nil { - panic(err.Error()) + if len(conf_path) == 0 { + conf_path, err = getDefaultConfPath() + if err != nil { + panic(err.Error()) + } } - confPath, err = getConfFilePath() + trackers, err = getTrackers() if err != nil { panic(err.Error()) } - confLines, err = readConfLines(confPath) + confLines, err = readConfLines(conf_path) if err != nil { panic(err.Error()) } - err = updateConfFile(confPath, confLines, trackers) + err = updateConfFile(conf_path, confLines, trackers) if err != nil { panic(err.Error()) }