Created
October 11, 2017 10:19
-
-
Save lenew/94dbf6dfe98423851104af764b9c94de to your computer and use it in GitHub Desktop.
socks5-forward
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//simple tool can forward a 'listen:port' to 'forward:port' though a 'socks5://server:port' | |
//usage socks5-forward listen:port forward:port socksurl | |
package main | |
import ( | |
"io" | |
"log" | |
"net" | |
"os" | |
"net/url" | |
"golang.org/x/net/proxy" | |
) | |
func forward(conn net.Conn, proxyURL* url.URL) { | |
//client, err := net.Dial("tcp", os.Args[2]) | |
proxy, err := proxy.FromURL(proxyURL, proxy.Direct) | |
if err != nil { | |
log.Fatalf("Proxy failed: %v", err) | |
} | |
client, err := proxy.Dial("tcp", os.Args[2]) | |
if err != nil { | |
log.Fatalf("Dial failed: %v", err) | |
} | |
log.Printf("Connected to localhost %v\n", conn) | |
go func() { | |
defer client.Close() | |
defer conn.Close() | |
io.Copy(client, conn) | |
}() | |
go func() { | |
defer client.Close() | |
defer conn.Close() | |
io.Copy(conn, client) | |
}() | |
} | |
func main() { | |
if len(os.Args) != 4 { | |
log.Fatalf("Usage %s listen:port forward:port socksurl\n", os.Args[0]); | |
return | |
} | |
listener, err := net.Listen("tcp", os.Args[1]) | |
if err != nil { | |
log.Fatalf("Failed to setup listener: %v", err) | |
} | |
proxyURL, err := url.Parse(os.Args[3]) | |
if err != nil { | |
log.Fatalf("Proxy url invalid: %v", err) | |
} | |
for { | |
conn, err := listener.Accept() | |
log.Printf("new income") | |
if err != nil { | |
log.Fatalf("ERROR: failed to accept listener: %v", err) | |
} | |
log.Printf("Accepted connection %v\n", conn) | |
go forward(conn, proxyURL) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment