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
\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("\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%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("