diff --git a/net/cmd.go b/net/cmd.go index 5da128e..a5532ce 100644 --- a/net/cmd.go +++ b/net/cmd.go @@ -18,7 +18,7 @@ func init() { } var nattestc NatTesterClient -var nettests NatTesterServer +var nattests NatTesterServer var natc NatClient var nats NatServer @@ -61,6 +61,13 @@ func init() { CmdNatClient.Flags().IntVarP(&nattestc.Timeout, "timeout", "t", 2, "超时时间") CmdNatClient.Flags().StringSliceVarP(&nattestc.dns, "dns", "d", nil, "自定义dns服务器") Cmd.AddCommand(CmdNatClient) + + CmdNatServer.Flags().StringVarP(&nattests.MainIP, "main-ip", "m", "10.0.0.5", "主IP") + CmdNatServer.Flags().StringVarP(&nattests.AltIP, "alt-ip", "a", "10.0.0.2", "备用IP") + CmdNatServer.Flags().StringVarP(&nattests.MainPort, "main-port", "M", "41127", "主端口") + CmdNatServer.Flags().StringVarP(&nattests.AltPort, "alt-port", "A", "46610", "备用端口") + CmdNatServer.Flags().StringVarP(&nattests.LogPath, "log", "l", "", "日志文件") + Cmd.AddCommand(CmdNatServer) } var CmdNatPClient = &cobra.Command{ @@ -86,8 +93,8 @@ var CmdNatPServer = &cobra.Command{ var CmdNatClient = &cobra.Command{ Use: "natc", - Short: "nat类型测试工具", - Long: "基于RFC3489的nat类型测试工具", + Short: "nat类型测试工具 - 客户端", + Long: "基于RFC3489的nat类型测试工具(客户端)", Run: func(cmd *cobra.Command, args []string) { if nattestc.dns != nil { UseCustomeDNS(nattestc.dns) @@ -112,6 +119,15 @@ var CmdNatClient = &cobra.Command{ }, } +var CmdNatServer = &cobra.Command{ + Use: "nats", + Short: "nat类型测试工具 - 服务端", + Long: "基于RFC3489的nat类型测试工具(服务端)", + Run: func(cmd *cobra.Command, args []string) { + nattests.Run() + }, +} + var CmdNetTrace = &cobra.Command{ Use: "trace", Short: "网络路径追踪", diff --git a/net/nats.go b/net/nats.go index 9fbd5c2..de37a83 100644 --- a/net/nats.go +++ b/net/nats.go @@ -113,31 +113,12 @@ func (n *NatTesterServer) Analyse(c *net.UDPConn, r *net.UDPAddr, cmds []string) case "startnat1": n.alt.WriteToUDP([]byte("stage1"), r) starlog.Infof("Start NAT1 Test from %s,Recv Local:%s Send Local:%s\n", r.String(), c.LocalAddr().String(), n.alt.LocalAddr().String()) - case "stage1recv": - n.maina.WriteToUDP([]byte("result::nat1"), r) - starlog.Infof("Recv NAT1 Test from %s,Recv Local:%s Send Local:%s\n", r.String(), c.LocalAddr().String(), n.maina.LocalAddr().String()) case "startnat2": n.mainb.WriteToUDP([]byte("stage2"), r) starlog.Infof("Start NAT2 Test from %s,Recv Local:%s Send Local:%s\n", r.String(), c.LocalAddr().String(), n.mainb.LocalAddr().String()) - case "stage2recv": - n.maina.WriteToUDP([]byte("result::nat2"), r) - starlog.Infof("Recv NAT2 Test from %s,Recv Local:%s Send Local:%s\n", r.String(), c.LocalAddr().String(), n.maina.LocalAddr().String()) case "startnat3": n.maina.WriteToUDP([]byte("stage3"), r) starlog.Infof("Start NAT3 Test from %s,Recv Local:%s Send Local:%s\n", r.String(), c.LocalAddr().String(), n.maina.LocalAddr().String()) - case "stage3recv": - n.maina.WriteToUDP([]byte("result::nat3"), r) - starlog.Infof("Recv NAT3 Test from %s,Recv Local:%s Send Local:%s\n", r.String(), c.LocalAddr().String(), n.maina.LocalAddr().String()) } return nil } - -func main() { - server := NatTesterServer{ - MainIP: "10.0.0.5", - AltIP: "10.0.0.2", - MainPort: "41127", - AltPort: "46610", - } - fmt.Println(server.Run()) -} diff --git a/net/sshjar.go b/net/sshjar.go index 5afd872..3688298 100644 --- a/net/sshjar.go +++ b/net/sshjar.go @@ -5,7 +5,7 @@ import ( "b612.me/starlog" "b612.me/starnet" "crypto/elliptic" - "encoding/json" + "encoding/csv" "fmt" "github.com/spf13/cobra" "golang.org/x/crypto/ssh" @@ -13,15 +13,17 @@ import ( "os" "os/signal" "strings" + "time" ) var ( - listenAddr string - keyFile string - KeyPasswd string - outpath string - curlUrl string - curlArg []string + listenAddr string + keyFile string + KeyPasswd string + outpath string + curlUrl string + serverVersion string + curlArg []string ) func init() { @@ -29,6 +31,7 @@ func init() { cmdSSHJar.Flags().StringVarP(&keyFile, "key", "k", "", "私钥文件") cmdSSHJar.Flags().StringVarP(&KeyPasswd, "passwd", "p", "", "私钥密码") cmdSSHJar.Flags().StringVarP(&outpath, "output", "o", "", "输出文件") + cmdSSHJar.Flags().StringVarP(&serverVersion, "version", "v", "OpenSSH", "SSH版本") } var cmdSSHJar = &cobra.Command{ @@ -36,11 +39,11 @@ var cmdSSHJar = &cobra.Command{ Short: "SSH蜜罐", Long: "SSH蜜罐", Run: func(cmd *cobra.Command, args []string) { - runSSHHoneyJar(listenAddr, keyFile, KeyPasswd, outpath) + runSSHHoneyJar(listenAddr, keyFile, KeyPasswd, outpath, serverVersion) }, } -func runSSHHoneyJar(listenAddr, keyFile, KeyPasswd, outpath string) { +func runSSHHoneyJar(listenAddr, keyFile, KeyPasswd, outpath, version string) { var f *os.File var err error if outpath != "" { @@ -50,16 +53,17 @@ func runSSHHoneyJar(listenAddr, keyFile, KeyPasswd, outpath string) { return } } + conn := csv.NewWriter(f) defer f.Close() + defer conn.Flush() config := &ssh.ServerConfig{ + ServerVersion: version, // 密码验证回调函数 PasswordCallback: func(c ssh.ConnMetadata, pass []byte) (*ssh.Permissions, error) { starlog.Infof("Login attempt from %s with %s %s\n", c.RemoteAddr(), c.User(), string(pass)) - data := []string{c.RemoteAddr().String(), c.User(), string(pass)} - bts, _ := json.Marshal(data) + data := []string{time.Now().Format("2006-01-02 15:04:05"), c.RemoteAddr().String(), c.User(), string(pass)} if f != nil { - f.Write(bts) - f.Write([]byte("\n")) + conn.Write(data) } if curlUrl != "" { go func() {