diff --git a/cmd/strom/main.go b/cmd/strom/main.go index e10b01a..b5957c9 100644 --- a/cmd/strom/main.go +++ b/cmd/strom/main.go @@ -67,7 +67,7 @@ func Help(args []string) (err error) { func mainE() (err error) { subcommands["help"] = Help args := os.Args - args = []string{"TEST", "packet-spy", "-addr", "127.0.0.1:25571"} + //args = []string{"TEST", "packet-spy", "-addr", "127.0.0.1:25571", "-true-forward"} if len(args) < 2 { err = ExpectedASubcommandErr diff --git a/cmd/strom/packet_inspector/main.go b/cmd/strom/packet_inspector/main.go index d86e3ff..92cdc5c 100644 --- a/cmd/strom/packet_inspector/main.go +++ b/cmd/strom/packet_inspector/main.go @@ -22,6 +22,7 @@ var Token = Cmd.String("token", "", "token to use") var TargetAddr = Cmd.String("addr", "127.0.0.1:25565", "address to connect to") var ListenAddr = Cmd.String("listen", "127.0.0.1:25566", "address to listen on") +var TrueForward = Cmd.Bool("true-forward", false, "forward packets without modification -name and custom server status wont work") type Proxy struct { Client, Servee *proto.Conn @@ -33,6 +34,9 @@ func (p *Proxy) Start() (err error) { p.Servee.RegisterCritical(p.OnAnything) p.Servee.RegisterCriticalUntilLatest(p.OnFinishConfiguration) + p.Servee.RegisterCriticalUntilLatest(p.OnHandshake) + //p.Servee.RegisterCriticalUntilLatest(p.OnCompress) + p.Client.RegisterCriticalUntilLatest(p.OnCompress) errChan := make(chan error) go func() { @@ -74,6 +78,29 @@ func (p *Proxy) OnFinishConfiguration(packet *v1_21_11.ConfigurationToServerPack return } +func (p *Proxy) OnHandshake(packet *v1_21_11.HandshakingToServerPacketSetProtocol) (err error) { + err = p.Client.Send(packet) + state := proto_base.State(packet.NextState) + if err != nil { + return + } + p.Servee.SetState(state) + p.Client.SetState(state) + err = event.DontForwardErr + return +} + +func (p *Proxy) OnCompress(packet *v1_21_11.LoginToClientPacketCompress) (err error) { + err = p.Servee.Send(packet) + if err != nil { + return + } + p.Servee.SetCompressionThreshold(packet.Threshold) + p.Client.SetCompressionThreshold(packet.Threshold) + err = event.DontForwardErr + return +} + var StatusResponse = server.StatusResponse{ Version: server.StatusResponseVersion{ Name: text.Pretty("STROM"), @@ -96,16 +123,18 @@ func Run(args []string) (err error) { serveeConn.DebugPrintPackets = []string{""} p := &Proxy{Servee: serveeConn, Client: nil} var acc = api.NewOfflineAccount(*OfflineNameFlag) - if *Token != "" { - acc, err = api.NewAccountFromYGG(*Token) + if !*TrueForward { + if *Token != "" { + acc, err = api.NewAccountFromYGG(*Token) + if err != nil { + return + } + } + _, err = server.ServeLogin(serveeConn, server.WithOtherAccount(acc), server.WithStatus(StatusResponse), server.WithoutOnlineMode(), server.WithoutEncryption()) if err != nil { return } } - _, err = server.ServeLogin(serveeConn, server.WithOtherAccount(acc), server.WithStatus(StatusResponse), server.WithoutOnlineMode(), server.WithoutEncryption()) - if err != nil { - return - } *TargetAddr, err = client.DoDnsSimple(*TargetAddr) if err != nil { @@ -115,12 +144,14 @@ func Run(args []string) (err error) { if err != nil { return } - c.DebugPrintPackets = []string{""} - err = client.LoginRaw(c, acc) - if err != nil { - return - } defer c.Close() + c.DebugPrintPackets = []string{""} + if !*TrueForward { + err = client.LoginRaw(c, acc) + if err != nil { + return + } + } p.Client = c err = p.Start() return