71 lines
1.6 KiB
Go
71 lines
1.6 KiB
Go
package utils
|
|
|
|
import (
|
|
"bytes"
|
|
"net"
|
|
"reflect"
|
|
|
|
"github.com/sandertv/gophertunnel/minecraft/protocol"
|
|
"github.com/sandertv/gophertunnel/minecraft/protocol/packet"
|
|
"github.com/sirupsen/logrus"
|
|
"golang.org/x/exp/slices"
|
|
)
|
|
|
|
var Pool = packet.NewPool()
|
|
|
|
var muted_packets = []string{
|
|
"*packet.UpdateBlock",
|
|
"*packet.MoveActorAbsolute",
|
|
"*packet.SetActorMotion",
|
|
"*packet.SetTime",
|
|
"*packet.RemoveActor",
|
|
"*packet.AddActor",
|
|
"*packet.UpdateAttributes",
|
|
"*packet.Interact",
|
|
"*packet.LevelEvent",
|
|
"*packet.SetActorData",
|
|
"*packet.MoveActorDelta",
|
|
"*packet.MovePlayer",
|
|
"*packet.BlockActorData",
|
|
"*packet.PlayerAuthInput",
|
|
"*packet.LevelChunk",
|
|
"*packet.LevelSoundEvent",
|
|
"*packet.ActorEvent",
|
|
"*packet.NetworkChunkPublisherUpdate",
|
|
"*packet.UpdateSubChunkBlocks",
|
|
"*packet.SubChunk",
|
|
"*packet.SubChunkRequest",
|
|
"*packet.Animate",
|
|
"*packet.NetworkStackLatency",
|
|
"*packet.InventoryTransaction",
|
|
}
|
|
|
|
func PacketLogger(header packet.Header, payload []byte, src, dst net.Addr) {
|
|
var pk packet.Packet
|
|
buf := bytes.NewBuffer(payload)
|
|
r := protocol.NewReader(buf, 0)
|
|
pkFunc, ok := Pool[header.PacketID]
|
|
if !ok {
|
|
pk = &packet.Unknown{PacketID: header.PacketID}
|
|
} else {
|
|
pk = pkFunc()
|
|
}
|
|
pk.Unmarshal(r)
|
|
|
|
dir := "S->C"
|
|
src_addr, _, _ := net.SplitHostPort(src.String())
|
|
if IPPrivate(net.ParseIP(src_addr)) {
|
|
dir = "C->S"
|
|
}
|
|
|
|
pk_name := reflect.TypeOf(pk).String()
|
|
if slices.Contains(muted_packets, pk_name) {
|
|
return
|
|
}
|
|
switch pk := pk.(type) {
|
|
case *packet.Disconnect:
|
|
logrus.Infof("Disconnect: %s", pk.Message)
|
|
}
|
|
logrus.Debugf("%s 0x%x, %s\n", dir, pk.ID(), pk_name)
|
|
}
|