diff --git a/vtqe/cmd.go b/vtqe/cmd.go deleted file mode 100644 index 5e50199..0000000 --- a/vtqe/cmd.go +++ /dev/null @@ -1,9 +0,0 @@ -package main - -import ( - "Victorique/vtqe/tools" -) - -func main() { - tools.Maincmd.Execute() -} diff --git a/vtqe/main.go b/vtqe/main.go new file mode 100644 index 0000000..6952004 --- /dev/null +++ b/vtqe/main.go @@ -0,0 +1,17 @@ +package main + +import ( + "github.com/spf13/cobra" +) + +// Vtqe is my own toolbox + +var cmdMain = &cobra.Command{ + Short: "Victorique Wisdom ToolBox", + Long: "中二的工具箱:未来を照らし出せ!", + Version: "v1.0.0 NG", +} + +func main() { + cmdMain.Execute() +} diff --git a/vtqe/tools/tcping.go b/vtqe/tcping.go similarity index 98% rename from vtqe/tools/tcping.go rename to vtqe/tcping.go index b72f2f7..9eb5c14 100644 --- a/vtqe/tools/tcping.go +++ b/vtqe/tcping.go @@ -1,16 +1,14 @@ -package tools +package main import ( "fmt" "os" "os/signal" + "strconv" "syscall" + "tcping/ping" "time" - "strconv" - - "victorique/vtqe/tools/ping" - "github.com/spf13/cobra" ) @@ -30,6 +28,10 @@ var ( dnsServer []string ) +func init() { + cmdMain.AddCommand(tcpingcmd) +} + var tcpingcmd = &cobra.Command{ Use: "tcping", Short: "tcp ping", @@ -176,7 +178,3 @@ func init() { tcpingcmd.Flags().StringArrayVarP(&dnsServer, "dns-server", "D", nil, `使用自定义DNS服务器`) } - -func init() { - Maincmd.AddCommand(tcpingcmd) -} diff --git a/vtqe/tools/attach.go b/vtqe/tools/attach.go deleted file mode 100644 index 0981774..0000000 --- a/vtqe/tools/attach.go +++ /dev/null @@ -1,46 +0,0 @@ -package tools - -import ( - "fmt" - - "b612.me/starainrt" - "b612.me/starlog" - "github.com/spf13/cobra" -) - -var attachcmd = &cobra.Command{ - Use: "attach", - Short: "合并两个文件", - Long: "合并两个文件", - Run: func(this *cobra.Command, args []string) { - var src, dst, out string - if len(args) == 3 { - src = args[0] - dst = args[1] - out = args[2] - } else { - src, _ = this.Flags().GetString("src") - dst, _ = this.Flags().GetString("dst") - out, _ = this.Flags().GetString("out") - } - if src == "" || dst == "" { - starlog.Criticalln("ERROR PATH") - this.Help() - return - } - cryp := new(starainrt.StarCrypto) - err := cryp.Attach(src, dst, out) - if err != nil { - starlog.Criticalln(err.Error) - } else { - fmt.Println("完成") - } - }, -} - -func init() { - attachcmd.Flags().StringP("src", "s", "", "源文件路径") - attachcmd.Flags().StringP("dst", "d", "", "目标文件路径") - attachcmd.Flags().StringP("out", "o", "", "输出文件路径") - Maincmd.AddCommand(attachcmd) -} diff --git a/vtqe/tools/base64.go b/vtqe/tools/base64.go deleted file mode 100644 index 0b7666b..0000000 --- a/vtqe/tools/base64.go +++ /dev/null @@ -1,61 +0,0 @@ -package tools - -import ( - "fmt" - - "b612.me/starainrt" - "b612.me/starlog" - "github.com/spf13/cobra" -) - -var b64cmd = &cobra.Command{ - Use: "base64", - Short: "使用base64处理文件或字符串", - Long: "使用base64处理文件或字符串", - Run: func(this *cobra.Command, args []string) { - var err error - ok, _ := this.Flags().GetBool("file") - de, _ := this.Flags().GetBool("decode") - if len(args) != 1 { - starlog.Criticalln("参数不足,请输入文件地址或字符串") - this.Help() - return - } - shell := func(pect float64) { - if pect == 100 { - fmt.Println("已处理:100.000000%") - } else { - fmt.Printf("已处理:%f%%\r", pect) - } - } - cry := new(starainrt.StarCrypto) - if ok { - path, _ := this.Flags().GetString("path") - if !de { - err = cry.Base64EncodeFile(args[0], path, shell) - } else { - err = cry.Base64DecodeFile(args[0], path, shell) - } - } else { - if !de { - data := cry.Base64Encode([]byte(args[0])) - fmt.Println(data) - } else { - var data []byte - data, err = cry.Base64Decode(args[0]) - fmt.Println(string(data)) - } - } - if err != nil { - starlog.Criticalln(err) - return - } - }, -} - -func init() { - b64cmd.Flags().BoolP("file", "f", false, "base64处理文件") - b64cmd.Flags().StringP("path", "p", "./b64.encode", "指定处理地址,默认为./b64.encode") - b64cmd.Flags().BoolP("decode", "d", false, "base64解码") - Maincmd.AddCommand(b64cmd) -} diff --git a/vtqe/tools/cd.go b/vtqe/tools/cd.go deleted file mode 100644 index 9f2fb4e..0000000 --- a/vtqe/tools/cd.go +++ /dev/null @@ -1,47 +0,0 @@ -// +build windows - -package tools - -import ( - "bufio" - "fmt" - "os" - "os/exec" - "path/filepath" - - "b612.me/starainrt" - - "github.com/spf13/cobra" -) - -var cdcmd = &cobra.Command{ - Use: "cd", - Short: "便捷进入文件夹", - Long: "使用stdin便捷进入文件夹", - Run: func(this *cobra.Command, args []string) { - fileInfo, _ := os.Stdin.Stat() - if (fileInfo.Mode() & os.ModeNamedPipe) != os.ModeNamedPipe { - fmt.Println(args) - if len(args) != 0 { - os.Exit(1) - } else { - exec.Command("cmd.exe", "/c", "explorer "+filepath.Dir(args[0])).Run() - return - } - } - s := bufio.NewScanner(os.Stdin) - for s.Scan() { - dir := s.Text() - if starainrt.IsFile(dir) { - exec.Command("cmd.exe", "/c", "explorer /n,/select,"+dir).Run() - } else { - exec.Command("cmd.exe", "/c", "explorer "+dir).Run() - } - return - } - }, -} - -func init() { - Maincmd.AddCommand(cdcmd) -} diff --git a/vtqe/tools/cmd.go b/vtqe/tools/cmd.go deleted file mode 100644 index 17176e4..0000000 --- a/vtqe/tools/cmd.go +++ /dev/null @@ -1,19 +0,0 @@ -package tools - -import ( - "github.com/spf13/cobra" -) - -var Version string = "0.1.25" - -var Maincmd = &cobra.Command{ - Use: "", - Short: "Victorique's Small Smart Toolkit", - Long: "Victorique's Small Smart Toolkit", -} - -func init() { - cobra.MousetrapHelpText = "" - Maincmd.Flags().BoolP("version", "v", false, "查看版本号") - Maincmd.Version = Version -} diff --git a/vtqe/tools/curl.go b/vtqe/tools/curl.go deleted file mode 100644 index 715df07..0000000 --- a/vtqe/tools/curl.go +++ /dev/null @@ -1,212 +0,0 @@ -package tools - -import ( - "fmt" - "io/ioutil" - "net/http" - "strings" - - "b612.me/starainrt" - - "github.com/spf13/cobra" -) - -var curlcmd = &cobra.Command{ - Use: "curl", - Short: "Curl工具", - Long: "Curl小工具", - Run: func(this *cobra.Command, args []string) { - var method string - var err error - var data []byte - o, _ := this.Flags().GetString("output") - d, _ := this.Flags().GetString("data") - f, _ := this.Flags().GetString("file") - h, _ := this.Flags().GetString("header") - c, _ := this.Flags().GetString("cookie") - b, _ := this.Flags().GetString("cookie-jar") - i, _ := this.Flags().GetBool("include") - x, _ := this.Flags().GetString("proxy") - m, _ := this.Flags().GetInt("max-time") - ua, _ := this.Flags().GetString("user-agent") - connecttimeout, _ := this.Flags().GetInt("connect-timeout") - if len(args) != 1 { - this.Help() - return - } - url := args[0] - shell := func(pect float64) { - if pect == 100 { - fmt.Println("已完成:100.000000%") - } else { - fmt.Printf("已完成:%f%%\r", pect) - } - } - var postdata map[string]string - if d != "" { - postdata = make(map[string]string) - strip := strings.Split(d, "&") - for _, v := range strip { - tmp := strings.Split(v, "=") - if len(tmp) != 2 { - continue - } - postdata[tmp[0]] = tmp[1] - } - } - if len(d) == 0 { - method = "GET" - } else { - method = "POST" - } - tmp := strings.Split(f, ",") - curl := starainrt.NewStarCurl() - curl.TimeOut = m - curl.DialTimeOut = connecttimeout - curl.ReqHeader.Set("User-Agent", "Victorique - B612.ME") - if ua != "" { - curl.ReqHeader.Set("User-Agent", ua) - } - if x != "" { - curl.Proxy = x - } - if h != "" { - head := strings.Split(h, ",") - for _, v := range head { - hp := strings.Split(v, ":") - if len(hp) != 2 { - continue - } - curl.ReqHeader.Set(hp[0], hp[1]) - } - } - if c != "" { - if starainrt.Exists(c) { - ck, err := ioutil.ReadFile(c) - if err != nil { - fmt.Println(err) - return - } - h = strings.TrimSpace(string(ck)) - } - cook := strings.Split(h, ",") - for _, v := range cook { - hp := strings.Split(v, "=") - if len(hp) != 2 { - continue - } - curl.ReqCookies = append(curl.ReqCookies, &http.Cookie{Name: hp[0], Value: hp[1]}) - } - - } - if len(tmp) != 2 && f != "" { - fmt.Println("对file应使用逗号分隔区分文件名和路径") - return - } - if o != "" { - if f != "" { - _, err = curl.CurlWithFile(url, postdata, tmp[0], tmp[1], o, true, shell) - - } else { - err = curl.CurlDataToFile(url, []byte(d), method, o, shell) - - } - if err != nil { - fmt.Println(err) - } - if i { - for k, v := range curl.RespHeader { - for _, v2 := range v { - fmt.Println(k + ":" + v2) - } - } - fmt.Println("\n") - var cookiewriter string - for _, v := range curl.RespCookies { - fmt.Println(v.Name + ":" + v.Value) - if b != "" { - cookiewriter += v.Name + ":" + v.Value + "," - } - } - fmt.Println("\n\n") - if b != "" { - ioutil.WriteFile(b, []byte(cookiewriter), 0755) - } - } - } else { - if f != "" { - data, err = curl.CurlWithFile(url, postdata, tmp[0], tmp[1], "", false, shell) - - } else { - data, err = curl.Curl(url, []byte(d), method) - } - if i { - for k, v := range curl.RespHeader { - for _, v2 := range v { - fmt.Println(k + ":" + v2) - } - } - fmt.Println("\n") - var cookiewriter string - for _, v := range curl.RespCookies { - fmt.Println(v.Name + ":" + v.Value) - if b != "" { - cookiewriter += v.Name + ":" + v.Value + "," - } - } - fmt.Println("\n\n") - if b != "" { - ioutil.WriteFile(b, []byte(cookiewriter), 0755) - } - } - fmt.Println(string(data)) - if err != nil { - fmt.Println(err) - } - } - }, -} - -func init() { - Maincmd.AddCommand(curlcmd) - curlcmd.Flags().StringP("output", "o", "", "写入文件而不是标准输出") - curlcmd.Flags().StringP("data", "d", "", "http postdata数据") - curlcmd.Flags().StringP("file", "f", "", "上传文件的地址") - curlcmd.Flags().StringP("header", "H", "", "使用的header") - curlcmd.Flags().StringP("cookie", "b", "", "使用的cookie") - curlcmd.Flags().StringP("cookie-jar", "c", "", "写入返回的cookie到文件中") - curlcmd.Flags().BoolP("include", "i", false, "显示返回的header与cookie") - curlcmd.Flags().StringP("proxy", "x", "", "使用代理") - curlcmd.Flags().IntP("max-time", "m", 0, "最大传输超时时间") - curlcmd.Flags().Int("connect-timeout", 15, "最大连接建立超时时间") - curlcmd.Flags().StringP("user-agent", "A", "", "UA设置") - curlupcmd.Flags().StringP("address", "a", "", "远端ip:端口号") - curlcmd.AddCommand(curlupcmd) -} - -var curlupcmd = &cobra.Command{ - Use: "upload", - Short: "victorique上传工具", - Long: "victorique上传工具", - Run: func(this *cobra.Command, args []string) { - if len(args) != 1 { - fmt.Println(args, "不合法啊") - return - } - a, _ := this.Flags().GetString("address") - curl := starainrt.NewStarCurl() - curl.TimeOut = 0 - shell := func(pect float64) { - if pect == 100 { - fmt.Println("已完成:100.000000%") - } else { - fmt.Printf("已完成:%f%%\r", pect) - } - } - data, err := curl.CurlWithFile("http://"+a+"/vtqeupload1127", nil, "victorique", args[0], "", false, shell) - fmt.Println(string(data)) - if err != nil { - fmt.Println(err) - } - }, -} diff --git a/vtqe/tools/detach.go b/vtqe/tools/detach.go deleted file mode 100644 index f603aac..0000000 --- a/vtqe/tools/detach.go +++ /dev/null @@ -1,48 +0,0 @@ -package tools - -import ( - "fmt" - - "b612.me/starainrt" - "b612.me/starlog" - "github.com/spf13/cobra" -) - -var detachcmd = &cobra.Command{ - Use: "detach", - Short: "分离两个文件", - Long: "分离两个文件", - Run: func(this *cobra.Command, args []string) { - var src, dst, out string - if len(args) == 3 { - src = args[0] - dst = args[1] - out = args[2] - } else { - src, _ = this.Flags().GetString("src") - dst, _ = this.Flags().GetString("dst") - out, _ = this.Flags().GetString("out") - } - num, _ := this.Flags().GetInt("num") - if src == "" || dst == "" { - starlog.Criticalln("ERROR PATH") - this.Help() - return - } - cryp := new(starainrt.StarCrypto) - err := cryp.Detach(src, num, dst, out) - if err != nil { - starlog.Criticalln(err.Error) - } else { - fmt.Println("完成") - } - }, -} - -func init() { - detachcmd.Flags().StringP("src", "s", "", "源文件路径") - detachcmd.Flags().StringP("dst", "d", "", "目标文件路径1") - detachcmd.Flags().StringP("out", "o", "", "目标文件路径2") - detachcmd.Flags().IntP("num", "n", 0, "分割开始字节") - Maincmd.AddCommand(detachcmd) -} diff --git a/vtqe/tools/ftp.go b/vtqe/tools/ftp.go deleted file mode 100644 index b571145..0000000 --- a/vtqe/tools/ftp.go +++ /dev/null @@ -1,50 +0,0 @@ -package tools - -import ( - "log" - "path/filepath" - - filedriver "github.com/goftp/file-driver" - "github.com/goftp/server" - "github.com/spf13/cobra" -) - -var ports int -var username, pwd string - -// ftpCmd represents the ftp command -var ftpcmd = &cobra.Command{ - Use: "ftp", - Short: `FTP文件服务器`, - Long: `FTP文件服务器`, - Run: func(cmd *cobra.Command, args []string) { - path, _ = filepath.Abs(path) - factory := &filedriver.FileDriverFactory{ - RootPath: path, - Perm: server.NewSimplePerm("user", "group"), - } - opts := &server.ServerOpts{ - Factory: factory, - Port: ports, - Hostname: ip, - Auth: &server.SimpleAuth{Name: username, Password: pwd}, - } - - log.Printf("Starting ftp server on %v:%v", opts.Hostname, opts.Port) - log.Printf("Username %v, Password %v", username, pwd) - server := server.NewServer(opts) - err := server.ListenAndServe() - if err != nil { - log.Fatal("Error starting server:", err) - } - }, -} - -func init() { - Maincmd.AddCommand(ftpcmd) - ftpcmd.Flags().IntVarP(&ports, "port", "p", 21, "监听端口") - ftpcmd.Flags().StringVarP(&ip, "ip", "i", "0.0.0.0", "监听地址") - ftpcmd.Flags().StringVarP(&username, "user", "u", "1", "用户名,默认为1") - ftpcmd.Flags().StringVarP(&pwd, "pwd", "k", "1", "密码,默认为1") - ftpcmd.Flags().StringVarP(&path, "folder", "f", "./", "本地文件地址") -} diff --git a/vtqe/tools/generate.go b/vtqe/tools/generate.go deleted file mode 100644 index f23d5f7..0000000 --- a/vtqe/tools/generate.go +++ /dev/null @@ -1,53 +0,0 @@ -package tools - -import ( - "fmt" - "os" - "time" - - "b612.me/starainrt" - "github.com/spf13/cobra" -) - -var gencmd = &cobra.Command{ - Use: "generate", - Short: "生成随机文件", - Long: "生成指定大小的随机文件", - Run: func(this *cobra.Command, args []string) { - sum, _ := this.Flags().GetInt("sum") - num, _ := this.Flags().GetInt("num") - cap, _ := this.Flags().GetInt("cap") - if len(args) != 1 { - this.Help() - return - } - if num <= 0 { - fmt.Println("num不合法,不应该小于1!") - os.Exit(2) - } - if sum <= 0 { - fmt.Println("sum不合法,不应该小于1!") - os.Exit(2) - } - if cap <= 0 { - fmt.Println("cap不合法,不应该小于1!") - os.Exit(2) - } - err := starainrt.FillWithRandom(args[0], num, cap, sum, func(pect float64) { - fmt.Printf("文件已处理:%f%%\r", pect) - }) - if err != nil { - fmt.Println("err:" + err.Error()) - } - fmt.Println("文件已处理:100.0000000%") - time.Sleep(time.Millisecond * 10) - }, -} - -func init() { - gencmd.Flags().IntP("sum", "s", 3, "随机的种子组数") - gencmd.Flags().IntP("num", "n", 1024, "生成的文件大小") - gencmd.Flags().IntP("cap", "c", 1048576, "bufcap大小") - gencmd.MarkFlagRequired("num") - Maincmd.AddCommand(gencmd) -} diff --git a/vtqe/tools/hash.go b/vtqe/tools/hash.go deleted file mode 100644 index cd68a4c..0000000 --- a/vtqe/tools/hash.go +++ /dev/null @@ -1,71 +0,0 @@ -package tools - -import ( - "fmt" - "os" - - "b612.me/starainrt" - - "b612.me/starlog" - "github.com/spf13/cobra" -) - -var hashcmd = &cobra.Command{ - Use: "hash", - Short: "多种方法哈希值校验", - Long: "进行多种方法哈希值校验", - Run: func(this *cobra.Command, args []string) { - var cumethod, method []string - var result map[string]string - var err error - crypto := new(starainrt.StarCrypto) - cumethod = []string{"md5", "crc32", "sha512", "sha384", "sha256", "sha224", "sha1"} - if ok, _ := this.Flags().GetBool("all"); ok { - method = cumethod - } else { - if len(args) == 0 { - this.Usage() - os.Exit(1) - } - - for _, v := range cumethod { - if ok, _ := this.Flags().GetBool(v); ok { - method = append(method, v) - } - } - if len(method) == 0 { - method = append(method, "md5") - } - } - if ok, _ := this.Flags().GetBool("file"); ok { - result, err = crypto.FileSumAll(args[0], method, func(pect float64) { - if pect != 100.0 { - fmt.Printf("校验已完成:%f%%\r", pect) - } else { - fmt.Printf("校验已完成:%f%%\n", pect) - } - }) - } else { - result, err = crypto.SumAll([]byte(args[0]), method) - } - if err != nil { - starlog.Criticalln("错误:" + err.Error()) - } - for _, v := range method { - fmt.Printf("%s:%s\n", v, result[v]) - } - }, -} - -func init() { - hashcmd.Flags().BoolP("all", "a", false, "使用所有的校验方法") - hashcmd.Flags().BoolP("file", "f", false, "对指定文件进行校验") - hashcmd.Flags().BoolP("md5", "m", false, "进行MD5校验(默认)") - hashcmd.Flags().BoolP("crc32", "c", false, "进行CRC32校验") - hashcmd.Flags().BoolP("sha512", "s", false, "进行SHA512校验") - hashcmd.Flags().Bool("sha384", false, "进行SHA384校验") - hashcmd.Flags().Bool("sha256", false, "进行SHA256校验") - hashcmd.Flags().Bool("sha224", false, "进行SHA224校验") - hashcmd.Flags().Bool("sha1", false, "进行SHA1校验") - Maincmd.AddCommand(hashcmd) -} diff --git a/vtqe/tools/http.go b/vtqe/tools/http.go deleted file mode 100644 index 715f36a..0000000 --- a/vtqe/tools/http.go +++ /dev/null @@ -1,331 +0,0 @@ -package tools - -import ( - "encoding/base64" - "fmt" - "io" - "io/ioutil" - "net/http" - "os" - "path/filepath" - "strconv" - "strings" - - "b612.me/starainrt" - - "b612.me/starlog" - - "github.com/spf13/cobra" -) - -var port, ip, path string -var up bool -var basicAuth, certKey string - -type TraceHandler struct { - h http.Handler -} - -func init() { - httpcmd.Flags().StringVarP(&port, "port", "p", "80", "监听端口") - httpcmd.Flags().StringVarP(&ip, "ip", "i", "0.0.0.0", "监听ip") - httpcmd.Flags().StringVarP(&path, "folder", "f", "./", "本地文件地址") - httpcmd.Flags().BoolVarP(&up, "upload", "u", false, "是否开启文件上传") - httpcmd.Flags().StringVarP(&basicAuth, "auth", "a", "", "HTTP BASIC AUTH认证(用户名:密码)") - httpcmd.Flags().StringVarP(&certKey, "cert", "c", "", "TLS证书路径,用:分割证书与密钥") - Maincmd.AddCommand(httpcmd) -} - -// httpCmd represents the http command -var httpcmd = &cobra.Command{ - Use: "http", - Short: "HTTP文件服务器", - Long: `HTTP文件服务器`, - Run: func(cmd *cobra.Command, args []string) { - var err error - http.HandleFunc("/", httplisten) - path, _ = filepath.Abs(path) - starlog.Infoln("Listening On Port:" + port) - if up { - starlog.Infoln("upload is openned,path is /vtqeupload1127") - http.HandleFunc("/vtqeupload1127", uploadfile) - } - if certKey == "" { - err = http.ListenAndServe(ip+":"+port, nil) - } else { - certs := strings.Split(certKey, ":") - if len(certs) != 2 { - starlog.Criticalln("证书不正确!") - return - } - err = http.ListenAndServeTLS(ip+":"+port, certs[0], certs[1], nil) - } - if err != nil { - starlog.Criticalln("Error:" + err.Error()) - } - }, -} - -func uploadfile(w http.ResponseWriter, r *http.Request) { - if r.Method != "POST" { - w.Write([]byte("USE POST METHOD!")) - return - } - r.ParseMultipartForm(10485760) - file, handler, err := r.FormFile("victorique") - if err != nil { - starlog.Errorln(err) - w.WriteHeader(502) - w.Write([]byte(err.Error())) - return - } - defer file.Close() - starlog.Noticef("Upload %s From %s\n", handler.Filename, r.RemoteAddr) - fmt.Fprintf(w, `

%v

Return To Web Page

`, handler.Header) - os.Mkdir("./vtqeupload1127", 0755) - f, err := os.OpenFile("./vtqeupload1127/"+handler.Filename, os.O_WRONLY|os.O_CREATE, 0755) - if err != nil { - starlog.Errorln(err) - return - } - defer f.Close() - io.Copy(f, file) -} - -func httplisten(w http.ResponseWriter, r *http.Request) { - log := starlog.Std.NewFlag() - w.Header().Set("Server", "Vicorique") - w.Header().Set("Powered", "B612.ME") - write401 := func() { - w.Header().Set("WWW-Authenticate", ` Basic realm="Please Enter Passwd"`) - w.WriteHeader(401) - w.Write([]byte(` - - 401 Authorization Required - -

401 Authorization Required

-
B612 HTTP SERVER
- - `)) - } - if basicAuth != "" { - authHeader := strings.TrimSpace(r.Header.Get("Authorization")) - if len(authHeader) == 0 { - log.Noticeln("No Authed! Get Path is", r.URL.Path, r.RemoteAddr) - write401() - return - } else { - userAuth := base64.StdEncoding.EncodeToString([]byte(basicAuth)) - authStr := strings.Split(authHeader, " ") - if strings.TrimSpace(authStr[1]) != userAuth { - log.Noticeln("Auth Failed! Get Path is", r.URL.Path, r.RemoteAddr, "pwd enter is", authHeader) - write401() - return - } - } - } - p := r.URL.Path - cmd := r.URL.Query()["cmd"] - log.Noticeln("Get " + p + " " + r.RemoteAddr) - fullpath, _ := filepath.Abs(path + p) - - if p == "/" { - ReadFolder(w, r, fullpath, true) - return - } - if up { - if p == "/vtqeupload1127/web" { - w.Write([]byte(`
-

B612 File Upload Page

-

上传文件:

- -
-

Copyright@b612.me

`)) - return - } - } - if !starainrt.Exists(fullpath) { - w.WriteHeader(404) - if len(cmd) != 0 { - if cmd[0] == "header" { - for k, v := range r.Header { - for _, v2 := range v { - fmt.Fprintf(w, "%s:%s\n", k, v2) - } - } - } - } - w.Write([]byte("

404 NOT FOUND

")) - return - } - if starainrt.IsFolder(fullpath) { - ReadFolder(w, r, fullpath, false) - return - } - fpdst, err := os.Open(fullpath) - if err != nil { - log.Errorln(err) - w.WriteHeader(403) - w.Write([]byte("

403 NO ACCESS

")) - return - } - fpinfo, _ := os.Stat(fullpath) - name := filepath.Base(fullpath) - tmp := strings.Split(name, ".") - ext := "" - if len(tmp) >= 2 { - ext = strings.ToLower(tmp[len(tmp)-1]) - } - switch ext { - case "jpeg", "jpg", "jpe": - w.Header().Set("Content-Type", "image/jpeg") - case "mpeg", "mpg", "mkv": - w.Header().Set("Content-Type", "video/mpeg") - case "mp4": - w.Header().Set("Content-Type", "video/mp4") - case "pdf": - w.Header().Set("Content-Type", "application/pdf") - default: - w.Header().Set("Content-Type", "application/download") - w.Header().Set("Content-Disposition", "attachment;filename="+name) - } - etag := new(starainrt.StarCrypto).MD5([]byte(fpinfo.ModTime().String())) - w.Header().Set("Content-Transfer-Encoding", "binary") - w.Header().Set("Accept-Ranges", "bytes") - w.Header().Set("ETag", etag) - w.Header().Set("Last-Modified", strings.ReplaceAll(fpinfo.ModTime().UTC().Format("Mon, 2 Jan 2006 15:04:05 MST"), "UTC", "GMT")) - isRange := false - var rangeStart, rangeEnd int64 - rangeEnd = -1 - for k, v := range r.Header { - if strings.ToLower(k) == "range" { - if strings.Index(v[0], "bytes=") < 0 { - break - } - v[0] = strings.Replace(v[0], "bytes=", "", -1) - data := strings.Split(v[0], "-") - if len(data) == 0 { - break - } - rangeStart, _ = strconv.ParseInt(data[0], 10, 64) - if len(data) == 2 { - rangeEnd, _ = strconv.ParseInt(data[1], 10, 64) - } - //w.WriteHeader(206) //206 支持断点续传 - isRange = true - break - } - } - defer fpdst.Close() - var transferData int - if !isRange { - w.Header().Set("Content-Length", strconv.FormatInt(fpinfo.Size(), 10)) - w.WriteHeader(200) - for { - buf := make([]byte, 1048576) - n, err := fpdst.Read(buf) - if n != 0 { - ns, err := w.Write(buf[0:n]) - transferData += ns - if err != nil { - starlog.Errorln("Transfer Error:", err) - } - } - if err != nil { - if err == io.EOF { - break - } - break - } - } - } else { - w.Header().Set("Content-Length", strconv.FormatInt(fpinfo.Size(), 10)) - if rangeEnd == -1 { - w.Header().Set("Content-Range", `bytes `+strconv.FormatInt(rangeStart, 10)+"-"+strconv.FormatInt(fpinfo.Size(), 10)+"/"+strconv.FormatInt(fpinfo.Size(), 10)) - //w.Header().Set("Content-Length", strconv.FormatInt(fpinfo.Size()-rangeStart, 10)) - } else { - w.Header().Set("Content-Range", `bytes `+strconv.FormatInt(rangeStart, 10)+"-"+strconv.FormatInt(rangeEnd, 10)+"/"+strconv.FormatInt(fpinfo.Size(), 10)) - //w.Header().Set("Content-Length", strconv.FormatInt(1+rangeEnd-rangeStart, 10)) - } - w.WriteHeader(206) - fpdst.Seek(int64(rangeStart), 0) - count := rangeStart - for { - buf := make([]byte, 1048576) - n, err := fpdst.Read(buf) - if err != nil { - if err == io.EOF { - break - } - return - } - if rangeEnd == -1 { - ns, err := w.Write(buf[0:n]) - transferData += ns - if err != nil { - starlog.Errorln("Transfer Error:", err) - } - } else { - if count > rangeEnd { - break - } - if count+int64(n) > rangeEnd { - w.Write(buf[0 : rangeEnd-count+1]) - break - } else { - ns, err := w.Write(buf[0:n]) - transferData += ns - if err != nil { - starlog.Errorln("Transfer Error:", err) - } - count += int64(n) - } - } - } - } - var tani string - tani = fmt.Sprintf("%v Byte", transferData) - if f64 := float64(transferData) / 1024; f64 > 1 { - tani = fmt.Sprintf("%v KB", f64) - if f64 = float64(f64) / 1024; f64 > 1 { - tani = fmt.Sprintf("%v MB", f64) - if f64 = float64(f64) / 1024; f64 > 1 { - tani = fmt.Sprintf("%v GB", f64) - } - } - } - log.Infoln(fpinfo.Name(), "客户端下载已结束,共传输大小:"+tani) -} - -func ReadFolder(w http.ResponseWriter, r *http.Request, fullpath string, isroot bool) { - dir, err := ioutil.ReadDir(fullpath) - if err != nil { - starlog.Errorln(err) - w.WriteHeader(403) - w.Write([]byte("

May Cannot Access!

")) - } - w.Write([]byte("\n\n

B612 Http Server - " + Version + "

")) - if up { - w.Write([]byte("Upload Web Page Is Openned!

")) - } - w.Write([]byte("
\n"))
-	if r.URL.Path == "/" {
-		r.URL.Path = ""
-	} else if r.URL.Path[len(r.URL.Path)-1:] == "/" {
-		r.URL.Path = r.URL.Path[0 : len(r.URL.Path)-1]
-	}
-	if !isroot {
-		w.Write([]byte(fmt.Sprintf("

%s %s

\n", r.URL.Path+"/..", "..", "上层文件夹"))) - } - for _, v := range dir { - if v.Name() != "." || v.Name() != ".." { - if !v.IsDir() { - w.Write([]byte(fmt.Sprintf("

%s %d %s

\n", r.URL.Path+"/"+v.Name(), v.Name(), int(v.Size()), v.ModTime().Format("2006-01-02 15:04:05")))) - } else { - w.Write([]byte(fmt.Sprintf("

%s %s %s

\n", r.URL.Path+"/"+v.Name(), v.Name(), "文件夹", v.ModTime().Format("2006-01-02 15:04:05")))) - } - } - } - w.Write([]byte("
\n")) - return -} diff --git a/vtqe/tools/image-basic.go b/vtqe/tools/image-basic.go deleted file mode 100644 index 93764fa..0000000 --- a/vtqe/tools/image-basic.go +++ /dev/null @@ -1,194 +0,0 @@ -package tools - -import ( - "errors" - "image" - "io/ioutil" - "os" - - "github.com/golang/freetype" - - "github.com/nfnt/resize" - - "image/color" - "image/draw" - _ "image/gif" - _ "image/jpeg" - "image/png" - _ "image/png" - - "b612.me/starainrt" -) - -func OpenImage(name string) (image.Image, error) { - if !starainrt.Exists(name) { - return nil, errors.New("File Not Exists") - } - fso, err := os.Open(name) - if err != nil { - return nil, err - } - img, _, err := image.Decode(fso) - if err != nil { - return nil, err - } - return img, nil -} - -func MergePhoto(big, small image.Image, bigsize, smallsize uint, x, y int) image.Image { - big = resize.Resize(bigsize, bigsize, big, resize.Lanczos3) - small = resize.Resize(smallsize, smallsize, small, resize.Lanczos3) - offset := image.Pt(x, y) - b := big.Bounds() - nimg := image.NewRGBA(b) - draw.Draw(nimg, b, big, image.ZP, draw.Src) - draw.Draw(nimg, small.Bounds(), small, offset, draw.Over) - return nimg -} - -func SavePhoto(path string, img image.Image) error { - imgf, err := os.Create(path) - if err != nil { - return err - } - defer imgf.Close() - return png.Encode(imgf, img) -} - -func SetAlpha(img image.Image, alpha uint8) image.Image { - size := img.Bounds() - nimg := image.NewRGBA(size) - for x := 0; x < size.Dx(); x++ { - for y := 0; y < size.Dy(); y++ { - r, g, b, a := img.At(x, y).RGBA() - r = r >> 8 - g = g >> 8 - b = b >> 8 - a = a >> 8 - nimg.Set(x, y, color.NRGBA{uint8(r), uint8(g), uint8(b), alpha}) - //nimg.Set(x, y, color.Alpha{alpha}) - //nimg.Set(x, y, img.At(x, y)) - } - } - return nimg -} - -func AddText(text string, img image.Image, x, y int, dpi, size float64, colors color.RGBA, ttf string) (image.Image, error) { - if !starainrt.Exists(ttf) { - return nil, errors.New("File Not Exists") - } - fontbyte, err := ioutil.ReadFile(ttf) - if err != nil { - return nil, err - } - font, err := freetype.ParseFont(fontbyte) - if err != nil { - return nil, err - } - nimg, ok := img.(draw.Image) - if !ok { - size := img.Bounds() - nimg = image.NewRGBA(img.Bounds()) - for x := 0; x < size.Dx(); x++ { - for y := 0; y < size.Dy(); y++ { - r, g, b, a := img.At(x, y).RGBA() - nimg.Set(x, y, color.NRGBA{uint8(r), uint8(g), uint8(b), uint8(a)}) - } - } - } - f := freetype.NewContext() - f.SetDPI(dpi) - f.SetFontSize(size) - f.SetFont(font) - f.SetClip(nimg.Bounds()) - f.SetDst(nimg) - f.SetSrc(image.NewUniform(colors)) - _, err = f.DrawString(text, freetype.Pt(x, y)) - if err != nil { - return nil, err - } - return nimg, nil -} - -type TextImg struct { - Text string - X int - Y int - Dpi float64 - Size float64 - Color color.NRGBA -} - -type TextList struct { - List []TextImg - TTF []byte -} - -func AddListTests(list TextList, img image.Image) (image.Image, error) { - font, err := freetype.ParseFont(list.TTF) - if err != nil { - return nil, err - } - nimg, ok := img.(draw.Image) - if !ok { - size := img.Bounds() - nimg = image.NewRGBA(img.Bounds()) - for x := 0; x < size.Dx(); x++ { - for y := 0; y < size.Dy(); y++ { - r, g, b, a := img.At(x, y).RGBA() - nimg.Set(x, y, color.NRGBA{uint8(r), uint8(g), uint8(b), uint8(a)}) - } - } - } - for _, v := range list.List { - f := freetype.NewContext() - f.SetDPI(v.Dpi) - f.SetFontSize(v.Size) - f.SetFont(font) - f.SetClip(nimg.Bounds()) - f.SetDst(nimg) - f.SetSrc(image.NewUniform(v.Color)) - _, err = f.DrawString(v.Text, freetype.Pt(v.X, v.Y)) - if err != nil { - return nil, err - } - } - return nimg, nil -} - -func AddTexts(text string, img image.Image, x, y int, dpi, size float64, colors color.NRGBA, ttf string) (image.Image, error) { - if !starainrt.Exists(ttf) { - return nil, errors.New("File Not Exists") - } - fontbyte, err := ioutil.ReadFile(ttf) - if err != nil { - return nil, err - } - font, err := freetype.ParseFont(fontbyte) - if err != nil { - return nil, err - } - nimg, ok := img.(draw.Image) - if !ok { - size := img.Bounds() - nimg = image.NewRGBA(img.Bounds()) - for x := 0; x < size.Dx(); x++ { - for y := 0; y < size.Dy(); y++ { - r, g, b, a := img.At(x, y).RGBA() - nimg.Set(x, y, color.NRGBA{uint8(r), uint8(g), uint8(b), uint8(a)}) - } - } - } - f := freetype.NewContext() - f.SetDPI(dpi) - f.SetFontSize(size) - f.SetFont(font) - f.SetClip(nimg.Bounds()) - f.SetDst(nimg) - f.SetSrc(image.NewUniform(colors)) - _, err = f.DrawString(text, freetype.Pt(x, y)) - if err != nil { - return nil, err - } - return nimg, nil -} diff --git a/vtqe/tools/image.go b/vtqe/tools/image.go deleted file mode 100644 index 64abe4e..0000000 --- a/vtqe/tools/image.go +++ /dev/null @@ -1,83 +0,0 @@ -package tools - -import ( - "fmt" - "image" - - "b612.me/starlog" - "github.com/spf13/cobra" -) - -func init() { - imageCmd.AddCommand(imgMirrorCmd) - Maincmd.AddCommand(imageCmd) -} - -var imageCmd = &cobra.Command{ - Use: "image", - Short: "图像处理", - Long: "简单的图像处理工具", - Run: func(this *cobra.Command, args []string) { - this.Help() - }, -} - -var imgMirrorCmd = &cobra.Command{ - Use: "mirror", - Short: "图像镜像翻转", - Long: "图像镜像翻转<水平>", - Run: func(this *cobra.Command, args []string) { - if len(args) == 0 { - starlog.Errorln("请指定需要转换的图像!") - return - } - for _, v := range args { - img, err := OpenImage(v) - if err != nil { - starlog.Errorln(err, v) - continue - } - size := img.Bounds() - nimg := image.NewRGBA(size) - for x := 0; x < size.Dx(); x++ { - for y := 0; y < size.Dy(); y++ { - nimg.Set(size.Dx()-x, y, img.At(x, y)) - } - } - if err := SavePhoto(v, nimg); err != nil { - starlog.Errorln(err, v) - continue - } else { - fmt.Println(v, "转换已完成!") - } - } - fmt.Println("任务完成!") - }, -} - -var imgAlpha = &cobra.Command{ - Use: "alpha", - Short: "设置透明度", - Long: "设置alpha通道透明度", - Run: func(this *cobra.Command, args []string) { - if len(args) == 0 { - starlog.Errorln("请指定需要转换的图像!") - return - } - for _, v := range args { - img, err := OpenImage(v) - if err != nil { - starlog.Errorln(err, v) - continue - } - img = SetAlpha(img, 4) - if err := SavePhoto(v, img); err != nil { - starlog.Errorln(err, v) - continue - } else { - fmt.Println(v, "转换已完成!") - } - } - fmt.Println("任务完成!") - }, -} diff --git a/vtqe/tools/merge.go b/vtqe/tools/merge.go deleted file mode 100644 index b9ed571..0000000 --- a/vtqe/tools/merge.go +++ /dev/null @@ -1,48 +0,0 @@ -package tools - -import ( - "fmt" - - "b612.me/starainrt" - "b612.me/starlog" - - "github.com/spf13/cobra" -) - -var mergecmd = &cobra.Command{ - Use: "merge", - Short: "合并文件", - Long: "按路径自动合并分割的文件", - Run: func(this *cobra.Command, args []string) { - var src, dst string - if len(args) == 2 { - src = args[0] - dst = args[1] - } else { - src, _ = this.Flags().GetString("src") - dst, _ = this.Flags().GetString("dst") - } - if src == "" || dst == "" { - this.Help() - return - } - crypto := new(starainrt.StarCrypto) - err := crypto.MergeFile(src, dst, func(pect float64) { - if pect == 100 { - fmt.Println("文件已处理:100.000000%") - } else { - fmt.Printf("文件已处理:%f%%\r", pect) - } - }) - if err != nil { - starlog.Errorln(err.Error) - } - - }, -} - -func init() { - mergecmd.Flags().StringP("src", "s", "", "源文件地址,用*替换文件数字") - mergecmd.Flags().StringP("dst", "d", "", "目标文件地址") - Maincmd.AddCommand(mergecmd) -} diff --git a/vtqe/tools/net.go b/vtqe/tools/net.go deleted file mode 100644 index 8d0d362..0000000 --- a/vtqe/tools/net.go +++ /dev/null @@ -1,807 +0,0 @@ -package tools - -import ( - "fmt" - "io" - "net" - "strconv" - "strings" - "time" - - "github.com/spf13/cobra" -) - -func init() { - Maincmd.AddCommand(netcmd) - netcmd.AddCommand(netforwardcmd, natscmd, natccmd) - netforwardcmd.Flags().BoolP("tcp", "t", false, "TCP转发") - netforwardcmd.Flags().BoolP("udp", "u", false, "UDP转发") - netforwardcmd.Flags().IntP("port", "p", 1127, "转发本地端口") - netforwardcmd.Flags().StringP("address", "a", "0.0.0.0", "监听地址") - - natscmd.Flags().BoolP("tcp", "t", false, "TCP穿透") - natscmd.Flags().BoolP("udp", "u", false, "UDP穿透") - natscmd.Flags().IntP("port", "p", 1127, "监听本地端口开始点") - natscmd.Flags().StringP("key", "k", "sakura", "认证密码") - natscmd.Flags().StringP("address", "a", "0.0.0.0", "监听本地地址") - natscmd.Flags().IntP("number", "n", 1, "监听端口数量") - - natccmd.Flags().BoolP("tcp", "t", false, "TCP穿透") - natccmd.Flags().BoolP("udp", "u", false, "UDP穿透") - natccmd.Flags().IntP("port", "p", 1127, "转发穿透端口") - natccmd.Flags().StringP("key", "k", "sakura", "认证密码") - natccmd.Flags().StringP("address", "a", "127.0.0.1", "转发穿透地址") -} - -var netcmd = &cobra.Command{ - Use: "net", - Short: "端口转发,穿透相关", - Long: "端口转发,穿透相关", -} - -var netforwardcmd = &cobra.Command{ - Use: "forward", - Short: "TCP/UDP端口转发", - Long: "TCP/UDP端口转发", - Run: func(cmd *cobra.Command, args []string) { - t, _ := cmd.Flags().GetBool("tcp") - u, _ := cmd.Flags().GetBool("udp") - p, _ := cmd.Flags().GetInt("port") - a, _ := cmd.Flags().GetString("address") - if len(args) != 1 { - cmd.Help() - return - } - ra := args[0] - if !t && !u { - fmt.Println("请指定TCP或UDP协议") - return - } - - localtcp, err := net.ResolveTCPAddr("tcp", a+":"+strconv.Itoa(p)) - if err != nil { - fmt.Println(err) - return - } - remotetcp, err := net.ResolveTCPAddr("tcp", ra) - if err != nil { - fmt.Println(err) - return - } - localudp, _ := net.ResolveUDPAddr("udp", a+":"+strconv.Itoa(p)) - remoteudp, _ := net.ResolveUDPAddr("udp", ra) - if u { - go UdpForward(localudp, remoteudp) - } - if t { - go TcpForward(localtcp, remotetcp) - } - - for { - time.Sleep(time.Second * 100) - } - }, -} - -var natscmd = &cobra.Command{ - Use: "nats", - Short: "TCP/UDP内网穿透服务端", - Long: "TCP/UDP内网穿透服务端", - Run: func(cmd *cobra.Command, args []string) { - t, _ := cmd.Flags().GetBool("tcp") - u, _ := cmd.Flags().GetBool("udp") - p, _ := cmd.Flags().GetInt("port") - k, _ := cmd.Flags().GetString("key") - a, _ := cmd.Flags().GetString("address") - n, _ := cmd.Flags().GetInt("number") - /*udplocal, err := net.ResolveUDPAddr("udp", a+":"+p) - if err != nil { - fmt.Println(err) - return - } - */ - for i := 0; i < n; i++ { - tcplocal, err := net.ResolveTCPAddr("tcp", a+":"+strconv.Itoa(p+i)) - if err != nil { - fmt.Println(err) - return - } - udplocal, _ := net.ResolveUDPAddr("udp", a+":"+strconv.Itoa(p+i)) - if !t && !u { - fmt.Println("请至少指定一种网络协议!") - return - } - if t { - go TcpNatServer(tcplocal, k) - } - if u { - go UdpNatServer(udplocal, k) - } - } - for { - time.Sleep(time.Second * 10) - } - }, -} - -var natccmd = &cobra.Command{ - Use: "natc", - Short: "TCP/UDP内网穿透客户端", - Long: "TCP/UDP内网穿透客户端", - Run: func(cmd *cobra.Command, args []string) { - t, _ := cmd.Flags().GetBool("tcp") - u, _ := cmd.Flags().GetBool("udp") - p, _ := cmd.Flags().GetInt("port") - k, _ := cmd.Flags().GetString("key") - a, _ := cmd.Flags().GetString("address") - /*udplocal, err := net.ResolveUDPAddr("udp", a+":"+p) - if err != nil { - fmt.Println(err) - return - } - */ - if len(args) != 1 { - cmd.Help() - return - } - if !t && !u { - fmt.Println("请至少指定一种网络协议!") - return - } - tcprmt, err := net.ResolveTCPAddr("tcp", args[0]) - if err != nil { - fmt.Println(err) - return - } - tcpforward, err := net.ResolveTCPAddr("tcp", a+":"+strconv.Itoa(p)) - if err != nil { - fmt.Println(err) - return - } - udprmt, _ := net.ResolveUDPAddr("udp", args[0]) - udpforward, _ := net.ResolveUDPAddr("udp", a+":"+strconv.Itoa(p)) - if t { - go TcpNatClient(tcprmt, tcpforward, k) - } - if u { - go UdpNatClient(udprmt, udpforward, k) - } - for { - time.Sleep(time.Second * 10) - } - }, -} - -type tcpnat struct { - Conn *net.TCPConn - Msg []byte - Date int64 -} - -func UdpNatClient(udpremote, udpforward *net.UDPAddr, pwd string) { - var trueconn *net.UDPConn - var err error - ismain := false - var lastcheck int64 - dialudp := func(udpaddr *net.UDPAddr) (*net.UDPConn, error) { - trueconn, err := net.DialUDP("udp", nil, udpaddr) - if err != nil { - return nil, err - } - return trueconn, nil - } - defer func() { - if err := recover(); err != nil { - fmt.Println("PANIC:", err) - } - }() - for { - trueconn, err = dialudp(udpremote) - if err != nil || trueconn == nil { - time.Sleep(5 * time.Second) - fmt.Println(err) - continue - } - fmt.Println("UDP远端服务器连接成功" + trueconn.RemoteAddr().String()) - trueconn.Write([]byte(pwd)) - go func() { - for !ismain { - time.Sleep(time.Second * 2) - if trueconn != nil { - if ismain { - return - } - _, err := trueconn.Write([]byte(pwd)) - if err != nil { - fmt.Println(err) - return - } - } - } - }() - go func() { - for { - if trueconn == nil { - break - } - var conn1, conn2 *net.UDPConn - buf := make([]byte, 7) - n, err := trueconn.Read(buf) - if n != 7 || err != nil { - fmt.Println(err) - trueconn = nil - ismain = false - fmt.Println("UDP下线01") - break - } - switch string(buf) { - case "yesyesi": - ismain = true - fmt.Println("UDP主节点认证成功") - lastcheck = time.Now().Unix() - go func() { - for { - time.Sleep(time.Second * 2) - if time.Now().Unix()-lastcheck > 4 { - ismain = false - trueconn = nil - fmt.Println("UDP下线02") - return - } - } - }() - case "vicregs": - if trueconn != nil { - trueconn.Write([]byte("vicregs")) - } - lastcheck = time.Now().Unix() - case "newconn": - if !ismain { - trueconn.Close() - break - } - for conn1, err = dialudp(udpforward); err != nil; conn1, err = dialudp(udpforward) { - time.Sleep(time.Second * 2) - } - fmt.Println("UDP已连接转发远端:" + conn1.RemoteAddr().String()) - for conn2, err = dialudp(udpremote); err != nil; conn2, err = dialudp(udpremote) { - time.Sleep(time.Second * 2) - } - conn2.Write([]byte("v%2^f&K")) - fmt.Println("UDP已连接主控远端:" + conn2.RemoteAddr().String()) - go UdpCopy(conn1, conn2) - go UdpCopy(conn2, conn1) - } - } - }() - for ismain || trueconn != nil { - time.Sleep(time.Second * 4) - } - ismain = false - } -} - -func TcpNatClient(tcpremote, tcpforward *net.TCPAddr, pwd string) { - var trueconn *net.TCPConn - var err error - ismain := false - var lastcheck int64 - dialtcp := func(tcpaddr *net.TCPAddr) (*net.TCPConn, error) { - trueconn, err := net.DialTCP("tcp", nil, tcpaddr) - if err != nil { - return nil, err - } - return trueconn, nil - } - defer func() { - if err := recover(); err != nil { - fmt.Println("PANIC:", err) - } - }() - for { - trueconn, err = dialtcp(tcpremote) - if err != nil || trueconn == nil { - fmt.Println(err) - time.Sleep(5 * time.Second) - continue - } - fmt.Println("TCP远端服务器连接成功" + trueconn.RemoteAddr().String()) - n, err := trueconn.Write([]byte(pwd)) - if err != nil || n == 0 { - fmt.Println(err) - continue - } - go func() { - for { - time.Sleep(time.Second * 2) - if !ismain { - if trueconn != nil { - _, err := trueconn.Write([]byte(pwd)) - if err != nil { - return - } - } else { - return - } - } else { - return - } - } - }() - go func() { - for { - if trueconn == nil { - break - } - var conn1, conn2 *net.TCPConn - buf := make([]byte, 7) - n, err := trueconn.Read(buf) - if n != 7 || err != nil { - fmt.Println("TCP下线01") - fmt.Println(err) - trueconn = nil - ismain = false - break - } - switch string(buf) { - case "yesyesi": - ismain = true - fmt.Println("TCP主节点认证成功") - lastcheck = time.Now().Unix() - go func() { - for { - time.Sleep(time.Second) - if time.Now().Unix()-lastcheck > 4 { - fmt.Println("TCP下线02") - ismain = false - trueconn = nil - return - } - } - }() - case "vicb612": - lastcheck = time.Now().Unix() - if trueconn != nil { - trueconn.Write([]byte("vicb612")) - } - case "newconn": - if !ismain { - trueconn.Close() - trueconn = nil - fmt.Println("TCP下线03") - break - } - for conn1, err = dialtcp(tcpforward); err != nil; conn1, err = dialtcp(tcpforward) { - time.Sleep(time.Second * 2) - } - fmt.Println("TCP已连接转发远端:" + conn1.RemoteAddr().String()) - for conn2, err = dialtcp(tcpremote); err != nil; conn2, err = dialtcp(tcpremote) { - time.Sleep(time.Second * 2) - } - conn2.Write([]byte("v%2^f&K")) - fmt.Println("TCP已连接主控远端:" + conn2.RemoteAddr().String()) - go TcpCopy(conn1, conn2) - go TcpCopy(conn2, conn1) - } - } - }() - for ismain || trueconn != nil { - time.Sleep(time.Second * 4) - } - ismain = false - - } -} - -func TcpCopy3(dst net.Conn, src *net.TCPConn) { - defer dst.Close() - defer src.Close() - io.Copy(dst, src) -} - -func TcpCopy2(dst *net.TCPConn, src net.Conn) { - defer src.Close() - defer dst.Close() - io.Copy(dst, src) -} - -func TcpCopy(dst, src *net.TCPConn) { - defer dst.Close() - defer src.Close() - io.Copy(dst, src) -} - -func UdpCopy(dst, src *net.UDPConn) { - defer dst.Close() - defer src.Close() - for { - buf := make([]byte, 131072) - n, err := src.Read(buf) - dst.Write(buf[0:n]) - if err != nil { - fmt.Println(err) - break - } - } -} - -type udpnat struct { - Conn *net.UDPAddr - Msg []byte - Married bool - LastTrans int64 -} - -func UdpNatServer(udplocal *net.UDPAddr, pwd string) { - var trueconn *net.UDPAddr - isconn := false - var lastcheck int64 - udplistener, err := net.ListenUDP("udp", udplocal) - defer udplistener.Close() - if err != nil { - fmt.Println(err) - return - } - udpconnlist := []string{} - udpool := make(map[string]*udpnat) - udpdial := make(map[string]*net.UDPAddr) - fmt.Println("UDP已建立监听:" + udplistener.LocalAddr().String()) - removeudplist := func(str string) { - var tmp []string - for _, v := range udpconnlist { - if v != str { - tmp = append(tmp, str) - } - } - udpconnlist = tmp - } - go func() { - for { - time.Sleep(time.Second * 20) - pool := []string{} - for k, v := range udpool { - if time.Now().Unix()-v.LastTrans > 30 { - pool = append(pool, k) - } - } - for _, v := range pool { - if udpool[v].Married { - delete(udpdial, udpool[v].Conn.String()) - } else { - removeudplist(v) - } - delete(udpool, v) - } - } - }() - for { - buf := make([]byte, 131072) - n, conn, errp := udplistener.ReadFromUDP(buf) - go func() { - if !isconn { - if errp != nil { - return - } - if string(buf[0:len(pwd)]) == pwd && n == len(pwd) { - isconn = true - trueconn = conn - udplistener.WriteToUDP([]byte("yesyesi"), trueconn) - fmt.Println("UDP穿透客户端已注册") - udpool = make(map[string]*udpnat) - udpdial = make(map[string]*net.UDPAddr) - udpconnlist = []string{} - lastcheck = time.Now().Unix() - go func() { - for { - time.Sleep(time.Second * 2) - go udplistener.WriteToUDP([]byte("vicregs"), trueconn) - if time.Now().Unix()-lastcheck > 6 { - fmt.Println("UDP穿透客户端已下线") - fmt.Println("UDP下线01") - isconn = false - break - } - } - }() - } - } else { - if string(buf[0:7]) == "vicregs" { - lastcheck = time.Now().Unix() - return - } - if string(buf[0:7]) == "v%2^f&K" { - fmt.Println("穿透客户端已建立新连接") - if len(udpconnlist) != 0 { - if v, ok := udpool[udpconnlist[0]]; ok { - if !v.Married { - v.Conn = conn - udplistener.WriteToUDP(v.Msg, conn) - v.Msg = []byte{} - udpaddr, _ := net.ResolveUDPAddr("udp", udpconnlist[0]) - udpdial[conn.String()] = udpaddr - v.Married = true - } - } - if len(udpconnlist) == 1 { - udpconnlist = []string{} - } else { - udpconnlist = udpconnlist[1:] - } - } - return - } else { - if v, ok := udpool[conn.String()]; ok { - if !v.Married { - for i := 0; i < n; i++ { - v.Msg = append(v.Msg, buf[i]) - } - if len(v.Msg) > 10485760 { - v.Msg = []byte{} - } - } else { - _, err := udplistener.WriteToUDP(buf[0:n], v.Conn) - v.LastTrans = time.Now().Unix() - if errp != nil || err != nil { - fmt.Println(errp, err) - udplistener.WriteToUDP(nil, v.Conn) - udplistener.WriteToUDP(nil, conn) - delete(udpool, conn.String()) - delete(udpdial, v.Conn.String()) - return - } - } - return - } - if v, ok := udpdial[conn.String()]; ok { - _, err := udplistener.WriteToUDP(buf[0:n], v) - udpool[v.String()].LastTrans = time.Now().Unix() - if errp != nil || err != nil { - fmt.Println(errp, err) - udplistener.WriteToUDP(nil, v) - udplistener.WriteToUDP(nil, conn) - delete(udpool, v.String()) - delete(udpdial, conn.String()) - return - } - return - } - fmt.Println("链接已加入等待列表") - udpool[conn.String()] = &udpnat{ - Msg: buf[0:n], - Married: false, - LastTrans: time.Now().Unix(), - } - udpconnlist = append(udpconnlist, conn.String()) - _, err := udplistener.WriteToUDP([]byte("newconn"), trueconn) - if err != nil { - fmt.Println("UDP穿透客户端已下线") - fmt.Println("UDP下线02") - isconn = false - } - } - } - }() - } - fmt.Println("执行完毕") -} - -func TcpNatServer(tcplocal *net.TCPAddr, pwd string) { - var trueconn *net.TCPConn - lastcheck := int64(0) - isconn := false - tcplistener, err := net.ListenTCP("tcp", tcplocal) - defer tcplistener.Close() - var waitconn []tcpnat - if err != nil { - fmt.Println(err) - return - } - fmt.Println("TCP已建立监听:" + tcplistener.Addr().String()) - for { - conn, err := tcplistener.AcceptTCP() - if err != nil { - return - } - go func() { - for { - now := time.Now().Unix() - if len(waitconn) != 0 { - if now-waitconn[0].Date > 8 { - waitconn[0].Conn.Close() - if len(waitconn) > 1 { - waitconn = waitconn[1:] - } else { - waitconn = []tcpnat{} - } - } - } - time.Sleep(time.Second * 2) - } - }() - go func() { - if !isconn { - buf := make([]byte, len(pwd)+1) - n, err := conn.Read(buf) - if n != len(pwd) || err != nil { - conn.Close() - return - } - if string(buf[0:len(pwd)]) == pwd { - isconn = true - trueconn = conn - conn.Write([]byte("yesyesi")) - fmt.Println("TCP穿透客户端已注册") - lastcheck = time.Now().Unix() - go func() { - for isconn && trueconn != nil { - buf := make([]byte, 7) - n, err := trueconn.Read(buf) - if n != 7 || err != nil { - isconn = false - trueconn = nil - return - } - if string(buf) == "vicb612" { - lastcheck = time.Now().Unix() - } - } - }() - go func() { - for { - time.Sleep(time.Second * 2) - if trueconn != nil { - _, err := trueconn.Write([]byte("vicb612")) - if err != nil { - trueconn.Close() - trueconn = nil - isconn = false - fmt.Println("TCP下线01") - return - } - } - if time.Now().Unix()-lastcheck > 4 { - fmt.Println("TCP下线02") - trueconn = nil - isconn = false - return - } - } - }() - } - return - } else { - isRun := false - buf := make([]byte, 7) - if strings.Split(conn.RemoteAddr().String(), ":")[0] == strings.Split(trueconn.RemoteAddr().String(), ":")[0] { - isRun = true - n, err := conn.Read(buf) - if n != 7 || err != nil { - conn.Close() - return - } - } - if string(buf) == "v%2^f&K" { - fmt.Println("穿透客户端已建立新连接") - if len(waitconn) != 0 { - if waitconn[0].Msg != nil { - conn.Write(waitconn[0].Msg) - } - waitconn[0].Msg = []byte{} - go TcpCopy(waitconn[0].Conn, conn) - go TcpCopy(conn, waitconn[0].Conn) - if len(waitconn) > 1 { - waitconn = waitconn[1:] - } else { - waitconn = []tcpnat{} - } - } else { - conn.Close() - } - } else { - fmt.Println("链接已加入等待列表") - var tcpnats tcpnat - if isRun { - tcpnats = tcpnat{Msg: buf, Conn: conn, Date: time.Now().Unix()} - } else { - tcpnats = tcpnat{Msg: nil, Conn: conn, Date: time.Now().Unix()} - } - waitconn = append(waitconn, tcpnats) - if trueconn == nil { - isconn = false - fmt.Println("TCP下线04") - return - } - _, err := trueconn.Write([]byte("newconn")) - if err != nil { - fmt.Println("穿透客户端已下线") - fmt.Println("TCP下线03") - trueconn.Close() - trueconn = nil - isconn = false - } - } - } - }() - } - -} - -func TcpForward(tcplocal, tcpforward *net.TCPAddr) { - tcplistener, err := net.ListenTCP("tcp", tcplocal) - if err != nil { - fmt.Println(err) - return - } - dialtcp := func() (*net.Conn, error) { - tcpclient, err := net.DialTimeout("tcp", tcpforward.String(), time.Second*10) - if err != nil { - return nil, err - } - return &tcpclient, nil - } - fmt.Println("TCP监听已建立:" + tcplocal.String()) - for { - conn, err := tcplistener.AcceptTCP() - if err != nil { - continue - } - fmt.Println(conn.RemoteAddr().String() + " 已连接") - tcpclient, err := dialtcp() - if err != nil { - fmt.Println(err) - conn.Write([]byte("Dial To Remote Addr Error")) - conn.Close() - continue - } - fmt.Println("成功连接到转发端口,本地端口:" + (*tcpclient).LocalAddr().String()) - go TcpCopy2(conn, *tcpclient) - go TcpCopy3(*tcpclient, conn) - } -} - -func UdpForward(udplocal, udpforward *net.UDPAddr) { - udplistener, err := net.ListenUDP("udp", udplocal) - if err != nil { - fmt.Println(err) - return - } - dialudp := func() (*net.UDPConn, error) { - udpclient, err := net.DialUDP("udp", nil, udpforward) - if err != nil { - return nil, err - } - return udpclient, nil - } - fmt.Println("UDP监听已建立:" + udplocal.String()) - udppool := make(map[string]*net.UDPConn) - for { - buf := make([]byte, 131072) - n, conn, err := udplistener.ReadFromUDP(buf) - udpclient, ok := udppool[conn.String()] - if !ok || udpclient == nil { - fmt.Println(conn.String() + " 已连接") - udpclient, err = dialudp() - if err != nil { - fmt.Println(err) - udplistener.WriteToUDP([]byte("Dial To Remote Addr Error"), conn) - continue - } - udppool[conn.String()] = udpclient - fmt.Println("成功连接到转发端口,本地端口:" + udpclient.LocalAddr().String()) - } - go udpclient.Write(buf[0:n]) - go func(conns *net.UDPAddr, udpclient *net.UDPConn) { - bufs := make([]byte, 131072) - n, err := udpclient.Read(bufs) - udplistener.WriteToUDP(bufs[0:n], conns) - if err != nil { - udpclient.Close() - udppool[conn.String()] = nil - } - }(conn, udpclient) - if err != nil { - udpclient.Close() - udppool[conn.String()] = nil - } - } -} diff --git a/vtqe/tools/ping/fqdn.go b/vtqe/tools/ping/fqdn.go deleted file mode 100644 index 5f36b48..0000000 --- a/vtqe/tools/ping/fqdn.go +++ /dev/null @@ -1,17 +0,0 @@ -package ping - -import "net" - -// GetIP ... -func GetIP(hostname string) string { - addrs, err := net.LookupIP(hostname) - if err != nil { - return "" - } - for _, addr := range addrs { - if ipv4 := addr.To4(); ipv4 != nil { - return ipv4.String() - } - } - return "" -} diff --git a/vtqe/tools/ping/http.go b/vtqe/tools/ping/http.go deleted file mode 100644 index 02825ea..0000000 --- a/vtqe/tools/ping/http.go +++ /dev/null @@ -1,120 +0,0 @@ -package ping - -import ( - "bytes" - "fmt" - "io" - "io/ioutil" - "net/http" - "net/http/httptrace" - "time" -) - -// HTTPing ... -type HTTPing struct { - target *Target - done chan struct{} - result *Result - Method string -} - -var _ Pinger = (*HTTPing)(nil) - -// NewHTTPing return new HTTPing -func NewHTTPing(method string) *HTTPing { - return &HTTPing{ - done: make(chan struct{}), - Method: method, - } -} - -// SetTarget ... -func (ping *HTTPing) SetTarget(target *Target) { - ping.target = target - if ping.result == nil { - ping.result = &Result{Target: target} - } -} - -// Start ping -func (ping *HTTPing) Start() <-chan struct{} { - go func() { - t := time.NewTicker(ping.target.Interval) - defer t.Stop() - for { - select { - case <-t.C: - if ping.result.Counter >= ping.target.Counter && ping.target.Counter != 0 { - ping.Stop() - return - } - duration, resp, remoteAddr, err := ping.ping() - ping.result.Counter++ - - if err != nil { - fmt.Printf("Ping %s - failed: %s\n", ping.target, err) - } else { - defer resp.Body.Close() - length, _ := io.Copy(ioutil.Discard, resp.Body) - fmt.Printf("Ping %s(%s) - %s is open - time=%s method=%s status=%d bytes=%d\n", ping.target, remoteAddr, ping.target.Protocol, duration, ping.Method, resp.StatusCode, length) - if ping.result.MinDuration == 0 { - ping.result.MinDuration = duration - } - if ping.result.MaxDuration == 0 { - ping.result.MaxDuration = duration - } - ping.result.SuccessCounter++ - if duration > ping.result.MaxDuration { - ping.result.MaxDuration = duration - } else if duration < ping.result.MinDuration { - ping.result.MinDuration = duration - } - ping.result.TotalDuration += duration - } - case <-ping.done: - return - } - } - }() - return ping.done -} - -// Result return ping result -func (ping *HTTPing) Result() *Result { - return ping.result -} - -// Stop the tcping -func (ping *HTTPing) Stop() { - ping.done <- struct{}{} -} - -func (ping HTTPing) ping() (time.Duration, *http.Response, string, error) { - var resp *http.Response - var body io.Reader - if ping.Method == "POST" { - body = bytes.NewBufferString("{}") - } - req, err := http.NewRequest(ping.Method, ping.target.String(), body) - req.Header.Set(http.CanonicalHeaderKey("User-Agent"), "tcping") - if err != nil { - return 0, nil, "", err - } - var remoteAddr string - trace := &httptrace.ClientTrace{ - ConnectStart: func(network, addr string) { - remoteAddr = addr - }, - } - req = req.WithContext(httptrace.WithClientTrace(req.Context(), trace)) - duration, errIfce := timeIt(func() interface{} { - client := http.Client{Timeout: ping.target.Timeout} - resp, err = client.Do(req) - return err - }) - if errIfce != nil { - err := errIfce.(error) - return 0, nil, "", err - } - return time.Duration(duration), resp, remoteAddr, nil -} diff --git a/vtqe/tools/ping/ping.go b/vtqe/tools/ping/ping.go deleted file mode 100644 index 842514c..0000000 --- a/vtqe/tools/ping/ping.go +++ /dev/null @@ -1,149 +0,0 @@ -package ping - -import ( - "bytes" - "fmt" - "html/template" - "regexp" - "strconv" - "strings" - "time" -) - -// Protocol ... -type Protocol int - -func (protocol Protocol) String() string { - switch protocol { - case TCP: - return "tcp" - case HTTP: - return "http" - case HTTPS: - return "https" - } - return "unkown" -} - -const ( - // TCP is tcp protocol - TCP Protocol = iota - // HTTP is http protocol - HTTP - // HTTPS is https protocol - HTTPS -) - -// NewProtocol convert protocol stirng to Protocol -func NewProtocol(protocol string) (Protocol, error) { - switch strings.ToLower(protocol) { - case TCP.String(): - return TCP, nil - case HTTP.String(): - return HTTP, nil - case HTTPS.String(): - return HTTPS, nil - } - return 0, fmt.Errorf("protocol %s not support", protocol) -} - -// Target is a ping -type Target struct { - Protocol Protocol - Host string - Port int - - Counter int - Interval time.Duration - Timeout time.Duration -} - -func (target Target) String() string { - return fmt.Sprintf("%s://%s:%d", target.Protocol, target.Host, target.Port) -} - -// Pinger is a ping interface -type Pinger interface { - Start() <-chan struct{} - Stop() - Result() *Result - SetTarget(target *Target) -} - -// Ping is a ping interface -type Ping interface { - Start() <-chan struct{} - - Host() string - Port() int - Protocol() Protocol - Counter() int - - Stop() - - Result() Result -} - -// Result ... -type Result struct { - Counter int - SuccessCounter int - Target *Target - - MinDuration time.Duration - MaxDuration time.Duration - TotalDuration time.Duration -} - -// Avg return the average time of ping -func (result Result) Avg() time.Duration { - if result.SuccessCounter == 0 { - return 0 - } - return result.TotalDuration / time.Duration(result.SuccessCounter) -} - -// Failed return failed counter -func (result Result) Failed() int { - return result.Counter - result.SuccessCounter -} - -func (result Result) String() string { - const resultTpl = ` -Ping statistics {{.Target}} - {{.Counter}} probes sent. - {{.SuccessCounter}} successful, {{.Failed}} failed. -Approximate trip times: - Minimum = {{.MinDuration}}, Maximum = {{.MaxDuration}}, Average = {{.Avg}}` - t := template.Must(template.New("result").Parse(resultTpl)) - res := bytes.NewBufferString("") - t.Execute(res, result) - return res.String() -} - -// CheckURI check uri -func CheckURI(uri string) (schema, host string, port int, matched bool) { - const reExp = `^((?P((ht|f)tp(s?))|tcp)\://)?((([a-zA-Z0-9_\-]+\.)+[a-zA-Z]{2,})|((?:(?:25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)((\.?\d)\.)){4})|(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9]))(:([0-9]+))?(/[a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~]*)?$` - pattern := regexp.MustCompile(reExp) - res := pattern.FindStringSubmatch(uri) - if len(res) == 0 { - return - } - matched = true - schema = res[2] - if schema == "" { - schema = "tcp" - } - host = res[6] - if res[17] == "" { - if schema == HTTPS.String() { - port = 443 - } else { - port = 80 - } - } else { - port, _ = strconv.Atoi(res[17]) - } - - return -} diff --git a/vtqe/tools/ping/tcp.go b/vtqe/tools/ping/tcp.go deleted file mode 100644 index bf5e5cf..0000000 --- a/vtqe/tools/ping/tcp.go +++ /dev/null @@ -1,102 +0,0 @@ -package ping - -import ( - "fmt" - "net" - "time" -) - -// TCPing ... -type TCPing struct { - target *Target - done chan struct{} - result *Result -} - -var _ Pinger = (*TCPing)(nil) - -// NewTCPing return a new TCPing -func NewTCPing() *TCPing { - tcping := TCPing{ - done: make(chan struct{}), - } - return &tcping -} - -// SetTarget set target for TCPing -func (tcping *TCPing) SetTarget(target *Target) { - tcping.target = target - if tcping.result == nil { - tcping.result = &Result{Target: target} - } -} - -// Result return the result -func (tcping TCPing) Result() *Result { - return tcping.result -} - -// Start a tcping -func (tcping TCPing) Start() <-chan struct{} { - go func() { - t := time.NewTicker(tcping.target.Interval) - defer t.Stop() - for { - select { - case <-t.C: - if tcping.result.Counter >= tcping.target.Counter && tcping.target.Counter != 0 { - tcping.Stop() - return - } - duration, remoteAddr, err := tcping.ping() - tcping.result.Counter++ - - if err != nil { - fmt.Printf("Ping %s - failed: %s\n", tcping.target, err) - } else { - fmt.Printf("Ping %s(%s) - Connected - time=%s\n", tcping.target, remoteAddr, duration) - - if tcping.result.MinDuration == 0 { - tcping.result.MinDuration = duration - } - if tcping.result.MaxDuration == 0 { - tcping.result.MaxDuration = duration - } - tcping.result.SuccessCounter++ - if duration > tcping.result.MaxDuration { - tcping.result.MaxDuration = duration - } else if duration < tcping.result.MinDuration { - tcping.result.MinDuration = duration - } - tcping.result.TotalDuration += duration - } - case <-tcping.done: - return - } - } - }() - return tcping.done -} - -// Stop the tcping -func (tcping *TCPing) Stop() { - tcping.done <- struct{}{} -} - -func (tcping TCPing) ping() (time.Duration, net.Addr, error) { - var remoteAddr net.Addr - duration, errIfce := timeIt(func() interface{} { - conn, err := net.DialTimeout("tcp", fmt.Sprintf("%s:%d", tcping.target.Host, tcping.target.Port), tcping.target.Timeout) - if err != nil { - return err - } - remoteAddr = conn.RemoteAddr() - conn.Close() - return nil - }) - if errIfce != nil { - err := errIfce.(error) - return 0, remoteAddr, err - } - return time.Duration(duration), remoteAddr, nil -} diff --git a/vtqe/tools/ping/utils.go b/vtqe/tools/ping/utils.go deleted file mode 100644 index 42c3a85..0000000 --- a/vtqe/tools/ping/utils.go +++ /dev/null @@ -1,51 +0,0 @@ -package ping - -import ( - "context" - "fmt" - "net" - "strings" - "time" -) - -func timeIt(f func() interface{}) (int64, interface{}) { - startAt := time.Now() - res := f() - endAt := time.Now() - return endAt.UnixNano() - startAt.UnixNano(), res -} - -// UseCustomeDNS will set the dns to default DNS resolver for global -func UseCustomeDNS(dns []string) { - resolver := net.Resolver{ - PreferGo: true, - Dial: func(ctx context.Context, network, address string) (conn net.Conn, err error) { - for _, addr := range dns { - if conn, err = net.Dial("udp", addr+":53"); err != nil { - continue - } else { - return conn, nil - } - } - return - }, - } - net.DefaultResolver = &resolver -} - -// FormatIP - trim spaces and format IP -// -// IP - the provided IP -// -// string - return "" if the input is neither valid IPv4 nor valid IPv6 -// return IPv4 in format like "192.168.9.1" -// return IPv6 in format like "[2002:ac1f:91c5:1::bd59]" -func FormatIP(IP string) string { - - host := strings.Trim(IP, "[ ]") - if parseIP := net.ParseIP(host); parseIP != nil && parseIP.To4() == nil { - host = fmt.Sprintf("[%s]", host) - } - - return host -} diff --git a/vtqe/tools/ping/utils_test.go b/vtqe/tools/ping/utils_test.go deleted file mode 100644 index 6b164da..0000000 --- a/vtqe/tools/ping/utils_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package ping - - -import ( - "testing" - - . "github.com/smartystreets/goconvey/convey" -) - -func TestFormatIP(t *testing.T) { - - Convey("IP", t, func() { - Convey("for v4 success", func() { - rc := FormatIP("192.168.0.1") - So(rc, ShouldEqual, "192.168.0.1") - }) - - Convey("for v4 failure", func() { - rc := FormatIP("192.0.1") - So(rc, ShouldEqual, "") - }) - - Convey("for v4 format", func() { - rc := FormatIP("[192.0.1.1] ") - So(rc, ShouldEqual, "192.0.1.1") - }) - - Convey("for v6 success", func() { - rc := FormatIP("[2002:ac1f:91c5:1::bd59]") - So(rc, ShouldEqual, "[2002:ac1f:91c5:1::bd59]") - }) - - Convey("for v6 failure", func() { - rc := FormatIP("2002:ac1f:91c5:1:") - So(rc, ShouldEqual, "") - }) - - Convey("for v6 format", func() { - rc := FormatIP("2002:ac1f:91c5:1::bd59 ") - So(rc, ShouldEqual, "[2002:ac1f:91c5:1::bd59]") - }) - }) -} diff --git a/vtqe/tools/sftp.go b/vtqe/tools/sftp.go deleted file mode 100644 index b44bd1d..0000000 --- a/vtqe/tools/sftp.go +++ /dev/null @@ -1,173 +0,0 @@ -package tools - -import ( - "fmt" - "io/ioutil" - "os" - "path/filepath" - "regexp" - "runtime" - "strings" - - "b612.me/starainrt" - - "b612.me/sshd" - - "github.com/spf13/cobra" -) - -var sftpcmd = &cobra.Command{ - Use: "sftp", - Short: "sftp上传下载", - Long: "sftp上传下载", - Run: func(this *cobra.Command, args []string) { - d, _ := this.Flags().GetBool("download") - s, _ := this.Flags().GetString("src") - r, _ := this.Flags().GetString("dst") - i, _ := this.Flags().GetString("identify") - k, _ := this.Flags().GetString("password") - p, _ := this.Flags().GetInt("port") - b, _ := this.Flags().GetInt("buffer") - g, _ := this.Flags().GetString("regexp") - var user, host string - var err error - if len(args) != 1 { - fmt.Println("sftp <[user@]Host> -s -d ") - this.Help() - return - } - hosts := strings.Split(args[0], "@") - if len(hosts) == 1 { - host = hosts[0] - user = "root" - } else { - user = hosts[0] - host = hosts[1] - } - fmt.Println("进行SSH连接……") - myssh := new(sshd.StarSSH) - err = myssh.Connect(user, k, host, i, p) - if err != nil { - fmt.Println(err) - return - } - defer myssh.Close() - fmt.Println("已连接上……") - sftp, err := sshd.CreateSftp(myssh.Client) - if err != nil { - fmt.Println(err) - return - } - defer sftp.Close() - fmt.Println("已建立SFTP……") - - shell := func(pect float64) { - if pect != 100.0 { - fmt.Printf("传输已完成:%f%%\r", pect) - } else { - fmt.Printf("传输已完成:%f%%\n", pect) - } - } - var UploadDir func(string, string) - UploadDir = func(fs, remote string) { - if runtime.GOOS == "windows" { - fs = strings.Replace(fs, "/", "\\", -1) - } - sftp.MkdirAll(remote) - abspath, _ := filepath.Abs(fs) - dir, err := ioutil.ReadDir(fs) - if err != nil { - fmt.Println(err) - return - } - for _, v := range dir { - if v.IsDir() { - if g != "" { - continue - } - UploadDir(abspath+string(os.PathSeparator)+v.Name(), remote+"/"+v.Name()) - } else { - if ok, _ := regexp.MatchString(g, v.Name()); !ok { - continue - } - fmt.Println("上传:" + abspath + string(os.PathSeparator) + v.Name()) - err = sshd.FtpTransferOutFunc(abspath+string(os.PathSeparator)+v.Name(), remote+"/"+v.Name(), b, shell, sftp) - if err != nil { - fmt.Println(err) - continue - } - } - } - } - - var DownloadDir func(string, string) - DownloadDir = func(fs, remote string) { - abspath, _ := filepath.Abs(remote) - os.MkdirAll(abspath, 0755) - dir, err := sftp.ReadDir(fs) - if err != nil { - fmt.Println("读取错误", err) - return - } - for _, v := range dir { - if v.IsDir() { - if g != "" { - continue - } - DownloadDir(fs+"/"+v.Name(), abspath+string(os.PathSeparator)+v.Name()) - } else { - if ok, _ := regexp.MatchString(g, v.Name()); !ok { - continue - } - fmt.Println("下载:" + fs + "/" + v.Name()) - err = sshd.FtpTransferInFunc(fs+"/"+v.Name(), abspath+string(os.PathSeparator)+v.Name(), b, shell, sftp) - if err != nil { - fmt.Println(err) - continue - } - } - } - } - if !d { - if !starainrt.Exists(s) { - fmt.Println("本地文件或文件夹:" + s + "不存在") - return - } - if starainrt.IsFile(s) { - err = sshd.FtpTransferOutFunc(s, r, b, shell, sftp) - } else { - UploadDir(s, r) - } - } else { - if !myssh.Exists(s) { - fmt.Println("远端文件或文件夹:" + s + "不存在") - return - } - stat, err := sftp.Stat(s) - if err != nil { - fmt.Println("错误:", err) - return - } - if !stat.IsDir() { - err = sshd.FtpTransferInFunc(s, r, b, shell, sftp) - } else { - DownloadDir(s, r) - } - } - if err != nil { - fmt.Println(err) - } - }, -} - -func init() { - Maincmd.AddCommand(sftpcmd) - sftpcmd.Flags().BoolP("download", "D", false, "进行下载") - sftpcmd.Flags().StringP("identify", "i", "", "RSA登录密钥") - sftpcmd.Flags().StringP("password", "k", "", "登录密码") - sftpcmd.Flags().StringP("src", "s", "", "本机路径/若为下载则相反") - sftpcmd.Flags().StringP("dst", "d", "", "远程路径/若为下载则相反") - sftpcmd.Flags().IntP("port", "p", 22, "登录端口") - sftpcmd.Flags().StringP("regexp", "r", "", "正则表达式") - sftpcmd.Flags().IntP("buffer", "b", 10240, "buffer大小") -} diff --git a/vtqe/tools/split.go b/vtqe/tools/split.go deleted file mode 100644 index 46cb083..0000000 --- a/vtqe/tools/split.go +++ /dev/null @@ -1,61 +0,0 @@ -package tools - -import ( - "fmt" - "strconv" - - "b612.me/starainrt" - "b612.me/starlog" - - "github.com/spf13/cobra" -) - -var splitcmd = &cobra.Command{ - Use: "split", - Short: "分割文件", - Long: "按字节或文件数分割文件", - Run: func(this *cobra.Command, args []string) { - var src, dst string - var num int - if len(args) == 3 { - src = args[0] - dst = args[1] - num, _ = strconv.Atoi(args[2]) - } else { - src, _ = this.Flags().GetString("src") - dst, _ = this.Flags().GetString("dst") - num, _ = this.Flags().GetInt("num") - } - if !starainrt.Exists(src) { - starlog.Errorln("源文件不存在") - this.Help() - return - } - if num == 0 { - starlog.Errorln("参数num不合法", "red") - this.Help() - return - } - crypto := new(starainrt.StarCrypto) - ok, _ := this.Flags().GetBool("byte") - err := crypto.SplitFile(src, dst, num, !ok, func(pect float64) { - if pect == 100 { - fmt.Println("文件已处理:100.000000%") - } else { - fmt.Printf("文件已处理:%f%%\r", pect) - } - }) - if err != nil { - starlog.Errorln(err.Error) - } - - }, -} - -func init() { - splitcmd.Flags().StringP("src", "s", "", "源文件地址") - splitcmd.Flags().StringP("dst", "d", "./split*.vicque", "目标文件地址,用*替换文件数字") - splitcmd.Flags().BoolP("byte", "b", false, "按byte分割") - splitcmd.Flags().IntP("num", "n", 0, "分割数/byte数") - Maincmd.AddCommand(splitcmd) -} diff --git a/vtqe/tools/tcp.go b/vtqe/tools/tcp.go deleted file mode 100644 index 7117125..0000000 --- a/vtqe/tools/tcp.go +++ /dev/null @@ -1,443 +0,0 @@ -package tools - -import ( - "fmt" - "io" - "io/ioutil" - "net" - "os" - "path/filepath" - "regexp" - "runtime" - "strconv" - "strings" - "time" - - "b612.me/starainrt" - "b612.me/starlog" - - "github.com/spf13/cobra" -) - -var tcpcmd = &cobra.Command{ - Use: "tcp", - Short: "发送并监听tcp数据包", - Long: "发送并监听tcp数据包", - Run: func(this *cobra.Command, args []string) { - r, _ := this.Flags().GetBool("recvonly") - if len(args) != 1 && !r { - fmt.Println("请指定远程tcp地址") - return - } - l, _ := this.Flags().GetString("port") - a, _ := this.Flags().GetString("addr") - s, _ := this.Flags().GetBool("local") - b, _ := this.Flags().GetBool("byte") - laddr, err := net.ResolveTCPAddr("tcp", a+":"+l) - if err != nil { - fmt.Println(err) - return - } - if s { - tcplisten, err := net.ListenTCP("tcp", laddr) - if err != nil { - fmt.Println(err) - return - } - fmt.Println("监听已建立") - defer tcplisten.Close() - go func() { - for { - conn, err := tcplisten.AcceptTCP() - if err != nil { - fmt.Printf("Error Connect From %s : %s\n", conn.RemoteAddr(), err.Error()) - continue - } - starlog.Infof("Accept Connect From %s\n", conn.RemoteAddr()) - go func(conns *net.TCPConn) { - for { - buf := make([]byte, 204800) - n, err := conns.Read(buf) - if err != nil { - starlog.Infof("Error from %s Where Message=%s\n", conns.RemoteAddr(), err.Error()) - conn.Close() - return - } - starlog.Infof("Receive Msg From %s : %s\n", conns.RemoteAddr(), string(buf[0:n])) - if b { - starlog.Infof("%#v", buf[0:n]) - } - } - - }(conn) - } - }() - } - if !r { - mytcp, err := net.DialTimeout("tcp", args[0], time.Second*15) - if err != nil { - fmt.Println(err) - if s { - for { - time.Sleep(time.Second * 10) - } - } - return - } - defer mytcp.Close() - fmt.Println("TCP连接已建立") - go func() { - var err error - for { - txt := starainrt.MessageBox("", "") - if txt == "" { - continue - } - if !b { - _, err = mytcp.Write([]byte(txt)) - } else { - var sendbyte []byte - bytes := strings.Split(txt, ",") - for _, v := range bytes { - ints, _ := strconv.Atoi(v) - if ints < 0 || ints > 255 { - continue - } - sendbyte = append(sendbyte, byte(ints)) - } - _, err = mytcp.Write(sendbyte) - } - if err != nil { - starlog.Errorf("Error from %s Where Message=%s\n", mytcp.RemoteAddr().String(), err.Error()) - return - } - } - }() - for { - buf := make([]byte, 204800) - n, err := mytcp.Read(buf) - if err != nil { - starlog.Errorf("Error from %s Where Message=%s\n", mytcp.RemoteAddr().String(), err.Error()) - return - } - - starlog.Infof("Receive Msg From %s : %s\n", mytcp.RemoteAddr().String(), string(buf[0:n])) - if b { - starlog.Infof("%#v", buf[0:n]) - } - } - } else { - for { - time.Sleep(time.Second) - } - } - }, -} - -/* - - */ - -func init() { - Maincmd.AddCommand(tcpcmd) - tcpcmd.Flags().BoolP("byte", "b", false, "发送二进制数据") - tcpcmd.Flags().StringP("port", "p", "1127", "本地监听端口") - tcpcmd.Flags().StringP("addr", "a", "0.0.0.0", "本地监听ip") - tcpcmd.Flags().BoolP("local", "s", false, "启动本地监听") - tcpsendcmd.Flags().StringP("port", "p", "1127", "远程连接端口") - tcpsendcmd.Flags().StringP("addr", "a", "0.0.0.0", "远程监听ip") - tcpsendcmd.Flags().StringP("regexp", "r", "", "正则匹配字符串") - tcprecvcmd.Flags().StringP("port", "p", "1127", "本地监听端口") - tcprecvcmd.Flags().StringP("addr", "a", "0.0.0.0", "本地监听ip") - tcpcmd.Flags().BoolP("recvonly", "r", false, "仅接收udp包") - tcpcmd.AddCommand(tcpsendcmd, tcprecvcmd) -} - -var cansend, backsck, foldercreate bool = false, false, false -var tcpsendcmd = &cobra.Command{ - Use: "send", - Short: "通过tcp发送文件", - Long: "通过tcp接受文件", - Run: func(this *cobra.Command, args []string) { - stop := false - p, _ := this.Flags().GetString("port") - a, _ := this.Flags().GetString("addr") - r, _ := this.Flags().GetString("regexp") - if len(args) != 1 { - this.Help() - return - } - mytcp, err := net.DialTimeout("tcp", a+":"+p, time.Second*15) - if err != nil { - fmt.Println(err) - return - } - fmt.Println("TCP连接已建立") - defer mytcp.Close() - go func() { - for { - buf := make([]byte, 1048576) - n, err := mytcp.Read(buf) - if err != nil { - if !stop { - fmt.Println(err) - os.Exit(1) - } - continue - } - data := string(buf[0:n]) - if data == "oksend!" { - cansend = true - } else if data == "backsck" { - backsck = true - } else if data == "folderok" { - foldercreate = true - } else { - fmt.Println(data) - os.Exit(1) - } - } - }() - file := args[0] - if file[len(file)-1:] == "\\" || file[len(file)-1:] == "/" { - file = file[0 : len(file)-1] - } - file, _ = filepath.Abs(file) - Scan(file, "", mytcp, r) - stop = true - mytcp.Write([]byte("jane&0&0")) - return - }, -} - -func tcpupload(file, prefix string, mytcp net.Conn) error { - if runtime.GOOS == "windows" { - file = strings.Replace(file, "/", "\\", -1) - prefix = strings.Replace(prefix, "/", "\\", -1) - } - fmt.Println(file) - fpsrc, err := os.Open(file) - if err != nil { - fmt.Println(err) - return err - } - stat, _ := os.Stat(file) - filebig := float64(stat.Size()) - _, err = mytcp.Write([]byte("victorique&" + stat.Name() + "&" + prefix)) - if err != nil { - fmt.Println(err) - return err - } - var sakura int = 0 - for !cansend { - time.Sleep(time.Millisecond * 100) - sakura++ - if sakura > 50 { - mytcp.Write([]byte{1, 9, 9, 6, 1, 1, 2, 7}) - time.Sleep(time.Millisecond * 100) - mytcp.Write([]byte("victorique&" + stat.Name() + "&" + prefix)) - } - } - cansend = false - sum := 0 - for { - buf := make([]byte, 524288) - n, err := fpsrc.Read(buf) - if err != nil { - if err == io.EOF { - err = nil - mytcp.Write([]byte{1, 9, 9, 6, 1, 1, 2, 7}) - for !backsck { - time.Sleep(time.Millisecond * 150) - } - backsck = false - break - } - fmt.Println(err) - return err - } - _, err = mytcp.Write(buf[0:n]) - if err != nil { - fmt.Println(err) - return err - } - sum += n - fmt.Printf("当前已传输:%f\r", float64(sum)/filebig*100) - } - fmt.Printf("当前已传输:%f\n\n", 100.000000) - fpsrc.Close() - return nil -} - -func Scan(path, prefix string, mytcp net.Conn, reg string) { - var err error - var regp *regexp.Regexp - if prefix != "" { - prefix += "/" - } - if reg != "" { - regp, err = regexp.Compile(reg) - if err != nil { - fmt.Println(err) - return - } - } - if runtime.GOOS == "windows" { - path = strings.Replace(path, "/", "\\", -1) - prefix = strings.Replace(prefix, "/", "\\", -1) - } - if starainrt.IsFile(path) { - if reg != "" { - if regp.MatchString(path) { - tcpupload(path, prefix, mytcp) - } - } else { - tcpupload(path, prefix, mytcp) - } - } else if starainrt.IsFolder(path) { - dir, err := ioutil.ReadDir(path) - if err != nil { - fmt.Println(err) - return - } - for _, v := range dir { - if v.IsDir() && (v.Name() != "." || v.Name() != "..") { - mytcp.Write([]byte("b612&" + prefix + v.Name() + "&0")) - count := 0 - for !foldercreate { - time.Sleep(time.Millisecond * 100) - count++ - if count%30 == 0 { - mytcp.Write([]byte("b612&" + prefix + v.Name() + "&0")) - } - } - foldercreate = false - Scan(path+"/"+v.Name(), prefix+v.Name(), mytcp, reg) - } else { - if reg != "" { - if regp.MatchString(path + "/" + v.Name()) { - err = tcpupload(path+"/"+v.Name(), prefix, mytcp) - } - } else { - err = tcpupload(path+"/"+v.Name(), prefix, mytcp) - } - if err != nil { - fmt.Println(err) - return - } - } - } - } - -} - -var tcprecvcmd = &cobra.Command{ - Use: "recv", - Short: "通过tcp接收文件", - Long: "通过tcp接收文件", - Run: func(this *cobra.Command, args []string) { - p, _ := this.Flags().GetString("port") - a, _ := this.Flags().GetString("addr") - laddr, err := net.ResolveTCPAddr("tcp", a+":"+p) - if err != nil { - fmt.Println(err) - return - } - tcplisten, err := net.ListenTCP("tcp", laddr) - if err != nil { - fmt.Println(err) - return - } - fmt.Println("TCP监听已建立") - defer tcplisten.Close() - for { - conn, err := tcplisten.AcceptTCP() - if err != nil { - fmt.Printf("Error Connect From %s : %s\n", conn.RemoteAddr(), err.Error()) - continue - } - fmt.Printf("Accept Connect From %s\n", conn.RemoteAddr()) - go func(conns *net.TCPConn) { - canrecv := false - name := "" - var fpdst *os.File - defer conns.Close() - var sum int64 - for { - buf := make([]byte, 393216) - n, err := conns.Read(buf) - - if !canrecv { - if err != nil { - fmt.Println(err) - return - } - data := string(buf[0:n]) - str := strings.Split(data, "&") - if len(str) != 3 { - continue - } - if str[0] == "victorique" { - canrecv = true - name = str[1] - prefix := str[2] - if runtime.GOOS != "windows" { - prefix = strings.Replace(prefix, "\\", "/", -1) - } - if prefix == "" { - fpdst, err = os.Create("./" + name) - } else { - fpdst, err = os.Create(prefix + name) - } - if err != nil { - fmt.Println(err) - conns.Write([]byte(err.Error())) - return - } - conns.Write([]byte("oksend!")) - } else if str[0] == "b612" { - str[1] = ".\\" + str[1] - if runtime.GOOS != "windows" { - str[1] = strings.Replace(str[1], "\\", "/", -1) - } - fmt.Println("进入文件夹:" + str[1] + "\n") - os.MkdirAll(str[1], 0644) - time.Sleep(time.Millisecond * 50) - conns.Write([]byte("folderok")) - } else if str[0] == "jane" { - return - } - } else { - if buf[n-1] == byte(7) && buf[n-2] == byte(2) && buf[n-3] == byte(1) { - ok := func() bool { - for k, v := range []byte{1, 9, 9, 6, 1, 1, 2, 7} { - if buf[n-8+k] != v { - return false - } - } - return true - }() - if ok { - if n > 8 { - fpdst.Write(buf[0 : n-8]) - sum += int64(n - 8) - } - fmt.Printf("已写入:%d 字节\n", sum) - fmt.Println(name + "接收成功\n") - fpdst.Close() - canrecv = false - sum = 0 - conns.Write([]byte("backsck")) - continue - } - } - fpdst.Write(buf[0:n]) - sum += int64(n) - fmt.Printf("已写入:%d 字节\r", sum) - } - } - }(conn) - } - - }, -} diff --git a/vtqe/tools/uac.go b/vtqe/tools/uac.go deleted file mode 100644 index 07a6ea7..0000000 --- a/vtqe/tools/uac.go +++ /dev/null @@ -1,33 +0,0 @@ -// +build windows - -package tools - -import ( - "os" - - "b612.me/wincmd" - "github.com/spf13/cobra" -) - -var uaccmd = &cobra.Command{ - Use: "uac", - Short: "Windows 使用uac权限打开文件", - Long: "Windows 使用uac权限打开文件", - Run: func(this *cobra.Command, args []string) { - if len(args) == 0 { - return - } - cmdLine := "" - if len(args) > 1 { - for _, v := range args[1:] { - cmdLine += v + " " - } - } - pwd, _ := os.Getwd() - wincmd.StartProcess(args[0], cmdLine, pwd, true, 1) - }, -} - -func init() { - Maincmd.AddCommand(uaccmd) -} diff --git a/vtqe/tools/udp.go b/vtqe/tools/udp.go deleted file mode 100644 index 41fb3e0..0000000 --- a/vtqe/tools/udp.go +++ /dev/null @@ -1,127 +0,0 @@ -package tools - -import ( - "fmt" - "net" - "strconv" - "strings" - "time" - - "b612.me/starainrt" - "b612.me/starlog" - - "github.com/spf13/cobra" -) - -var udpcmd = &cobra.Command{ - Use: "udp", - Short: "发送并监听udp数据包", - Long: "发送并监听udp数据包", - Run: func(this *cobra.Command, args []string) { - var raddr *net.UDPAddr - r, _ := this.Flags().GetBool("recvonly") - if len(args) != 1 && !r { - fmt.Println("请指定远程udp地址") - return - } - l, _ := this.Flags().GetString("port") - a, _ := this.Flags().GetString("addr") - s, _ := this.Flags().GetBool("local") - b, _ := this.Flags().GetBool("byte") - laddr, err := net.ResolveUDPAddr("udp", a+":"+l) - if !r { - raddr, err = net.ResolveUDPAddr("udp", args[0]) - } - if err != nil { - fmt.Println(err) - return - } - if s { - udplisten, err := net.ListenUDP("udp", laddr) - if err != nil { - fmt.Println(err) - return - } - fmt.Println("监听已建立") - go func() { - for { - buf := make([]byte, 204800) - n, addr, err := udplisten.ReadFromUDP(buf) - if err != nil { - starlog.Errorln("Error from %s Where Message=%s\n", addr.String(), err.Error()) - continue - } - starlog.Infof("Receive Msg From %s : %s\n", addr.String(), string(buf[0:n])) - if b { - starlog.Infof("%#v\n", buf[0:n]) - } - } - }() - } - if !r { - myudp, err := net.DialUDP("udp", nil, raddr) - if err != nil { - fmt.Println(err) - return - } - fmt.Println("UDP虚拟连接已建立") - go func() { - var err error - for { - txt := starainrt.MessageBox("", "") - if txt == "" { - continue - } - if !b { - _, err = myudp.Write([]byte(txt)) - } else { - var sendbyte []byte - bytes := strings.Split(txt, ",") - for _, v := range bytes { - ints, _ := strconv.Atoi(v) - if ints < 0 || ints > 255 { - continue - } - sendbyte = append(sendbyte, byte(ints)) - } - _, err = myudp.Write(sendbyte) - } - if err != nil { - fmt.Printf("Error from %s Where Message=%s\n", myudp.RemoteAddr().String(), err.Error()) - return - } - } - }() - for { - buf := make([]byte, 204800) - n, err := myudp.Read(buf) - if err != nil { - starlog.Infof("Error from %s Where Message=%s\n", myudp.RemoteAddr().String(), err.Error()) - return - } - - starlog.Infof("Receive Msg From %s : %s\n", myudp.RemoteAddr().String(), string(buf[0:n])) - if b { - starlog.Infof("%#v", buf[0:n]) - } - } - } else { - for { - time.Sleep(time.Second) - } - } - }, -} - -/* - - */ - -func init() { - Maincmd.AddCommand(udpcmd) - udpcmd.Flags().BoolP("byte", "b", false, "发送二进制数据") - udpcmd.Flags().StringP("port", "p", "1127", "本地监听端口") - udpcmd.Flags().StringP("addr", "a", "0.0.0.0", "本地监听ip") - udpcmd.Flags().BoolP("local", "s", false, "启动本地监听") - udpcmd.Flags().BoolP("recvonly", "r", false, "仅接收udp包") -} diff --git a/vtqe/tools/vic.go b/vtqe/tools/vic.go deleted file mode 100644 index 533e41d..0000000 --- a/vtqe/tools/vic.go +++ /dev/null @@ -1,95 +0,0 @@ -package tools - -import ( - "fmt" - "os" - "regexp" - - "b612.me/starainrt" - "b612.me/starlog" - "github.com/spf13/cobra" -) - -var viccmd = &cobra.Command{ - Use: "vicque", - Short: "嵐を乗り越えて", - Long: "ほら!嵐を乗り越えて", - Run: func(this *cobra.Command, args []string) { - var err error - ok, _ := this.Flags().GetBool("file") - de, _ := this.Flags().GetBool("decode") - pwd, _ := this.Flags().GetString("key") - rep, _ := this.Flags().GetBool("replace") - ext, _ := this.Flags().GetBool("extension") - if len(args) != 2 || args[1] != "sakura" { - starlog.Errorln("ヴィクトリカだけが使えるよ") - return - } - shell := func(pect float64) { - if pect == 100 { - fmt.Println("已处理:100.000000%") - } else { - fmt.Printf("已处理:%f%%\r", pect) - } - } - cry := new(starainrt.StarCrypto) - if ok { - path, _ := this.Flags().GetString("path") - if !de { - err = cry.VicqueEncodeV1File(args[0], path, pwd, shell) - if err == nil { - if rep { - os.Remove(args[0]) - os.Rename(path, args[0]) - path = args[0] - } - if ext { - os.Rename(path, path+".victorique") - } - } - } else { - err = cry.VicqueDecodeV1File(args[0], path, pwd, shell) - if err == nil { - if rep { - os.Remove(args[0]) - os.Rename(path, args[0]) - path = args[0] - } - if ext { - reg := regexp.MustCompile(`(.*?)\.victorique$`) - if reg.MatchString(path) { - paths := reg.FindStringSubmatch(path) - os.Rename(path, paths[1]) - } - } - } - } - } else { - if !de { - data := cry.VicqueEncodeV1([]byte(args[0]), pwd) - fmt.Println(data) - fmt.Println(cry.Base64Encode(data)) - } else { - var data []byte - src, _ := cry.Base64Decode(args[0]) - data = cry.VicqueDecodeV1(src, pwd) - fmt.Println(string(data)) - } - } - if err != nil { - starlog.Errorln(err) - return - } - }, -} - -func init() { - viccmd.Flags().BoolP("file", "f", false, "VICQUE处理文件") - viccmd.Flags().StringP("path", "p", "./v64.encode", "指定处理地址,默认为./v64.encode") - viccmd.Flags().BoolP("decode", "d", false, "VICQUE解码") - viccmd.Flags().StringP("key", "k", "", "密钥") - viccmd.Flags().BoolP("replace", "r", false, "覆盖原文件") - viccmd.Flags().BoolP("extension", "e", false, "添加/取消.victorique后缀") - viccmd.MarkFlagRequired("key") - Maincmd.AddCommand(viccmd) -}