Skip to content

Commit

Permalink
Add HTTP and SOCKS5 proxy servers as tool command
Browse files Browse the repository at this point in the history
  • Loading branch information
everesio committed May 5, 2018
1 parent 67118d8 commit e57694d
Show file tree
Hide file tree
Showing 22 changed files with 1,942 additions and 1 deletion.
11 changes: 10 additions & 1 deletion Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions Gopkg.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@
name = "github.com/cenkalti/backoff"
version = "1.1.0"

[[override]]
name = "github.com/elazarl/goproxy"
branch = "master"

[prune]
go-tests = true
unused-packages = true
94 changes: 94 additions & 0 deletions cmd/tools/tools.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package tools

import (
"github.com/armon/go-socks5"
"github.com/elazarl/goproxy"
"github.com/elazarl/goproxy/ext/auth"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"net/http"
)

var Tools = &cobra.Command{
Use: "tools",
Short: "Tools",
}

var httpProxy = &cobra.Command{
Use: "http-proxy",
Short: "HTTP proxy server",
RunE: httpProxyServer,
}

var socks5Proxy = &cobra.Command{
Use: "socks5-proxy",
Short: "SOCKS5 proxy server",
RunE: socks5ProxyServer,
}

func init() {
Tools.AddCommand(httpProxy)
Tools.AddCommand(socks5Proxy)

Tools.PersistentFlags().String("username", "", `username for proxy authentication`)
Tools.PersistentFlags().String("password", "", "password for proxy authentication")

httpProxy.Flags().String("addr", ":3128", "proxy listen address")
httpProxy.Flags().Bool("verbose", false, "should every proxy request be logged to stdout")

socks5Proxy.Flags().String("addr", ":1080", "proxy listen address")
}

func httpProxyServer(cmd *cobra.Command, _ []string) error {
username, _ := cmd.Flags().GetString("username")
password, _ := cmd.Flags().GetString("password")
addr, _ := cmd.Flags().GetString("addr")
verbose, _ := cmd.Flags().GetBool("verbose")

proxy := goproxy.NewProxyHttpServer()
proxy.Verbose = verbose
if username != "" && password != "" {
logrus.Info("HTTP proxy will require basic authentication")

proxy.OnRequest().HandleConnect(auth.BasicConnect("", func(user, passwd string) bool {
return user == username && passwd == password
}))
}

logrus.Infof("Starting HTTP proxy server on %s", addr)
return http.ListenAndServe(addr, proxy)
}

func socks5ProxyServer(cmd *cobra.Command, _ []string) error {
username, _ := cmd.Flags().GetString("username")
password, _ := cmd.Flags().GetString("password")
addr, _ := cmd.Flags().GetString("addr")

conf := &socks5.Config{}
server, err := socks5.New(conf)
if err != nil {
return err
}
if username != "" && password != "" {
logrus.Info("SOCKS5 proxy will require basic authentication", addr)

authenticator := &socks5.UserPassAuthenticator{
Credentials: socks5ProxyCredentials{
username: username,
password: password,
},
}
conf.AuthMethods = []socks5.Authenticator{authenticator}
}

logrus.Infof("Starting SOCKS5 proxy server on %s", addr)
return server.ListenAndServe("tcp", addr)
}

type socks5ProxyCredentials struct {
username, password string
}

func (s socks5ProxyCredentials) Valid(username, password string) bool {
return s.username == username && s.password == password
}
2 changes: 2 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package main
import (
"fmt"
"github.com/grepplabs/kafka-proxy/cmd/kafka-proxy"
"github.com/grepplabs/kafka-proxy/cmd/tools"
"github.com/spf13/cobra"
"os"
)
Expand All @@ -20,6 +21,7 @@ var RootCmd = &cobra.Command{
func init() {
RootCmd.AddCommand(server.Server)
RootCmd.AddCommand(server.Version)
RootCmd.AddCommand(tools.Tools)
}

func main() {
Expand Down
2 changes: 2 additions & 0 deletions vendor/github.com/elazarl/goproxy/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

27 changes: 27 additions & 0 deletions vendor/github.com/elazarl/goproxy/LICENSE

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

122 changes: 122 additions & 0 deletions vendor/github.com/elazarl/goproxy/README.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

57 changes: 57 additions & 0 deletions vendor/github.com/elazarl/goproxy/actions.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 15 additions & 0 deletions vendor/github.com/elazarl/goproxy/all.bash

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit e57694d

Please sign in to comment.