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