Esempio n. 1
0
        public void WriteReadByteDataTest()
        {
            Packet writePacket = new Packet(packetOpcode);
            writePacket.Write(uint32Value);
            writePacket.Write(uint16Value);
            writePacket.Write(byteValue);

            writePacket.Write(int32Value);
            writePacket.Write(int16Value);
            writePacket.Write(sbyteValue);

            writePacket.Write(stringValue);
            writePacket.Write(byteArrayValue);

            Packet readPacket = new Packet(writePacket.Data);

            Assert.AreEqual(writePacket.OpcodeNumber, readPacket.OpcodeNumber);
            Assert.AreEqual(uint32Value, readPacket.ReadUInt32());
            Assert.AreEqual(uint16Value, readPacket.ReadUInt16());
            Assert.AreEqual(byteValue, readPacket.ReadByte());
            Assert.AreEqual(int32Value, readPacket.ReadInt32());
            Assert.AreEqual(int16Value, readPacket.ReadInt16());
            Assert.AreEqual(sbyteValue, readPacket.ReadSByte());
            Assert.AreEqual(stringValue, readPacket.ReadString());
            var packetBytes = readPacket.ReadBytes();
            for (int i = 0; i < byteArrayValue.Length; i++)
                Assert.AreEqual(byteArrayValue[i], packetBytes[i]);

            readPacket.Dispose();
            writePacket.Dispose();
        }
        void TestPackets()
        {
            Packet p = new Packet(Opcode.Test);
            p.WriteString("F**K");
            p.WriteInt32(123);
            byte[] bytes = p.GetBytes();

            Opcode opc = (Opcode)BitConverter.ToInt16(bytes, 0);
            short length = BitConverter.ToInt16(bytes, 2);
            string Data = p.ReadString();
            int i = p.ReadInt32();
        }
Esempio n. 3
0
        static void Main(string[] args)
        {
            // Client will send us the key and iVec
            AesEncryptor aes = null;
            // Rsa inicialization
            RsaEncryptor rsa = new RsaEncryptor(RSAKey.RsaParams);

            // Creates new server instance on port 10751
            Server server = new Server(10751);
            // Awaits client connection
            var tcpClient = server.AcceptClientBlockWait();
            // Creates client instance
            var client = new Client(tcpClient);
            byte[] data = null;
            do
            {
                // Gets received data (everything that is in network pipe)
                data = client.ReceiveData();
                if (data == null)
                    continue;

                do
                {
                    var length = BitConverter.ToUInt16(data, 0);
                    data = data.Skip(sizeof(UInt16)).ToArray();
                    var packetData = data.Take(length).ToArray();

                    // init packet, decrypt stream after inicialization
                    Packet packet = new Packet(aes != null ? aes.Decrypt(packetData) : packetData);
                    Packet response = null;
                    switch ((ClientPacketTypes)packet.OpcodeNumber)
                    {
                        case ClientPacketTypes.CMSG_INIT_ENCRYPTED_RSA:
                            var keys = rsa.Decrypt(packet.ReadBytes());
                            aes = new AesEncryptor(keys.Take(16).ToArray(), keys.Skip(16).ToArray());
                            client.AesEncryptor = aes;
                            response = new Packet(ServerPacketTypes.SMSG_INIT_RESPONSE_ENCRYPTED_RSA);
                            response.Write("Hello Client!");
                            break;
                        case ClientPacketTypes.CMSG_INIT_ENCRYPTED_AES:
                            Console.WriteLine(packet.ReadString());
                            response = new Packet(ServerPacketTypes.SMSG_INIT_RESPONSE_ENCRYPTED_AES);
                            response.Write("Hello Client, We are now fully encrypted!");
                            break;
                    }

                    if (response != null)
                    {
                        client.SendPacket(response);
                        response.Dispose();
                    }

                    data = data.Skip(length).ToArray();
                } while (data.Any());

                break;
            } while (true);

            aes.Dispose();
            client.Dispose();
            server.Dispose();

            Console.WriteLine("Press any key to continue...");
            Console.ReadKey(true);
        }