Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 874012fe56 | |||
| 7c2dab6aa6 | |||
| 6c66e84a86 | |||
| eec673f640 | |||
| 196a469c34 | |||
| 7d30c2ddc9 | |||
| dc32f808cf | |||
| e27f6d4006 | |||
| cb997cc49c | |||
| d3e6058862 |
@@ -0,0 +1,38 @@
|
|||||||
|
// +build windows
|
||||||
|
|
||||||
|
package tools
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
|
"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 {
|
||||||
|
if len(args) != 1 {
|
||||||
|
os.Exit(1)
|
||||||
|
} else {
|
||||||
|
exec.Command("cmd.exe", "/c", "explorer "+filepath.Dir(args[0])).Run()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
s := bufio.NewScanner(os.Stdin)
|
||||||
|
for s.Scan() {
|
||||||
|
exec.Command("cmd.exe", "/c", "explorer "+filepath.Dir(s.Text())).Run()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
Maincmd.AddCommand(cdcmd)
|
||||||
|
}
|
||||||
+1
-1
@@ -4,7 +4,7 @@ import (
|
|||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
var Version string = "0.1.12"
|
var Version string = "0.1.20"
|
||||||
|
|
||||||
var Maincmd = &cobra.Command{
|
var Maincmd = &cobra.Command{
|
||||||
Use: "",
|
Use: "",
|
||||||
|
|||||||
+4
-2
@@ -180,6 +180,7 @@ func init() {
|
|||||||
curlcmd.Flags().IntP("max-time", "m", 0, "最大传输超时时间")
|
curlcmd.Flags().IntP("max-time", "m", 0, "最大传输超时时间")
|
||||||
curlcmd.Flags().Int("connect-timeout", 15, "最大连接建立超时时间")
|
curlcmd.Flags().Int("connect-timeout", 15, "最大连接建立超时时间")
|
||||||
curlcmd.Flags().StringP("user-agent", "A", "", "UA设置")
|
curlcmd.Flags().StringP("user-agent", "A", "", "UA设置")
|
||||||
|
curlupcmd.Flags().StringP("address", "a", "", "远端ip:端口号")
|
||||||
curlcmd.AddCommand(curlupcmd)
|
curlcmd.AddCommand(curlupcmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,10 +189,11 @@ var curlupcmd = &cobra.Command{
|
|||||||
Short: "victorique上传工具",
|
Short: "victorique上传工具",
|
||||||
Long: "victorique上传工具",
|
Long: "victorique上传工具",
|
||||||
Run: func(this *cobra.Command, args []string) {
|
Run: func(this *cobra.Command, args []string) {
|
||||||
if len(args) != 2 {
|
if len(args) != 1 {
|
||||||
fmt.Println(args, "不合法啊")
|
fmt.Println(args, "不合法啊")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
a, _ := this.Flags().GetString("address")
|
||||||
curl := starainrt.NewStarCurl()
|
curl := starainrt.NewStarCurl()
|
||||||
curl.TimeOut = 0
|
curl.TimeOut = 0
|
||||||
shell := func(pect float64) {
|
shell := func(pect float64) {
|
||||||
@@ -201,7 +203,7 @@ var curlupcmd = &cobra.Command{
|
|||||||
fmt.Printf("已完成:%f%%\r", pect)
|
fmt.Printf("已完成:%f%%\r", pect)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
data, err := curl.CurlWithFile("http://"+args[0]+"/vtqeupload1127", nil, "victorique", args[1], "", false, shell)
|
data, err := curl.CurlWithFile("http://"+a+"/vtqeupload1127", nil, "victorique", args[0], "", false, shell)
|
||||||
fmt.Println(string(data))
|
fmt.Println(string(data))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
|
|||||||
+10
-6
@@ -113,8 +113,8 @@ func httplisten(w http.ResponseWriter, r *http.Request) {
|
|||||||
fpdst, err := os.Open(fullpath)
|
fpdst, err := os.Open(fullpath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
w.WriteHeader(502)
|
w.WriteHeader(403)
|
||||||
w.Write([]byte("<h1>502 ERROR</h1>"))
|
w.Write([]byte("<h1>403 NO ACCESS</h1>"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
fpinfo, _ := os.Stat(fullpath)
|
fpinfo, _ := os.Stat(fullpath)
|
||||||
@@ -160,23 +160,27 @@ func ReadFolder(w http.ResponseWriter, r *http.Request, fullpath string, isroot
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
w.WriteHeader(403)
|
w.WriteHeader(403)
|
||||||
w.Write([]byte("<h1>Cannot Access!</h1>"))
|
w.Write([]byte("<h1>May Cannot Access!</h1>"))
|
||||||
return
|
|
||||||
}
|
}
|
||||||
w.Write([]byte("<html>\n<style>\np{margin: 2px auto}\n</style>\n<h1>Victorique Http Server - " + Version + "</h1>"))
|
w.Write([]byte("<html>\n<style>\np{margin: 2px auto}\n</style>\n<h1>Victorique Http Server - " + Version + "</h1>"))
|
||||||
if up {
|
if up {
|
||||||
w.Write([]byte("<a href=/vtqeupload1127/web>Upload Web Page Is Openned!</a><br /><br />"))
|
w.Write([]byte("<a href=/vtqeupload1127/web>Upload Web Page Is Openned!</a><br /><br />"))
|
||||||
}
|
}
|
||||||
w.Write([]byte("<hr /><pre>\n"))
|
w.Write([]byte("<hr /><pre>\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 {
|
if !isroot {
|
||||||
w.Write([]byte(fmt.Sprintf("<p><a href='%s'>%s</a> %s</p>\n", "..", "..", "上层文件夹")))
|
w.Write([]byte(fmt.Sprintf("<p><a href='%s'>%s</a> %s</p>\n", r.URL.Path+"/..", "..", "上层文件夹")))
|
||||||
}
|
}
|
||||||
for _, v := range dir {
|
for _, v := range dir {
|
||||||
if v.Name() != "." || v.Name() != ".." {
|
if v.Name() != "." || v.Name() != ".." {
|
||||||
if !v.IsDir() {
|
if !v.IsDir() {
|
||||||
w.Write([]byte(fmt.Sprintf("<p><a href='%s'>%s</a> %d %s</p>\n", r.URL.Path+"/"+v.Name(), v.Name(), int(v.Size()), v.ModTime().Format("2006-01-02 15:04:05"))))
|
w.Write([]byte(fmt.Sprintf("<p><a href='%s'>%s</a> %d %s</p>\n", r.URL.Path+"/"+v.Name(), v.Name(), int(v.Size()), v.ModTime().Format("2006-01-02 15:04:05"))))
|
||||||
} else {
|
} else {
|
||||||
w.Write([]byte(fmt.Sprintf("<p><a href='%s'>%s</a> %s %s</p>\n", v.Name(), v.Name(), "文件夹", v.ModTime().Format("2006-01-02 15:04:05"))))
|
w.Write([]byte(fmt.Sprintf("<p><a href='%s'>%s</a> %s %s</p>\n", r.URL.Path+"/"+v.Name(), v.Name(), "文件夹", v.ModTime().Format("2006-01-02 15:04:05"))))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,798 @@
|
|||||||
|
package tools
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net"
|
||||||
|
"strconv"
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
go func() {
|
||||||
|
if isconn {
|
||||||
|
buf := make([]byte, 7)
|
||||||
|
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)
|
||||||
|
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("链接已加入等待列表")
|
||||||
|
tcpnats := tcpnat{Msg: buf, 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+105
-9
@@ -2,8 +2,15 @@ package tools
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"regexp"
|
||||||
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"b612.me/starainrt"
|
||||||
|
|
||||||
"b612.me/sshd"
|
"b612.me/sshd"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
@@ -15,14 +22,17 @@ var sftpcmd = &cobra.Command{
|
|||||||
Long: "sftp上传下载",
|
Long: "sftp上传下载",
|
||||||
Run: func(this *cobra.Command, args []string) {
|
Run: func(this *cobra.Command, args []string) {
|
||||||
d, _ := this.Flags().GetBool("download")
|
d, _ := this.Flags().GetBool("download")
|
||||||
|
s, _ := this.Flags().GetString("src")
|
||||||
|
r, _ := this.Flags().GetString("dst")
|
||||||
i, _ := this.Flags().GetString("identify")
|
i, _ := this.Flags().GetString("identify")
|
||||||
k, _ := this.Flags().GetString("password")
|
k, _ := this.Flags().GetString("password")
|
||||||
p, _ := this.Flags().GetInt("port")
|
p, _ := this.Flags().GetInt("port")
|
||||||
b, _ := this.Flags().GetInt("buffer")
|
b, _ := this.Flags().GetInt("buffer")
|
||||||
|
g, _ := this.Flags().GetString("regexp")
|
||||||
var user, host string
|
var user, host string
|
||||||
var err error
|
var err error
|
||||||
if len(args) != 3 {
|
if len(args) != 1 {
|
||||||
fmt.Println("sftp <[user@]Host> <Local> <Remote>")
|
fmt.Println("sftp <[user@]Host> -s <Local> -d <Remote>")
|
||||||
this.Help()
|
this.Help()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -35,20 +45,22 @@ var sftpcmd = &cobra.Command{
|
|||||||
host = hosts[1]
|
host = hosts[1]
|
||||||
}
|
}
|
||||||
fmt.Println("进行SSH连接……")
|
fmt.Println("进行SSH连接……")
|
||||||
client, err := sshd.Connect(user, k, host, i, p, []string{})
|
myssh := new(sshd.StarSSH)
|
||||||
|
err = myssh.Connect(user, k, host, i, p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer client.Close()
|
defer myssh.Close()
|
||||||
fmt.Println("已连接上……")
|
fmt.Println("已连接上……")
|
||||||
sftp, err := sshd.CreateSftp(client)
|
sftp, err := sshd.CreateSftp(myssh.Client)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer sftp.Close()
|
defer sftp.Close()
|
||||||
fmt.Println("已建立SFTP……")
|
fmt.Println("已建立SFTP……")
|
||||||
|
|
||||||
shell := func(pect float64) {
|
shell := func(pect float64) {
|
||||||
if pect != 100.0 {
|
if pect != 100.0 {
|
||||||
fmt.Printf("传输已完成:%f%%\r", pect)
|
fmt.Printf("传输已完成:%f%%\r", pect)
|
||||||
@@ -56,10 +68,91 @@ var sftpcmd = &cobra.Command{
|
|||||||
fmt.Printf("传输已完成:%f%%\n", pect)
|
fmt.Printf("传输已完成:%f%%\n", pect)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !d {
|
var UploadDir func(string, string)
|
||||||
err = sshd.FtpTransferOutFunc(args[1], args[2], b, shell, sftp)
|
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 {
|
} else {
|
||||||
err = sshd.FtpTransferInFunc(args[1], args[2], b, shell, sftp)
|
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 {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
@@ -69,9 +162,12 @@ var sftpcmd = &cobra.Command{
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Maincmd.AddCommand(sftpcmd)
|
Maincmd.AddCommand(sftpcmd)
|
||||||
sftpcmd.Flags().BoolP("download", "d", false, "进行下载")
|
sftpcmd.Flags().BoolP("download", "D", false, "进行下载")
|
||||||
sftpcmd.Flags().StringP("identify", "i", "", "RSA登录密钥")
|
sftpcmd.Flags().StringP("identify", "i", "", "RSA登录密钥")
|
||||||
sftpcmd.Flags().StringP("password", "k", "", "登录密码")
|
sftpcmd.Flags().StringP("password", "k", "", "登录密码")
|
||||||
|
sftpcmd.Flags().StringP("src", "s", "", "本机路径/若为下载则相反")
|
||||||
|
sftpcmd.Flags().StringP("dst", "d", "", "远程路径/若为下载则相反")
|
||||||
sftpcmd.Flags().IntP("port", "p", 22, "登录端口")
|
sftpcmd.Flags().IntP("port", "p", 22, "登录端口")
|
||||||
|
sftpcmd.Flags().StringP("regexp", "r", "", "正则表达式")
|
||||||
sftpcmd.Flags().IntP("buffer", "b", 10240, "buffer大小")
|
sftpcmd.Flags().IntP("buffer", "b", 10240, "buffer大小")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,434 @@
|
|||||||
|
package tools
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
|
"net"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"regexp"
|
||||||
|
"runtime"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"b612.me/starainrt"
|
||||||
|
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
|
var tcpcmd = &cobra.Command{
|
||||||
|
Use: "tcp",
|
||||||
|
Short: "发送并监听tcp数据包",
|
||||||
|
Long: "发送并监听tcp数据包",
|
||||||
|
Run: func(this *cobra.Command, args []string) {
|
||||||
|
if len(args) != 1 {
|
||||||
|
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
|
||||||
|
}
|
||||||
|
fmt.Printf("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())
|
||||||
|
conn.Close()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Printf("Receive Msg From %s : %s\n", conns.RemoteAddr(), string(buf[0:n]))
|
||||||
|
if b {
|
||||||
|
fmt.Println(buf[0:n])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}(conn)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
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 {
|
||||||
|
fmt.Printf("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])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
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.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)
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -15,9 +15,6 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
showVersion bool
|
|
||||||
version string
|
|
||||||
gitCommit string
|
|
||||||
counter int
|
counter int
|
||||||
timeout string
|
timeout string
|
||||||
interval string
|
interval string
|
||||||
@@ -28,6 +25,8 @@ var (
|
|||||||
httpPost bool
|
httpPost bool
|
||||||
httpUA string
|
httpUA string
|
||||||
|
|
||||||
|
permanent bool
|
||||||
|
|
||||||
dnsServer []string
|
dnsServer []string
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -48,11 +47,13 @@ var tcpingcmd = &cobra.Command{
|
|||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
sigs = make(chan os.Signal, 1)
|
sigs = make(chan os.Signal, 1)
|
||||||
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
|
||||||
if showVersion {
|
if permanent && counter != 4 {
|
||||||
fmt.Printf("version: %s\n", version)
|
fmt.Println("不能同时指定-t与-c,请检查您的输入")
|
||||||
fmt.Printf("git: %s\n", gitCommit)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if permanent {
|
||||||
|
counter = 0
|
||||||
|
}
|
||||||
if len(args) != 2 && len(args) != 1 {
|
if len(args) != 2 && len(args) != 1 {
|
||||||
cmd.Usage()
|
cmd.Usage()
|
||||||
return
|
return
|
||||||
@@ -162,15 +163,15 @@ var tcpingcmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
tcpingcmd.Flags().BoolVarP(&showVersion, "version", "v", false, "show the version and exit")
|
|
||||||
tcpingcmd.Flags().IntVarP(&counter, "counter", "c", 4, "ping的次数")
|
tcpingcmd.Flags().IntVarP(&counter, "counter", "c", 4, "ping的次数")
|
||||||
|
tcpingcmd.Flags().BoolVarP(&permanent, "permanent", "t", false, "一直ping下去")
|
||||||
tcpingcmd.Flags().StringVarP(&timeout, "timeout", "T", "1s", `超时时间, 单位为 "ns", "us" (or "µs"), "ms", "s", "m", "h"`)
|
tcpingcmd.Flags().StringVarP(&timeout, "timeout", "T", "1s", `超时时间, 单位为 "ns", "us" (or "µs"), "ms", "s", "m", "h"`)
|
||||||
tcpingcmd.Flags().StringVarP(&interval, "interval", "I", "1s", `ping间隔时间, 单位为 "ns", "us" (or "µs"), "ms", "s", "m", "h"`)
|
tcpingcmd.Flags().StringVarP(&interval, "interval", "I", "1s", `ping间隔时间, 单位为 "ns", "us" (or "µs"), "ms", "s", "m", "h"`)
|
||||||
|
|
||||||
tcpingcmd.Flags().BoolVarP(&httpMode, "http", "H", false, `Use "HTTP" mode. will ignore URI Schema, force to http`)
|
tcpingcmd.Flags().BoolVarP(&httpMode, "http", "H", false, `Use "HTTP" mode. will ignore URI Schema, force to http`)
|
||||||
tcpingcmd.Flags().BoolVar(&httpHead, "head", false, `使用http head模式`)
|
tcpingcmd.Flags().BoolVar(&httpHead, "head", false, `使用http head模式`)
|
||||||
tcpingcmd.Flags().BoolVar(&httpPost, "post", false, `使用http post模式`)
|
tcpingcmd.Flags().BoolVar(&httpPost, "post", false, `使用http post模式`)
|
||||||
tcpingcmd.Flags().StringVar(&httpUA, "user-agent", "tcping", `自定义UA`)
|
tcpingcmd.Flags().StringVar(&httpUA, "user-agent", "victorique/tcping", `自定义UA`)
|
||||||
|
|
||||||
tcpingcmd.Flags().StringArrayVarP(&dnsServer, "dns-server", "D", nil, `使用自定义DNS服务器`)
|
tcpingcmd.Flags().StringArrayVarP(&dnsServer, "dns-server", "D", nil, `使用自定义DNS服务器`)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,114 @@
|
|||||||
|
package tools
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"b612.me/starainrt"
|
||||||
|
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
|
var udpcmd = &cobra.Command{
|
||||||
|
Use: "udp",
|
||||||
|
Short: "发送并监听udp数据包",
|
||||||
|
Long: "发送并监听udp数据包",
|
||||||
|
Run: func(this *cobra.Command, args []string) {
|
||||||
|
if len(args) != 1 {
|
||||||
|
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)
|
||||||
|
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 {
|
||||||
|
fmt.Printf("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]))
|
||||||
|
if b {
|
||||||
|
fmt.Println(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
|
||||||
|
}
|
||||||
|
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 {
|
||||||
|
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])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
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, "启动本地监听")
|
||||||
|
}
|
||||||
+1
-3
@@ -21,12 +21,10 @@ var viccmd = &cobra.Command{
|
|||||||
pwd, _ := this.Flags().GetString("key")
|
pwd, _ := this.Flags().GetString("key")
|
||||||
rep, _ := this.Flags().GetBool("replace")
|
rep, _ := this.Flags().GetBool("replace")
|
||||||
ext, _ := this.Flags().GetBool("extension")
|
ext, _ := this.Flags().GetBool("extension")
|
||||||
if len(args) != 2 {
|
if len(args) != 2 || args[1] != "sakura" {
|
||||||
if len(args) < 2 || args[1] != "sakura" {
|
|
||||||
starlog.Println("ヴィクトリカだけが使えるよ", "red", "b")
|
starlog.Println("ヴィクトリカだけが使えるよ", "red", "b")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
|
||||||
shell := func(pect float64) {
|
shell := func(pect float64) {
|
||||||
if pect == 100 {
|
if pect == 100 {
|
||||||
fmt.Println("已处理:100.000000%")
|
fmt.Println("已处理:100.000000%")
|
||||||
|
|||||||
Reference in New Issue
Block a user