package cmd import ( "time" "github.com/spf13/cobra" "github.com/spf13/viper" "go.uber.org/zap" "github.com/apernet/hysteria/core/client" ) // pingCmd represents the ping command var pingCmd = &cobra.Command{ Use: "ping address", Short: "Ping mode", Long: "Perform a TCP ping to a specified remote address through the proxy server. Can be used as a simple connectivity test.", Run: runPing, } func init() { rootCmd.AddCommand(pingCmd) } func runPing(cmd *cobra.Command, args []string) { logger.Info("ping mode") if len(args) != 1 { logger.Fatal("no address specified") } addr := args[0] if err := viper.ReadInConfig(); err != nil { logger.Fatal("failed to read client config", zap.Error(err)) } config, err := viperToClientConfig() if err != nil { logger.Fatal("failed to parse client config", zap.Error(err)) } c, err := client.NewClient(config) if err != nil { logger.Fatal("failed to initialize client", zap.Error(err)) } defer c.Close() logger.Info("connecting", zap.String("address", addr)) start := time.Now() conn, err := c.DialTCP(addr) if err != nil { logger.Fatal("failed to connect", zap.Error(err), zap.String("time", time.Since(start).String())) } defer conn.Close() logger.Info("connected", zap.String("time", time.Since(start).String())) }