From f8bcc2c171b2dbc2808976c98ec4703a008de87b Mon Sep 17 00:00:00 2001 From: 兔子 Date: Thu, 13 Aug 2020 13:45:27 +0800 Subject: [PATCH] version 0.1.25 --- vtqe/tools/attach.go | 4 +- vtqe/tools/base64.go | 4 +- vtqe/tools/cd.go | 13 ++++- vtqe/tools/cmd.go | 2 +- vtqe/tools/detach.go | 4 +- vtqe/tools/generate.go | 26 ++++++--- vtqe/tools/hash.go | 2 +- vtqe/tools/http.go | 116 +++++++++++++++++++++++++++++++++-------- vtqe/tools/image.go | 12 ++--- vtqe/tools/merge.go | 2 +- vtqe/tools/net.go | 30 +++++++---- vtqe/tools/split.go | 6 +-- vtqe/tools/tcp.go | 101 +++++++++++++++++++---------------- vtqe/tools/udp.go | 97 +++++++++++++++++++--------------- vtqe/tools/vic.go | 4 +- 15 files changed, 273 insertions(+), 150 deletions(-) diff --git a/vtqe/tools/attach.go b/vtqe/tools/attach.go index 16cd7f4..0981774 100644 --- a/vtqe/tools/attach.go +++ b/vtqe/tools/attach.go @@ -24,14 +24,14 @@ var attachcmd = &cobra.Command{ out, _ = this.Flags().GetString("out") } if src == "" || dst == "" { - starlog.StdPrintln(0, starlog.RED, "ERROR PATH") + starlog.Criticalln("ERROR PATH") this.Help() return } cryp := new(starainrt.StarCrypto) err := cryp.Attach(src, dst, out) if err != nil { - starlog.StdPrintln(0, starlog.RED, err.Error) + starlog.Criticalln(err.Error) } else { fmt.Println("完成") } diff --git a/vtqe/tools/base64.go b/vtqe/tools/base64.go index 9836ff5..0b7666b 100644 --- a/vtqe/tools/base64.go +++ b/vtqe/tools/base64.go @@ -17,7 +17,7 @@ var b64cmd = &cobra.Command{ ok, _ := this.Flags().GetBool("file") de, _ := this.Flags().GetBool("decode") if len(args) != 1 { - starlog.StdPrintln(0, starlog.RED, "参数不足,请输入文件地址或字符串") + starlog.Criticalln("参数不足,请输入文件地址或字符串") this.Help() return } @@ -47,7 +47,7 @@ var b64cmd = &cobra.Command{ } } if err != nil { - starlog.StdPrintln(0, starlog.RED, err) + starlog.Criticalln(err) return } }, diff --git a/vtqe/tools/cd.go b/vtqe/tools/cd.go index 6b83fce..9f2fb4e 100644 --- a/vtqe/tools/cd.go +++ b/vtqe/tools/cd.go @@ -4,10 +4,13 @@ package tools import ( "bufio" + "fmt" "os" "os/exec" "path/filepath" + "b612.me/starainrt" + "github.com/spf13/cobra" ) @@ -18,7 +21,8 @@ var cdcmd = &cobra.Command{ Run: func(this *cobra.Command, args []string) { fileInfo, _ := os.Stdin.Stat() if (fileInfo.Mode() & os.ModeNamedPipe) != os.ModeNamedPipe { - if len(args) != 1 { + fmt.Println(args) + if len(args) != 0 { os.Exit(1) } else { exec.Command("cmd.exe", "/c", "explorer "+filepath.Dir(args[0])).Run() @@ -27,7 +31,12 @@ var cdcmd = &cobra.Command{ } s := bufio.NewScanner(os.Stdin) for s.Scan() { - exec.Command("cmd.exe", "/c", "explorer "+filepath.Dir(s.Text())).Run() + 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 } }, diff --git a/vtqe/tools/cmd.go b/vtqe/tools/cmd.go index 2df9bee..17176e4 100644 --- a/vtqe/tools/cmd.go +++ b/vtqe/tools/cmd.go @@ -4,7 +4,7 @@ import ( "github.com/spf13/cobra" ) -var Version string = "0.1.24" +var Version string = "0.1.25" var Maincmd = &cobra.Command{ Use: "", diff --git a/vtqe/tools/detach.go b/vtqe/tools/detach.go index fa9c808..f603aac 100644 --- a/vtqe/tools/detach.go +++ b/vtqe/tools/detach.go @@ -25,14 +25,14 @@ var detachcmd = &cobra.Command{ } num, _ := this.Flags().GetInt("num") if src == "" || dst == "" { - starlog.StdPrintln(0, starlog.RED, "ERROR PATH") + starlog.Criticalln("ERROR PATH") this.Help() return } cryp := new(starainrt.StarCrypto) err := cryp.Detach(src, num, dst, out) if err != nil { - starlog.StdPrintln(0, starlog.RED, err.Error) + starlog.Criticalln(err.Error) } else { fmt.Println("完成") } diff --git a/vtqe/tools/generate.go b/vtqe/tools/generate.go index 2fd5828..f23d5f7 100644 --- a/vtqe/tools/generate.go +++ b/vtqe/tools/generate.go @@ -2,6 +2,8 @@ package tools import ( "fmt" + "os" + "time" "b612.me/starainrt" "github.com/spf13/cobra" @@ -14,26 +16,38 @@ var gencmd = &cobra.Command{ 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 } - err := starainrt.FillWithRandom(args[0], num, 1024*1024, sum, func(pect float64) { - if pect == 100 { - fmt.Println("文件已处理:100.000000%") - } else { - fmt.Printf("文件已处理:%f%%\r", pect) - } + 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 index 2350f5a..cd68a4c 100644 --- a/vtqe/tools/hash.go +++ b/vtqe/tools/hash.go @@ -49,7 +49,7 @@ var hashcmd = &cobra.Command{ result, err = crypto.SumAll([]byte(args[0]), method) } if err != nil { - starlog.StdPrintln(0, starlog.RED, "错误:"+err.Error()) + starlog.Criticalln("错误:" + err.Error()) } for _, v := range method { fmt.Printf("%s:%s\n", v, result[v]) diff --git a/vtqe/tools/http.go b/vtqe/tools/http.go index 75efbb4..715f36a 100644 --- a/vtqe/tools/http.go +++ b/vtqe/tools/http.go @@ -1,6 +1,7 @@ package tools import ( + "encoding/base64" "fmt" "io" "io/ioutil" @@ -19,27 +20,48 @@ import ( 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) - fmt.Println("Listening On Port:" + port) + starlog.Infoln("Listening On Port:" + port) if up { - fmt.Println("upload is openned,path is /vtqeupload1127") + starlog.Infoln("upload is openned,path is /vtqeupload1127") http.HandleFunc("/vtqeupload1127", uploadfile) } - err := http.ListenAndServe(ip+":"+port, nil) + 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.StdPrintln(0, starlog.RED, "Error:"+err.Error()) + starlog.Criticalln("Error:" + err.Error()) } }, } @@ -52,18 +74,18 @@ func uploadfile(w http.ResponseWriter, r *http.Request) { r.ParseMultipartForm(10485760) file, handler, err := r.FormFile("victorique") if err != nil { - fmt.Println(err) + starlog.Errorln(err) w.WriteHeader(502) w.Write([]byte(err.Error())) return } defer file.Close() - fmt.Printf("Upload %s From %s\n", handler.Filename, r.RemoteAddr) + 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 { - fmt.Println(err) + starlog.Errorln(err) return } defer f.Close() @@ -71,11 +93,40 @@ func uploadfile(w http.ResponseWriter, r *http.Request) { } 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"] - fmt.Println("Get " + p + " " + r.RemoteAddr) + log.Noticeln("Get " + p + " " + r.RemoteAddr) fullpath, _ := filepath.Abs(path + p) if p == "/" { @@ -113,7 +164,7 @@ func httplisten(w http.ResponseWriter, r *http.Request) { } fpdst, err := os.Open(fullpath) if err != nil { - fmt.Println(err) + log.Errorln(err) w.WriteHeader(403) w.Write([]byte("

403 NO ACCESS

")) return @@ -142,7 +193,7 @@ func httplisten(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Transfer-Encoding", "binary") w.Header().Set("Accept-Ranges", "bytes") w.Header().Set("ETag", etag) - w.Header().Set("Last-Modified", fpinfo.ModTime().Format("Mon,2 Jan 2006 15:04:05 MST")) + 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 @@ -166,19 +217,26 @@ func httplisten(w http.ResponseWriter, r *http.Request) { } } 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 } - return + break } - w.Write(buf[0:n]) } } else { w.Header().Set("Content-Length", strconv.FormatInt(fpinfo.Size(), 10)) @@ -202,7 +260,11 @@ func httplisten(w http.ResponseWriter, r *http.Request) { return } if rangeEnd == -1 { - w.Write(buf[0:n]) + ns, err := w.Write(buf[0:n]) + transferData += ns + if err != nil { + starlog.Errorln("Transfer Error:", err) + } } else { if count > rangeEnd { break @@ -211,19 +273,34 @@ func httplisten(w http.ResponseWriter, r *http.Request) { w.Write(buf[0 : rangeEnd-count+1]) break } else { - w.Write(buf[0:n]) + ns, err := w.Write(buf[0:n]) + transferData += ns + if err != nil { + starlog.Errorln("Transfer Error:", err) + } count += int64(n) } } } - fmt.Println(fpinfo.Name(), "客户端下载已结束") } + 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 { - fmt.Println(err) + starlog.Errorln(err) w.WriteHeader(403) w.Write([]byte("

May Cannot Access!

")) } @@ -252,10 +329,3 @@ func ReadFolder(w http.ResponseWriter, r *http.Request, fullpath string, isroot w.Write([]byte("\n")) return } -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, "是否开启文件上传") - Maincmd.AddCommand(httpcmd) -} diff --git a/vtqe/tools/image.go b/vtqe/tools/image.go index de46e8f..64abe4e 100644 --- a/vtqe/tools/image.go +++ b/vtqe/tools/image.go @@ -28,13 +28,13 @@ var imgMirrorCmd = &cobra.Command{ Long: "图像镜像翻转<水平>", Run: func(this *cobra.Command, args []string) { if len(args) == 0 { - starlog.StdPrintln(0, starlog.RED, "请指定需要转换的图像!") + starlog.Errorln("请指定需要转换的图像!") return } for _, v := range args { img, err := OpenImage(v) if err != nil { - starlog.StdPrintln(0, starlog.RED, err, v) + starlog.Errorln(err, v) continue } size := img.Bounds() @@ -45,7 +45,7 @@ var imgMirrorCmd = &cobra.Command{ } } if err := SavePhoto(v, nimg); err != nil { - starlog.StdPrintln(0, starlog.RED, err, v) + starlog.Errorln(err, v) continue } else { fmt.Println(v, "转换已完成!") @@ -61,18 +61,18 @@ var imgAlpha = &cobra.Command{ Long: "设置alpha通道透明度", Run: func(this *cobra.Command, args []string) { if len(args) == 0 { - starlog.StdPrintln(0, starlog.RED, "请指定需要转换的图像!") + starlog.Errorln("请指定需要转换的图像!") return } for _, v := range args { img, err := OpenImage(v) if err != nil { - starlog.StdPrintln(0, starlog.RED, err, v) + starlog.Errorln(err, v) continue } img = SetAlpha(img, 4) if err := SavePhoto(v, img); err != nil { - starlog.StdPrintln(0, starlog.RED, err, v) + starlog.Errorln(err, v) continue } else { fmt.Println(v, "转换已完成!") diff --git a/vtqe/tools/merge.go b/vtqe/tools/merge.go index e0d9207..b9ed571 100644 --- a/vtqe/tools/merge.go +++ b/vtqe/tools/merge.go @@ -35,7 +35,7 @@ var mergecmd = &cobra.Command{ } }) if err != nil { - starlog.StdPrintln(0, starlog.RED, err.Error) + starlog.Errorln(err.Error) } }, diff --git a/vtqe/tools/net.go b/vtqe/tools/net.go index 07ba985..8d0d362 100644 --- a/vtqe/tools/net.go +++ b/vtqe/tools/net.go @@ -5,6 +5,7 @@ import ( "io" "net" "strconv" + "strings" "time" "github.com/spf13/cobra" @@ -668,21 +669,23 @@ func TcpNatServer(tcplocal *net.TCPAddr, pwd string) { }() } return - } - }() - go func() { - if isconn { + } else { + isRun := false buf := make([]byte, 7) - n, err := conn.Read(buf) - if n != 7 || err != nil { - conn.Close() - return + 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 { - conn.Write(waitconn[0].Msg) + 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) @@ -696,7 +699,12 @@ func TcpNatServer(tcplocal *net.TCPAddr, pwd string) { } } else { fmt.Println("链接已加入等待列表") - tcpnats := tcpnat{Msg: buf, Conn: conn, Date: time.Now().Unix()} + 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 diff --git a/vtqe/tools/split.go b/vtqe/tools/split.go index 979e6d8..46cb083 100644 --- a/vtqe/tools/split.go +++ b/vtqe/tools/split.go @@ -27,12 +27,12 @@ var splitcmd = &cobra.Command{ num, _ = this.Flags().GetInt("num") } if !starainrt.Exists(src) { - starlog.StdPrintln(0, starlog.RED, "源文件不存在") + starlog.Errorln("源文件不存在") this.Help() return } if num == 0 { - starlog.StdPrintln(0, starlog.RED, "参数num不合法", "red") + starlog.Errorln("参数num不合法", "red") this.Help() return } @@ -46,7 +46,7 @@ var splitcmd = &cobra.Command{ } }) if err != nil { - starlog.StdPrintln(0, starlog.RED, err.Error) + starlog.Errorln(err.Error) } }, diff --git a/vtqe/tools/tcp.go b/vtqe/tools/tcp.go index d632e01..7117125 100644 --- a/vtqe/tools/tcp.go +++ b/vtqe/tools/tcp.go @@ -14,6 +14,7 @@ import ( "time" "b612.me/starainrt" + "b612.me/starlog" "github.com/spf13/cobra" ) @@ -23,7 +24,8 @@ var tcpcmd = &cobra.Command{ Short: "发送并监听tcp数据包", Long: "发送并监听tcp数据包", Run: func(this *cobra.Command, args []string) { - if len(args) != 1 { + r, _ := this.Flags().GetBool("recvonly") + if len(args) != 1 && !r { fmt.Println("请指定远程tcp地址") return } @@ -51,19 +53,19 @@ var tcpcmd = &cobra.Command{ fmt.Printf("Error Connect From %s : %s\n", conn.RemoteAddr(), err.Error()) continue } - fmt.Printf("Accept Connect From %s\n", conn.RemoteAddr()) + 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 { - fmt.Printf("Error from %s Where Message=%s\n", conns.RemoteAddr(), err.Error()) + starlog.Infof("Error from %s Where Message=%s\n", conns.RemoteAddr(), err.Error()) conn.Close() return } - fmt.Printf("Receive Msg From %s : %s\n", conns.RemoteAddr(), string(buf[0:n])) + starlog.Infof("Receive Msg From %s : %s\n", conns.RemoteAddr(), string(buf[0:n])) if b { - fmt.Println(buf[0:n]) + starlog.Infof("%#v", buf[0:n]) } } @@ -71,56 +73,62 @@ var tcpcmd = &cobra.Command{ } }() } - mytcp, err := net.DialTimeout("tcp", args[0], time.Second*15) - if err != nil { - fmt.Println(err) - if s { - for { - time.Sleep(time.Second * 10) + 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 } - 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 + 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)) } - 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 } - _, err = mytcp.Write(sendbyte) } + }() + for { + buf := make([]byte, 204800) + n, err := mytcp.Read(buf) if err != nil { - fmt.Printf("Error from %s Where Message=%s\n", mytcp.RemoteAddr().String(), err.Error()) + 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 { - fmt.Printf("Error from %s Where Message=%s\n", mytcp.RemoteAddr().String(), err.Error()) - return - } - fmt.Printf("Receive Msg From %s : %s\n", mytcp.RemoteAddr().String(), string(buf[0:n])) - if b { - fmt.Println(buf[0:n]) + 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) } } }, @@ -141,6 +149,7 @@ func init() { 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) } diff --git a/vtqe/tools/udp.go b/vtqe/tools/udp.go index 4b9ff0f..41fb3e0 100644 --- a/vtqe/tools/udp.go +++ b/vtqe/tools/udp.go @@ -5,8 +5,10 @@ import ( "net" "strconv" "strings" + "time" "b612.me/starainrt" + "b612.me/starlog" "github.com/spf13/cobra" ) @@ -16,7 +18,9 @@ var udpcmd = &cobra.Command{ Short: "发送并监听udp数据包", Long: "发送并监听udp数据包", Run: func(this *cobra.Command, args []string) { - if len(args) != 1 { + var raddr *net.UDPAddr + r, _ := this.Flags().GetBool("recvonly") + if len(args) != 1 && !r { fmt.Println("请指定远程udp地址") return } @@ -25,7 +29,9 @@ var udpcmd = &cobra.Command{ s, _ := this.Flags().GetBool("local") b, _ := this.Flags().GetBool("byte") laddr, err := net.ResolveUDPAddr("udp", a+":"+l) - raddr, err := net.ResolveUDPAddr("udp", args[0]) + if !r { + raddr, err = net.ResolveUDPAddr("udp", args[0]) + } if err != nil { fmt.Println(err) return @@ -42,60 +48,66 @@ var udpcmd = &cobra.Command{ buf := make([]byte, 204800) n, addr, err := udplisten.ReadFromUDP(buf) if err != nil { - fmt.Printf("Error from %s Where Message=%s\n", addr.String(), err.Error()) + starlog.Errorln("Error from %s Where Message=%s\n", addr.String(), err.Error()) continue } - fmt.Printf("Receive Msg From %s : %s\n", addr.String(), string(buf[0:n])) + starlog.Infof("Receive Msg From %s : %s\n", addr.String(), string(buf[0:n])) if b { - fmt.Println(buf[0:n]) + starlog.Infof("%#v\n", buf[0:n]) } } }() } - 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 + 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)) } - 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 } - _, err = myudp.Write(sendbyte) } + }() + for { + buf := make([]byte, 204800) + n, err := myudp.Read(buf) if err != nil { - fmt.Printf("Error from %s Where Message=%s\n", myudp.RemoteAddr().String(), err.Error()) + starlog.Infof("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 { - fmt.Printf("Error from %s Where Message=%s\n", myudp.RemoteAddr().String(), err.Error()) - return - } - fmt.Printf("Receive Msg From %s : %s\n", myudp.RemoteAddr().String(), string(buf[0:n])) - if b { - fmt.Println(buf[0:n]) + 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) } } }, @@ -111,4 +123,5 @@ func init() { 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 index a3f3d0a..533e41d 100644 --- a/vtqe/tools/vic.go +++ b/vtqe/tools/vic.go @@ -22,7 +22,7 @@ var viccmd = &cobra.Command{ rep, _ := this.Flags().GetBool("replace") ext, _ := this.Flags().GetBool("extension") if len(args) != 2 || args[1] != "sakura" { - starlog.StdPrintln(0, starlog.RED, "ヴィクトリカだけが使えるよ") + starlog.Errorln("ヴィクトリカだけが使えるよ") return } shell := func(pect float64) { @@ -77,7 +77,7 @@ var viccmd = &cobra.Command{ } } if err != nil { - starlog.StdPrintln(0, starlog.RED, err) + starlog.Errorln(err) return } },