Skip to content

Instantly share code, notes, and snippets.

@darkr4y
Created December 21, 2019 02:53
Show Gist options
  • Save darkr4y/42859210a54e5c8eeb2505f09f54e6ee to your computer and use it in GitHub Desktop.
Save darkr4y/42859210a54e5c8eeb2505f09f54e6ee to your computer and use it in GitHub Desktop.
go socks5 proxy server
package main
import (
"log"
"flag"
"os"
"github.com/armon/go-socks5"
)
var (
h bool
u string
p string
s string
)
func init() {
flag.BoolVar(&h, "h", false, "this help")
flag.StringVar(&u, "u", "", "proxy user")
flag.StringVar(&p, "p", "", "proxy password")
flag.StringVar(&s, "s", "8080", "proxy listen port")
}
func main() {
// Working with app params
flag.Parse()
if h {
flag.Usage()
return
}
if len(s) > 0 {
//Initialize socks5 config
socsk5conf := &socks5.Config{
Logger: log.New(os.Stdout, "", log.LstdFlags),
}
if len(u) > 0 && len(p)>0 {
creds := socks5.StaticCredentials{
u: p,
}
cator := socks5.UserPassAuthenticator{Credentials: creds}
socsk5conf.AuthMethods = []socks5.Authenticator{cator}
}
server, err := socks5.New(socsk5conf)
if err != nil {
log.Fatal(err)
}
log.Printf("Start listening proxy service on port %s\n", s)
if err := server.ListenAndServe("tcp", ":" + s); err != nil {
log.Fatal(err)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment