ziozzang / socks5-proxy

Socks5 Proxy with Go Lang. support USER_ID/PASSWORD. able to bypass HTTPS(SNI) censorship
MIT License
32 stars 11 forks source link
anti-censorship authentication golang proxy proxy-server socks socks5-proxy

SOCKS 5 Proxy with Go Lang

Original Library was imported from http://github.com/oov/socks5

I just modified and build for personal use.

this code support configuration loading.

Additional Feature

Installation

or you can run with docker. :)


docker build -t socks5proxy .
docker run --rm -it -v `pwd`/socks5-proxy.config:/app/socks5-proxy.config --net=host socks5proxy

Original socks5

Package socks5 implements a "SOCKS Protocol Version 5" server.

This server supports a subset of RFC 1928:

INSTALL

go get -u github.com/oov/socks5

USAGE

package main

import (
    "github.com/oov/socks5"
    "log"
)

func main() {
    srv := socks5.New()
    srv.AuthUsernamePasswordCallback = func(c *socks5.Conn, username, password []byte) error {
        user := string(username)
        if user != "guest" {
            return socks5.ErrAuthenticationFailed
        }

        log.Printf("Welcome %v!", user)
        c.Data = user
        return nil
    }
    srv.HandleConnectFunc(func(c *socks5.Conn, host string) (newHost string, err error) {
        if host == "example.com:80" {
            return host, socks5.ErrConnectionNotAllowedByRuleset
        }
        if user, ok := c.Data.(string); ok {
            log.Printf("%v connecting to %v", user, host)
        }
        return host, nil
    })
    srv.HandleCloseFunc(func(c *socks5.Conn) {
        if user, ok := c.Data.(string); ok {
            log.Printf("Goodbye %v!", user)
        }
    })

    srv.ListenAndServe(":12345")
}