update dragonfly, put captures in folder

This commit is contained in:
olebeck 2023-01-25 13:51:00 +01:00
parent 12417c63a3
commit 2f9c74ae5c
6 changed files with 95 additions and 5 deletions

2
go.mod
View File

@ -6,7 +6,7 @@ go 1.19
replace github.com/sandertv/gophertunnel => github.com/olebeck/gophertunnel v1.26.2
//replace github.com/df-mc/dragonfly => ./dragonfly
replace github.com/df-mc/dragonfly => github.com/olebeck/dragonfly v0.9.1-4
replace github.com/df-mc/dragonfly => github.com/olebeck/dragonfly v0.9.1-5
require (
github.com/cloudfoundry-attic/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21

2
go.sum
View File

@ -74,6 +74,8 @@ github.com/olebeck/dragonfly v0.9.1-3 h1:ULE04Wx6MzBMuMmjj+xb9VtdYnCRoI6EafOWqcY
github.com/olebeck/dragonfly v0.9.1-3/go.mod h1:ZjzPME6I1nc73voUgr2s5lpkoTxnWuR54V6c1KbULX0=
github.com/olebeck/dragonfly v0.9.1-4 h1:eHGO1wBiG21cfDFMx3p+oaVV49JxzT1cMwdZOTSupPE=
github.com/olebeck/dragonfly v0.9.1-4/go.mod h1:ZjzPME6I1nc73voUgr2s5lpkoTxnWuR54V6c1KbULX0=
github.com/olebeck/dragonfly v0.9.1-5 h1:Y0o2x/r5l0xFreVEQR9p9pVEjAsbcxkSlQ/xKl8Dfq0=
github.com/olebeck/dragonfly v0.9.1-5/go.mod h1:ZjzPME6I1nc73voUgr2s5lpkoTxnWuR54V6c1KbULX0=
github.com/olebeck/gophertunnel v1.26.2 h1:AbiZcmeR5LenSJ5NX/2BPxLC3ddlvgWjrjouPmOB6BA=
github.com/olebeck/gophertunnel v1.26.2/go.mod h1:dYFetA6r62huhc1EgR9p8VFAFtKOuGgVE/iXf5CzZ4o=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=

View File

@ -61,7 +61,9 @@ func (c *CaptureCMD) Execute(ctx context.Context, f *flag.FlagSet, _ ...interfac
return 1
}
fio, err := os.Create(hostname + "-" + time.Now().Format("2006-01-02_15-04-05") + ".pcap2")
os.Mkdir("captures", 0o775)
fio, err := os.Create("captures/" + hostname + "-" + time.Now().Format("2006-01-02_15-04-05") + ".pcap2")
if err != nil {
logrus.Fatal(err)
return 1

View File

@ -175,6 +175,14 @@ func (c *WorldCMD) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{
return pk, nil
}
super_verbose_log := false
if super_verbose_log {
utils.F_Log, err = os.Create("packets.log")
if err != nil {
logrus.Error(err)
}
}
err = proxy.Run(ctx, server_address)
if err != nil {
logrus.Error(err)

View File

@ -2,8 +2,13 @@ package utils
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net"
"reflect"
"strings"
"sync"
"github.com/bedrock-tool/bedrocktool/locale"
"github.com/fatih/color"
@ -44,6 +49,66 @@ var MutedPackets = []string{
}
var ExtraVerbose []string
var F_Log io.Writer
var dmp_lock sync.Mutex
func dmp_struct(level int, in any, w_type bool) (s string) {
t_base := strings.Repeat("\t", level)
ii := reflect.Indirect(reflect.ValueOf(in))
if w_type {
type_name := reflect.TypeOf(in).String()
s += type_name + " "
} else {
s += "\t"
}
struct_entry := func(ii reflect.Value) {
s += "{\n"
for i := 0; i < ii.NumField(); i++ {
field := ii.Type().Field(i)
if field.IsExported() {
d := dmp_struct(level+1, ii.Field(i).Interface(), true)
s += t_base + fmt.Sprintf("\t%s = %s\n", field.Name, d)
} else {
s += t_base + "\t" + field.Name + " (unexported)"
}
}
s += t_base + "}\n"
}
if ii.Kind() == reflect.Struct {
struct_entry(ii)
} else if ii.Kind() == reflect.Slice {
var t reflect.Type
if ii.Len() > 0 {
e := ii.Index(0)
t = reflect.TypeOf(e.Interface())
}
if ii.Len() > 1000 {
s += " [<slice too long>]"
} else if ii.Len() == 0 || t.Kind() == reflect.Struct {
s += "\t[\n"
for i := 0; i < ii.Len(); i++ {
s += t_base
s += dmp_struct(level+1, ii.Index(i).Interface(), false)
}
s += t_base + "]\n"
} else {
s += fmt.Sprintf("%#v", ii.Interface())
}
} else if ii.Kind() == reflect.Map {
j, err := json.MarshalIndent(ii.Interface(), t_base, "\t")
if err != nil {
s += err.Error()
}
s += string(j)
} else {
s += fmt.Sprintf(" %#v", ii.Interface())
}
return s
}
func PacketLogger(header packet.Header, payload []byte, src, dst net.Addr) {
var pk packet.Packet
@ -55,12 +120,19 @@ func PacketLogger(header packet.Header, payload []byte, src, dst net.Addr) {
defer func() {
if recoveredErr := recover(); recoveredErr != nil {
logrus.Errorf("%T: %w", pk, recoveredErr.(error))
logrus.Errorf("%T: %w", pk, recoveredErr)
}
}()
pk.Unmarshal(protocol.NewReader(bytes.NewBuffer(payload), 0))
if F_Log != nil {
dmp_lock.Lock()
defer dmp_lock.Unlock()
F_Log.Write([]byte(dmp_struct(0, pk, true)))
F_Log.Write([]byte("\n\n"))
}
pk_name := reflect.TypeOf(pk).String()[1:]
if slices.Contains(MutedPackets, pk_name) {
return

View File

@ -1,13 +1,15 @@
package utils
import (
"bytes"
"context"
"encoding/binary"
"io"
"net"
"os"
"reflect"
"github.com/sandertv/gophertunnel/minecraft"
"github.com/sandertv/gophertunnel/minecraft/protocol"
"github.com/sandertv/gophertunnel/minecraft/protocol/packet"
"github.com/sirupsen/logrus"
)
@ -79,7 +81,11 @@ func create_replay_connection(ctx context.Context, filename string, onConnect Co
}
for _, pk := range pks {
logrus.Printf("%s", reflect.TypeOf(pk).String()[1:])
f := bytes.NewBuffer(nil)
b := protocol.NewWriter(f, 0)
pk.Marshal(b)
PacketLogger(packet.Header{PacketID: pk.ID()}, f.Bytes(), &net.UDPAddr{}, &net.UDPAddr{})
if game_started {
if packetCB != nil {