package net import ( "b612.me/apps/b612/netforward" "b612.me/starlog" "fmt" "github.com/spf13/cobra" "time" ) var Cmd = &cobra.Command{ Use: "net", Short: "网络工具,包括nat穿透,端口转发等", } func init() { Cmd.AddCommand(netforward.CmdNetforward) } var natc NatClient var nats NatServer var dns, ipinfoaddr string var timeout int var maxHop int var disableIpInfo bool var bindAddr string var hideIncorrect bool func init() { CmdNatClient.Flags().StringVarP(&natc.ServiceTarget, "target", "t", "", "forward server target address") CmdNatClient.Flags().StringVarP(&natc.CmdTarget, "server", "s", "", "nat server command address") CmdNatClient.Flags().StringVarP(&natc.Passwd, "passwd", "p", "", "password") CmdNatClient.Flags().BoolVarP(&natc.enableTCP, "enable-tcp", "T", true, "enable tcp forward") CmdNatClient.Flags().BoolVarP(&natc.enableUDP, "enable-udp", "U", true, "enable udp forward") CmdNatClient.Flags().IntVarP(&natc.DialTimeout, "dial-timeout", "d", 10000, "dial timeout milliseconds") CmdNatClient.Flags().IntVarP(&natc.UdpTimeout, "udp-timeout", "D", 60000, "udp connection timeout milliseconds") Cmd.AddCommand(CmdNatClient) CmdNatServer.Flags().StringVarP(&nats.ListenAddr, "listen", "l", "", "listen address") CmdNatServer.Flags().StringVarP(&nats.Passwd, "passwd", "p", "", "password") CmdNatServer.Flags().Int64VarP(&nats.UDPTimeout, "udp-timeout", "D", 60000, "udp connection timeout milliseconds") CmdNatServer.Flags().Int64VarP(&nats.NetTimeout, "dial-timeout", "d", 10000, "dial timeout milliseconds") CmdNatServer.Flags().BoolVarP(&nats.enableTCP, "enable-tcp", "T", true, "enable tcp forward") CmdNatServer.Flags().BoolVarP(&nats.enableUDP, "enable-udp", "U", true, "enable udp forward") Cmd.AddCommand(CmdNatServer) CmdNetTrace.Flags().StringVarP(&dns, "dns", "d", "", "自定义dns服务器") CmdNetTrace.Flags().StringVarP(&ipinfoaddr, "ipinfo", "i", "https://ip.b612.me/{ip}/detail", "自定义ip信息查询地址") CmdNetTrace.Flags().IntVarP(&timeout, "timeout", "t", 800, "超时时间,单位毫秒") CmdNetTrace.Flags().IntVarP(&maxHop, "max-hop", "m", 32, "最大跳数") CmdNetTrace.Flags().BoolVarP(&disableIpInfo, "disable-ipinfo", "D", false, "禁用ip信息查询") CmdNetTrace.Flags().StringVarP(&bindAddr, "bind", "b", "0.0.0.0", "绑定地址") CmdNetTrace.Flags().BoolVarP(&hideIncorrect, "hide-incorrect", "H", false, "隐藏错误节点") Cmd.AddCommand(CmdNetTrace) } var CmdNatClient = &cobra.Command{ Use: "natc", Short: "nat穿透客户端", Run: func(cmd *cobra.Command, args []string) { if natc.ServiceTarget == "" || natc.CmdTarget == "" { cmd.Help() return } natc.Run() }, } var CmdNatServer = &cobra.Command{ Use: "nats", Short: "nat穿透服务端", Run: func(cmd *cobra.Command, args []string) { nats.Run() }, } var CmdNetTrace = &cobra.Command{ Use: "trace", Short: "网络路径追踪", Run: func(cmd *cobra.Command, args []string) { if len(args) == 0 { cmd.Help() return } if disableIpInfo { ipinfoaddr = "" } for _, target := range args { starlog.Infoln("Traceroute to ", target) Traceroute(target, bindAddr, dns, maxHop, time.Millisecond*time.Duration(timeout), ipinfoaddr, hideIncorrect) fmt.Println("-----------------------------") } }, }