mirror of
https://github.com/tuxdotrs/trok.git
synced 2026-03-22 22:36:31 +05:30
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
e451f17df0
|
|||
|
f586506180
|
10
cmd/tcp.go
10
cmd/tcp.go
@@ -16,18 +16,24 @@ var tcpCmd = &cobra.Command{
|
|||||||
Short: "Start TCP proxy",
|
Short: "Start TCP proxy",
|
||||||
Args: cobra.ExactArgs(1),
|
Args: cobra.ExactArgs(1),
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
port := args[0]
|
localPort := args[0]
|
||||||
|
|
||||||
serverAddr, err := cmd.Flags().GetString("server")
|
serverAddr, err := cmd.Flags().GetString("server")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
client.Start(serverAddr, fmt.Sprintf(":%s", port))
|
remotePort, err := cmd.Flags().GetString("port")
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
client.Start(serverAddr, fmt.Sprintf(":%s", localPort), remotePort)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
rootCmd.AddCommand(tcpCmd)
|
rootCmd.AddCommand(tcpCmd)
|
||||||
tcpCmd.Flags().StringP("server", "s", "trok.cloud:1337", "Remote server address")
|
tcpCmd.Flags().StringP("server", "s", "trok.cloud:1337", "Remote server address")
|
||||||
|
tcpCmd.Flags().StringP("port", "p", "0", "port on the remote server")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ import (
|
|||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Start(serverAddr, localAddr string) {
|
func Start(serverAddr, localAddr, remotePort string) {
|
||||||
trok, err := NewTrokClient(serverAddr, localAddr)
|
trok, err := NewTrokClient(serverAddr, localAddr, remotePort)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal().Msgf("failed init trok %v", err)
|
log.Fatal().Msgf("failed init trok %v", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"net"
|
"net"
|
||||||
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
@@ -18,15 +19,17 @@ type Trok struct {
|
|||||||
controlClient *TCPClient
|
controlClient *TCPClient
|
||||||
serverAddr string
|
serverAddr string
|
||||||
localAddr string
|
localAddr string
|
||||||
|
remotePort string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTrokClient(serverAddr, localAddr string) (*Trok, error) {
|
func NewTrokClient(serverAddr, localAddr, remotePort string) (*Trok, error) {
|
||||||
controlClient, err := NewTCPClient(serverAddr, "Controller")
|
controlClient, err := NewTCPClient(serverAddr, "Controller")
|
||||||
|
|
||||||
return &Trok{
|
return &Trok{
|
||||||
controlClient: controlClient,
|
controlClient: controlClient,
|
||||||
serverAddr: serverAddr,
|
serverAddr: serverAddr,
|
||||||
localAddr: localAddr,
|
localAddr: localAddr,
|
||||||
|
remotePort: remotePort,
|
||||||
}, err
|
}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,7 +48,7 @@ func (t *Trok) Stop() {
|
|||||||
func (t *Trok) ControlConnHandler(conn net.Conn) {
|
func (t *Trok) ControlConnHandler(conn net.Conn) {
|
||||||
p := lib.InitProtocolHandler(conn)
|
p := lib.InitProtocolHandler(conn)
|
||||||
|
|
||||||
p.WriteMessage(&lib.Message{CMD: "HELO", ARG: "Trok"})
|
p.WriteMessage(&lib.Message{CMD: "HELO", ARG: t.remotePort})
|
||||||
|
|
||||||
for {
|
for {
|
||||||
m, err := p.ReadMessage()
|
m, err := p.ReadMessage()
|
||||||
@@ -61,18 +64,21 @@ func (t *Trok) ControlConnHandler(conn net.Conn) {
|
|||||||
switch m.CMD {
|
switch m.CMD {
|
||||||
|
|
||||||
case "EHLO":
|
case "EHLO":
|
||||||
go t.hanldeCMDEHLO(m)
|
go t.handleCMDEHLO(m)
|
||||||
|
|
||||||
case "CNCT":
|
case "CNCT":
|
||||||
go t.handleCMDCNCT(m)
|
go t.handleCMDCNCT(m)
|
||||||
|
|
||||||
|
case "ERR":
|
||||||
|
go t.handleCMDERR(m, conn)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
log.Info().Msgf("invalid command")
|
log.Info().Msgf("invalid command")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Trok) hanldeCMDEHLO(m *lib.Message) {
|
func (t *Trok) handleCMDEHLO(m *lib.Message) {
|
||||||
parts := strings.Split(t.serverAddr, ":")
|
parts := strings.Split(t.serverAddr, ":")
|
||||||
log.Info().Msgf("[CMD] %s [ARG] %s:%s", m.CMD, parts[0], m.ARG)
|
log.Info().Msgf("[CMD] %s [ARG] %s:%s", m.CMD, parts[0], m.ARG)
|
||||||
}
|
}
|
||||||
@@ -96,3 +102,9 @@ func (t *Trok) handleCMDCNCT(m *lib.Message) {
|
|||||||
go io.Copy(upStream.conn, downStream.conn)
|
go io.Copy(upStream.conn, downStream.conn)
|
||||||
io.Copy(downStream.conn, upStream.conn)
|
io.Copy(downStream.conn, upStream.conn)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *Trok) handleCMDERR(m *lib.Message, conn net.Conn) {
|
||||||
|
log.Info().Msgf("[CMD] %s [ARG] %s", m.CMD, m.ARG)
|
||||||
|
conn.Close()
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|||||||
@@ -79,9 +79,10 @@ func (t *Trok) handleCMDHELO(p *lib.ProtocolHandler, m *lib.Message) {
|
|||||||
log.Info().Msgf("[CMD] %s [ARG] %s", m.CMD, m.ARG)
|
log.Info().Msgf("[CMD] %s [ARG] %s", m.CMD, m.ARG)
|
||||||
|
|
||||||
var s TCPServer
|
var s TCPServer
|
||||||
err := s.Init(":", "Handler")
|
err := s.Init(fmt.Sprintf(":%s", m.ARG), "Handler")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Msgf("error handling HELO cmd: %v", err)
|
log.Error().Msgf("error handling HELO cmd: %v", err)
|
||||||
|
p.WriteMessage(&lib.Message{CMD: "ERR", ARG: "ADDRESS_UNAVAILABLE"})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user