// Callback function invoked by Pcap.Net for every incoming packet private static void PacketHandler(object sender, CaptureEventArgs e) { var packet = PacketDotNet.Packet.ParsePacket(e.Packet.LinkLayerType, e.Packet.Data); var tcpPacket = packet.Extract<PacketDotNet.TcpPacket>(); if (tcpPacket != null && tcpPacket.PayloadData.Length > 0) { var bytes = tcpPacket.PayloadData; if (tcpPacket.SourcePort == 4000) { if (bytes.Length == 2 && bytes[0] == 0xA7 && bytes[1] == 0x01) { Log.Debug($"D2GS Initial packet received: {bytes.ByteArrayToString()}"); return; } Log.Debug($"D2GS Full packet received: {bytes.ByteArrayToString()}"); var stream = gameServerConnection._stream as SnifferNetworkStream; stream.AddBytes(bytes); var initialBytes = stream.GetBytes(); try { initialBytes = stream.GetBytes(); while (gameServerConnection.ReadPacket() != null) { } } catch { stream.SetBytes(initialBytes); } } else if(tcpPacket.DestinationPort == 4000) { OutgoingD2GSPackets.HandleOutgoingPacket(bytes); } else if (tcpPacket.SourcePort == 6112) { Log.Debug($"BNCS Full packet received: {bytes.ByteArrayToString()}"); var stream = bncsConnection._stream as SnifferNetworkStream; stream.AddBytes(bytes); try { bncsConnection.ReadPacket(); } catch { } } else if (tcpPacket.DestinationPort == 6112) { OutgoingBNCSPackets.HandleOutgoingPacket(bytes); } else if (tcpPacket.SourcePort == 6113) { if (bytes.Length == 7 && bytes[0] == 0x07 && bytes[2] == 0x01) { Log.Debug($"MCP Initial packet received: {bytes.ByteArrayToString()}"); return; } Log.Debug($"MCP Full packet received: {bytes.ByteArrayToString()}"); var stream = mcpConnection._stream as SnifferNetworkStream; stream.AddBytes(bytes); mcpConnection.ReadPacket(); } else if (tcpPacket.DestinationPort == 6113) { OutgoingMCPPackets.HandleOutgoingPacket(bytes); } } }