Skip to content

Instantly share code, notes, and snippets.

@hzshang
Created April 25, 2023 05:33
Show Gist options
  • Save hzshang/4ebeecc442f4def42f233c6cd97c9c64 to your computer and use it in GitHub Desktop.
Save hzshang/4ebeecc442f4def42f233c6cd97c9c64 to your computer and use it in GitHub Desktop.
A socks5 wrapper without authentication
package main
import (
"log"
"os"
"context"
"github.com/things-go/go-socks5"
"golang.org/x/net/proxy"
"flag"
"net"
)
var target = flag.String("t","1.1.1.1:1080","proxy host")
var user = flag.String("u","user","username")
var password = flag.String("p","password","username")
var bind = flag.String("b","127.0.0.1:1081","bind address")
func main() {
flag.Parse()
dialSocksProxy, err := proxy.SOCKS5("tcp", *target, &proxy.Auth{User:*user,Password:*password}, proxy.Direct)
if err != nil {
log.Fatal(err)
}
ctx_dilaer := func(ctx context.Context, network string, addr string)(net.Conn,error){
return dialSocksProxy.Dial(network,addr);
}
server := socks5.NewServer(
socks5.WithLogger(socks5.NewLogger(log.New(os.Stdout, "socks5: ", log.LstdFlags))),
socks5.WithDial(ctx_dilaer),
)
log.Printf("start bind socks5://%s",*bind)
if err := server.ListenAndServe("tcp", *bind); err != nil {
panic(err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment