package socks5 import ( "b612.me/starlog" "github.com/spf13/cobra" "github.com/things-go/go-socks5" "log" "os" ) var username, password string var listen string func init() { Cmd.Flags().StringVarP(&username, "username", "u", "", "用户名") Cmd.Flags().StringVarP(&password, "password", "p", "", "密码") Cmd.Flags().StringVarP(&listen, "listen", "l", ":8000", "监听地址") } var Cmd = &cobra.Command{ Use: "socks5", Short: "socks5代理", Long: "socks5代理", Run: func(cmd *cobra.Command, args []string) { run() }, } func run() { // Create a SOCKS5 server var opt []socks5.Option opt = append(opt, socks5.WithLogger(socks5.NewLogger(log.New(os.Stdout, "socks5: ", log.LstdFlags)))) if username != "" && password != "" { opt = append(opt, socks5.WithAuthMethods([]socks5.Authenticator{ socks5.UserPassAuthenticator{Credentials: socks5.StaticCredentials{username: password}}, })) } server := socks5.NewServer( opt..., ) starlog.Infof("socks5 server listen on %s", listen) // Create SOCKS5 proxy on localhost port 8000 if err := server.ListenAndServe("tcp", listen); err != nil { starlog.Errorln("socks5 server error:", err) os.Exit(1) } }