// 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);
                }
            }
        }