Пример #1
0
        public int readInt()
        {
            int i = BytesUtils.bytesToInt(buffer, offset);

            this.offset = this.offset + 4;
            return(i);
        }
Пример #2
0
    public void ReceivingNetworkMessage()
    {
        ReadonlyMemoryStream readonlyMemoryStream = new ReadonlyMemoryStream();
        TcpAdapter           tcpAdapter           = new TcpAdapter(readonlyMemoryStream, new ConnectServerResponseBytesFiller());

        byte[] rawResponse = BytesUtils.HexStringToByteArray(
            "0005" +
            "0000 0000 0000 0000 0000 0000 0000 0000 00DD 0000" +
            "0000 0000 0000 A290" +
            "00");
        readonlyMemoryStream.buffer = rawResponse;

        tcpAdapter.Start();

        // Wait data conversion.
        Thread.Sleep(200);

        ConnectServerResponse connectServerResponse = (ConnectServerResponse)tcpAdapter.Receive();

        Assert.IsNotNull(connectServerResponse);
        Assert.AreEqual(connectServerResponse.EventType(), BytesUtils.HexStringToByteArray("0005"));
        Assert.AreEqual(connectServerResponse.SessionId, BytesUtils.HexStringToByteArray("0000 0000 0000 0000 0000 0000 0000 0000 00DD 0000"));
        Assert.AreEqual(connectServerResponse.UserId, 41616);
        Assert.AreEqual(connectServerResponse.ErrorCode, 0);
    }
Пример #3
0
        public short readShort()
        {
            var i = BytesUtils.bytesToShort(buffer, offset);

            this.offset = this.offset + 2;
            return(i);
        }
Пример #4
0
    public void SendingNetworkMessage()
    {
        WriteOnlyMemoryStream writeOnlyMemoryStream = new WriteOnlyMemoryStream();
        TcpAdapter            tcpAdapter            = new TcpAdapter(writeOnlyMemoryStream, null);

        tcpAdapter.Start();

        // ConnectServerRequest from TCP Adapter.
        ConnectServerRequest connectServerRequest = new ConnectServerRequest(
            NetworkMessage.EventType_ConnectServer,
            BitConverter.ToUInt32(BytesUtils.HexStringToByteArray("1289 CB79"), 0),
            'A',
            new char[] { 'h', 'e', 'l', 'l', 'o' },
            new char[] { 'p', 'a', 's', 's', '!' });

        tcpAdapter.Send(connectServerRequest);

        // Wait data conversion.
        Thread.Sleep(200);

        byte[] raw_request = writeOnlyMemoryStream.buffer;
        Assert.AreEqual(BytesUtils.Slice(raw_request, 0, 2), BytesUtils.HexStringToByteArray("0005"));
        Assert.AreEqual(BytesUtils.Slice(raw_request, 2, 4), BytesUtils.HexStringToByteArray("1289 CB79"));
        Assert.AreEqual(BitConverter.ToString(raw_request, 6, 256), "hello");
        Assert.AreEqual(BitConverter.ToString(raw_request, 262, 256), "pass!");
    }
Пример #5
0
        public long readLong()
        {
            long l = BytesUtils.bytesToLong(buffer, offset);

            this.offset = this.offset + 8;
            return(l);
        }
Пример #6
0
        public bool VerifyContentHash(byte[] computedHash)
        {
            if (this._contentHash == null)
            {
                byte tag = this._binaryReader.ReadByte();
                if (tag != 0x42)
                {
                    throw new InvalidDataException();
                }

                IFileStreamHandler <IDictionary <string, object> > dataHandler =
                    this._handlerFactory.GetHandler <IDictionary <string, object> >(tag);
                IDictionary <string, object> contentDirectory = dataHandler.Handle(this._binaryReader);
                contentDirectory.TryGetValue("type", out var typeValue);
                if ("metadata".Equals(typeValue))
                {
                    contentDirectory.TryGetValue("file_md5", out var md5Value);
                    string md5String = md5Value as string;
                    if (md5String == null)
                    {
                        throw new InvalidDataException();
                    }

                    this._contentHash = md5String;
                }
            }

            byte[] hashExpected = BytesUtils.HexStringToByteArray(this._contentHash);
            return(BytesUtils.ByteArrayCompare(hashExpected, computedHash));
        }
Пример #7
0
        private void Handle()
        {
            try
            {
                RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();
                string mCryptoProviderPublicKey      = rsaProvider.ToXmlString(false);
                byte[] keyData = Encoding.ASCII.GetBytes(mCryptoProviderPublicKey);
                mSocket.Send(keyData);

                byte[] passwordDataDecrypted = ReceiveAndDecryptData(rsaProvider);
                string password = Encoding.ASCII.GetString(passwordDataDecrypted);

                byte[] okData               = Encoding.ASCII.GetBytes(Consts.SERVER_OK);
                byte[] wrongPasswordData    = Encoding.ASCII.GetBytes(Consts.SERVER_WRONG_PASSWORD);
                byte[] wrongConnectInfoData = Encoding.ASCII.GetBytes(Consts.SERVER_INVALID_CONNECT_INFO);

                if (password == mPassword)
                {
                    mSocket.Send(okData);
                }
                else
                {
                    mSocket.Send(wrongPasswordData);
                    throw new WrongPasswordException();
                }

                byte[] connectInfoData = ReceiveAndDecryptData(rsaProvider);
                TripleDESCryptoServiceProvider tdesProvider;
                tdesProvider     = new TripleDESCryptoServiceProvider();
                tdesProvider.Key = BytesUtils.GetRange(connectInfoData, 0, 24);
                tdesProvider.IV  = BytesUtils.GetRange(connectInfoData, 24, 8);
                int connectType = BitConverter.ToInt32(connectInfoData, 32);
                switch (connectType)
                {
                case ConnectType.TYPE_REMOTE_CONSOLE:
                    mSocket.Send(okData);
                    mRCServer = new RemoteConsoleServer(mSocket, tdesProvider);
                    break;

                case ConnectType.TYPE_REMOTE_DESKTOP:
                    mSocket.Send(okData);
                    mRCServer = new RemoteDesktopServer(mSocket);
                    break;

                case ConnectType.TYPE_REMOTE_EXPLORER:
                    mSocket.Send(okData);
                    mRCServer = new RemoteExplorerServer(mSocket);
                    break;

                default:
                    mSocket.Send(wrongConnectInfoData);
                    throw new InvalidConnectTypeException();
                }
                mRCServer.BeginService();
            }
            catch
            {
                mSocket.Close();
            }
        }
Пример #8
0
        public String readPadStringAndRightTrim(int totalLength)
        {
            String str = BytesUtils.toStringAndRightTrim(buffer, offset, totalLength);

            this.offset = offset + totalLength;
            return(str);
        }
Пример #9
0
        private void Connect()
        {
            try
            {
                byte[] dataBuffer = new byte[1024];
                int    readCount  = 0;

                mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                mSocket.Connect(mHost, mPort);
                RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();
                readCount = Socket.Receive(dataBuffer);
                string cryptoProviderPublicKey = Encoding.ASCII.GetString(dataBuffer, 0, readCount);
                rsaProvider.FromXmlString(cryptoProviderPublicKey);

                byte[] passwordData          = Encoding.ASCII.GetBytes(mPassword);
                byte[] passwordDataEncrypted = rsaProvider.Encrypt(passwordData, true);
                mSocket.Send(passwordDataEncrypted);

                readCount = mSocket.Receive(dataBuffer);
                string result = Encoding.ASCII.GetString(dataBuffer, 0, readCount);
                if (result != "OK")
                {
                    InvalidPasswordException exception = new InvalidPasswordException();
                    exception.Password      = mPassword;
                    exception.ServerMessage = result;
                    throw exception;
                }

                mCryptoServiceProvider = new TripleDESCryptoServiceProvider();
                byte[] keyData              = mCryptoServiceProvider.Key;
                byte[] ivData               = mCryptoServiceProvider.IV;
                byte[] typeData             = BitConverter.GetBytes(mConnectType);
                byte[] connectData          = BytesUtils.Merge(keyData, ivData, typeData);
                byte[] connectDataEncrypted = rsaProvider.Encrypt(connectData, true);
                mSocket.Send(connectDataEncrypted);

                readCount = mSocket.Receive(dataBuffer);
                result    = Encoding.ASCII.GetString(dataBuffer, 0, readCount);
                if (result != "OK")
                {
                    InvalidConnectInfoException exception = new InvalidConnectInfoException();
                    exception.ServerMessage = result;
                    throw exception;
                }

                ConnectSucceedArgs args = new ConnectSucceedArgs();
                mForm.Invoke(mConnectSucceedHandler, this, args);
            }
            catch (Exception ex)
            {
                mSocket.Close();
                mSocket = null;
                mCryptoServiceProvider = null;

                ConnectFailArgs args = new ConnectFailArgs();
                args.Reason = ex;
                mForm.Invoke(mConnectFailHandler, this, args);
            }
        }
Пример #10
0
        void ProcessCommand()
        {
            byte[] requestMessage = new byte[Nagios.Net.Client.Nrpe.NrpeConstants.MAX_PACKETBUFFER_LENGTH];
            Array.Copy(_data, 10, requestMessage, 0, Math.Min(_data.Length - 10, requestMessage.Length));

            string tmp = System.Text.ASCIIEncoding.ASCII.GetString(requestMessage);

            string request = tmp.Substring(0, tmp.IndexOf('\0'));

            string[]     prms     = request.Split(new char[] { '!' }, StringSplitOptions.RemoveEmptyEntries);
            MessageState msgState = MessageState.STATE_UNKNOWN;
            string       response = request;

            if (prms.Count() > 0)
            {
                string cmdName = prms[0];

                // find module that can run command
                IModule module = NrpeRegisteredCommands.GetModule(cmdName);
                if (module != null && module is INrpe)
                {
                    ((INrpe)module).RunCommand(cmdName, null, out msgState, out response);
                }
            }
            byte[] rsp             = System.Text.ASCIIEncoding.ASCII.GetBytes(response);
            byte[] responceMessage = new byte[Nagios.Net.Client.Nrpe.NrpeConstants.MAX_PACKETBUFFER_LENGTH];
            Array.Copy(rsp, 0, responceMessage, 0, Math.Min(rsp.Length, responceMessage.Length));

            // send response
            NrpePacketHeader hdr = new NrpePacketHeader();

            hdr.packet_version = BitConverter.ToInt16(new byte[] { _data[1], _data[0] }, 0);
            hdr.packet_type    = BitConverter.ToInt16(new byte[] { _data[3], _data[2] }, 0);
            hdr.crc32_value    = BytesUtils.ReverseBytes(BitConverter.ToUInt32(new byte[] { _data[4], _data[5], _data[6], _data[7] }, 0));

            using (MemoryStream ms = new MemoryStream(_data))
            {
                ms.Seek(0, SeekOrigin.Begin);
                ms.Position = 4;
                ms.WriteInt(0);

                int hash = Nagios.Net.Client.Nsca.CRC32.Compute(ms.ToArray(), 0, Nagios.Net.Client.Nrpe.NrpeConstants.MAX_PACKET_LENGTH);

                ms.Seek(0, SeekOrigin.Begin);
                ms.WriteShort((short)PacketVersion.NRPE_PACKET_VERSION_2);
                ms.WriteShort((short)PacketType.RESPONSE_PACKET);
                ms.WriteInt(0);
                ms.WriteShort((short)msgState);
                ms.Write(responceMessage, 0, responceMessage.Length);
                ms.Position = Nagios.Net.Client.Nrpe.NrpeConstants.MAX_PACKET_LENGTH - 2;
                ms.WriteShort(0);

                int hash2 = Nagios.Net.Client.Nsca.CRC32.Compute(ms.ToArray(), 0, Nagios.Net.Client.Nrpe.NrpeConstants.MAX_PACKET_LENGTH);
                ms.Position = 4;
                ms.WriteInt(hash2);

                _data = ms.ToArray().Take(Nagios.Net.Client.Nrpe.NrpeConstants.MAX_PACKET_LENGTH).ToArray();
            }
        }
Пример #11
0
        public void CreateFromGrayscale()
        {
            byte value = 128;
            var  pixel = new Pixel32(value);
            var  color = Color.FromArgb(value, value, value);

            Assert.AreEqual(color.ToArgb(), BytesUtils.GetDataFromArgb(pixel.A, pixel.R, pixel.G, pixel.B));
        }
Пример #12
0
        private byte[] ReceiveAndDecryptData(RSACryptoServiceProvider rsaProvider)
        {
            byte[] dataBuffer = new byte[1024];
            int    dataCount  = mSocket.Receive(dataBuffer);

            byte[] dataEncrypted = BytesUtils.GetRange(dataBuffer, 0, dataCount);
            byte[] dataDecrypted = rsaProvider.Decrypt(dataEncrypted, true);
            return(dataDecrypted);
        }
Пример #13
0
        public void CreateNewFromRGB()
        {
            byte r     = 123;
            byte g     = 98;
            byte b     = 40;
            var  pixel = new Pixel32(r, g, b);
            var  color = Color.FromArgb(r, g, b);

            Assert.AreEqual(color.ToArgb(), BytesUtils.GetDataFromArgb(pixel.A, pixel.R, pixel.G, pixel.B));
        }
        private static Image <Pixel32> CreateImageFromData(int[] data, int width, int height)
        {
            var result = new Image <Pixel32>(width, height);

            for (int i = 0; i < data.Length; i++)
            {
                BytesUtils.GetArgbFromData(data[i], out byte a, out byte r, out byte g, out byte b);
                result.Set(i, new Pixel32(a, r, g, b));
            }
            return(result);
        }
        public static Bitmap CreateBitmapFromImage(Image <Pixel32> image)
        {
            var data = new int[image.Size];

            for (int i = 0; i < data.Length; i++)
            {
                var pixel = image.Get(i);
                data[i] = BytesUtils.GetDataFromArgb(pixel.A, pixel.R, pixel.G, pixel.B);
            }
            return(CreateBitmapFromData(data, image.Width, image.Height));
        }
Пример #16
0
        public void put4PrefixedString(String str)
        {
            var bytes = BytesUtils.toBytes(str);

            if (bytes == null)
            {
                putInt(NULL);
                return;
            }
            put4PrefixedBytes(bytes);
        }
Пример #17
0
        public void put2PrefixedString(String str)
        {
            var bytes = BytesUtils.toBytes(str);

            if (bytes == null)
            {
                putShort((short)NULL);
                return;
            }
            if (bytes.Length > Int16.MaxValue)
            {
                throw new IndexOutOfRangeException("too large String size:" + bytes.Length);
            }
            put2PrefixedBytes(bytes);
        }
Пример #18
0
        public void testOpenSslKdf()
        {
            byte[] passCode = Encoding.ASCII.GetBytes("test");
            byte[] salt     = BytesUtils.HexStringToByteArray("F6818CAE131872BD");
            Tuple <byte[], byte[]> keyParameters = CryptoUtils.OpenSslKdf("md5", passCode, null, 32, 16);

            Console.WriteLine(BytesUtils.ByteArrayToLowerHexString(keyParameters.Item1));
            Console.WriteLine(BytesUtils.ByteArrayToLowerHexString(keyParameters.Item2));

            byte[] encrypted = BytesUtils.HexStringToByteArray(
                "7faeb63f28f0ae4cd1eb5a92447c8111591755ded24d4a55ea8ec8ac9b3e9bc80dd616aa981b4cccbbeadbf1a3d77e2b");
            byte[] password = BytesUtils.HexStringToByteArray("62754a78392f79396656");
            salt = new byte[0];
            Tuple <byte[], byte[]> tmp = CryptoUtils.OpenSslKdf("md5", password, salt, 32, 16);

            byte[] plain = CryptoUtils.DecryptByteArray(tmp.Item1, tmp.Item2, encrypted);
            Console.WriteLine(BytesUtils.ByteArrayToLowerHexString(plain));
            Console.WriteLine("42785932412d6f75527049385952766d69576969354b6b4346334c564e314f36");
        }
Пример #19
0
    /// <summary>
    /// 发送消息给服务器
    /// </summary>
    /// <param name="netSendModel"></param>
    public override void Send(NetSendModel netSendModel)
    {
        if (isConnection == false)
        {
            Log("服务器未连接,请先连接服务器");
            return;
        }
        TSendModel sendModel  = (TSendModel)netSendModel;
        BytesUtils bytesUtils = new BytesUtils(sendModel.msgId, sendModel.array);
        var        buff       = bytesUtils.toArray();

        sendEventArg.SetBuffer(buff, 0, buff.Length);
        bool willRaiseEvent = socket.SendAsync(sendEventArg);

        if (!willRaiseEvent)
        {
            ProcessSend(sendEventArg);
        }
    }
Пример #20
0
        public void Size_Returns_The_Correct_Size()
        {
            CircularArrayQueue c5 = new CircularArrayQueue(5);

            c5.EnQueue(new byte[] { 1, 2, 3, 4 });
            c5.EnQueue(new byte[] { 5, 6, 7, 8 });
            Assert.That(c5.Size, Is.EqualTo(8));
            byte[] dq1 = c5.DeQueue(3);
            Assert.That(BytesUtils.ByteArrayCompare(dq1, new byte[] { 1, 2, 3 }), Is.True);

            c5.EnQueue(new byte[] { 9, 10, 11, 12, 13 });
            Assert.That(c5.Size, Is.EqualTo(10));
            byte[] dq2 = c5.DeQueue(6);
            Assert.That(BytesUtils.ByteArrayCompare(dq2, new byte[] { 4, 5, 6, 7, 8, 9 }), Is.True);
            byte[] dq3 = c5.DeQueue(3);
            Assert.That(BytesUtils.ByteArrayCompare(dq3, new byte[] { 10, 11, 12 }), Is.True);
            Assert.That(c5.Size, Is.EqualTo(1));
            byte[] dq4 = c5.DeQueue(1);
            Assert.That(BytesUtils.ByteArrayCompare(dq4, new byte[] { 13 }), Is.True);
        }
Пример #21
0
        public void InitParsing()
        {
            //Read "__CLOUDSYNC_ENC__"
            this._stream       = this._fileItem.GetStream();
            this._binaryReader = new BinaryReader(this._stream);

            byte[] magicBytesRead = this._binaryReader.ReadBytes(MagicBytes.Length);
            if (!BytesUtils.ByteArrayCompare(MagicBytes, magicBytesRead))
            {
                throw new InvalidDataException($"File {this._fileItem.Name} is not Synology Cloud Sync file.");
            }

            //check "__CLOUDSYNC_ENC__" Md5 hash
            byte[] magicHashRead     = this._binaryReader.ReadBytes(32);
            byte[] magicHashComputed =
                Encoding.ASCII.GetBytes(BytesUtils.ByteArrayToLowerHexString(CryptoUtils.Md5(MagicBytes)));
            if (!BytesUtils.ByteArrayCompare(magicHashRead, magicHashComputed))
            {
                throw new InvalidDataException($"File {this._fileItem.Name} is not a valid Synology Cloud Sync file.");
            }
        }
Пример #22
0
 public long readSVLong()
 {
     return(BytesUtils.zigzagToLong(readVLong()));
 }
Пример #23
0
 public int readSVInt()
 {
     return(BytesUtils.zigzagToInt(readVInt()));
 }
Пример #24
0
 public void putSVLong(long v)
 {
     putVar64(BytesUtils.longToZigZag(v));
 }
Пример #25
0
 private void putVar64(long v)
 {
     this.offset = BytesUtils.writeVar64(v, buffer, offset);
 }
Пример #26
0
 public void putLong(long v)
 {
     this.offset = BytesUtils.writeLong(v, buffer, offset);
 }
Пример #27
0
 public void putShort(short v)
 {
     this.offset = BytesUtils.writeShort(v, buffer, offset);
 }
Пример #28
0
 private void putVar32(int v)
 {
     this.offset = BytesUtils.writeVar32(v, buffer, offset);
 }
Пример #29
0
 public void putSVInt(int v)
 {
     this.offset = BytesUtils.writeSVar32(v, buffer, offset);
 }
Пример #30
0
 public void putInt(int v)
 {
     this.offset = BytesUtils.writeInt(v, buffer, offset);
 }