socks5 прокси с помощью go
Я хотел знать, можно ли прослушивать локальный порт, например: 1080 socks5, и все соединения на этом порту должны быть сделаны прокси для использования внешнего хоста: порт socks5
func main() {
l, err := net.Listen("tcp", "127.0.0.1:1080")
if err != nil {
fmt.Print(err)
}
defer l.Close()
for {
conn, err := l.Accept()
if err != nil {
fmt.Print(err)
}
go handle(conn)
}
}
func handle(conn net.Conn) {
defer conn.Close()
dialect, err := proxy.SOCKS5("tcp", "externalhost:externalport", nil, proxy.Direct)
newConn, err := dialect.Dial("tcp", "targethost:targetport")
if err != nil {
log.Printf("Connection error: %s", err.Error())
}
go func() {
_, err = io.Copy(newConn, conn)
if err != nil {
log.Printf("Connection error: %s", err.Error())
}
}()
_, err = io.Copy(conn, newConn)
if err != nil {
log.Printf("Connection error: %s", err.Error())
}
}
func handle(conn net.Conn) {
defer conn.Close()
}
Мне нужно будет получить адреса назначения и проверить, является ли соединение socks5, а затем выполнить прокси-сервер с внешним IP-адресом и передать его в dialect.dial