четверг, 31 марта 2011 г.

Храните деньги на депозите в банке

Выбирать депозит всегда необходимо исходя из Вашей цели. Она и обусловит вид необходимого Вам депозита или перечень характеристик, которыми он должен обладать. А чтобы Вы имели представление, какие виды депозитов вообще бывают, проведем ознакомительный экскурс.


Депозиты в РБ делятся на три основные категории: до востребования, срочные и условные. 
Под условным понимается депозит, по которому сумма вклада с начисленными процентами возвращается вкладчику при наступлении/ненаступлении определенного в заключенном договоре обстоятельства (события). Пока применяется для частных лиц достаточно редко.

По вкладам до востребования конкретный срок хранения не устанавливается. Это самый простой и удобный вклад. На него можно вносить, в том числе пополнять, и с него можно снимать любые суммы и в любое удобное для вас время. Такой вклад есть во всех банках, он открывается в любой валюте, с которой может работать банк, деньги на таком счёте доступны всегда. Но и заработать не удастся – на таких вкладах крайне низкая процентная ставка. Такой вклад подходит тем, кто просто не хочет хранить деньги дома, но которые могут понадобиться в любой момент, либо для проведения разовых расчетных операций (внес и вскоре снял/перевел).

Срочные депозиты открываются на определенный срок, в течение которого клиент не имеет права забрать деньги. Чем больше срок, тем выше доходность депозита. Доходность также зависит от суммы (чем больше сумма, тем больше ставка) и от частоты начисления процентов (чем чаще, тем меньше доходность).По окончании срока клиент получает всю сумму депозита с процентами (или без них, если их выплачивали в течение срока). Процентные ставки по срочным вкладам достаточно высокие, поэтому их открывают те, кто хочет увеличить итоговую сумму.

В случае, если Вы досрочно забираете средства со срочного депозита, проценты по вкладам обычно начисляются по ставке «до востребования», т.е. минимальной. Однако некоторые банки, стремясь повысить привлекательность своей депозитной линейки, вводят вклады, в условиях которых предусмотрены повышенные, по сравнению со ставкой вклада «до востребования», проценты при досрочном снятии. Это может быть удобно, если вероятность досрочного изъятия Вами депозита крайне мала, но все же вероятна.

Если же вы забыли вовремя забрать деньги, то банк переводит ваши деньги на счёт до востребования или продлевает (пролонгирует) действие договора. Процентный доход за основной период начисляется в полном объеме согласно договору.
Оговоримся, что нижеприведенные деления депозитов на практике условно, т.к. часто встречаются вклады, сочетающие «разнородные» характеристики. 
Срочные вклады делят на сберегательные и накопительные. Главное их отличие – в возможности или невозможности пополнения.
Сберегательный - это собственно традиционный вклад, с минимумом функций, в том числе в ряде случаев с процентов.
Если Вам не принципиально получать дополнительный доход ежемесячно, можете открыть сберегательный депозит. Как правило, по нему внесение денег в период действия договора не предусмотрено. Однако он – очень удобный способ сберечь свои накопления, не растратив их на мелочи. Другими словами, вы приносите в банк определенную сумму, заключаете договор, выбираете вклад с удобным режимом выплаты процентов (доходный – помесячно, поквартально; сберегательный – в конце срока, а бывает, но не в РБ, авансом!), но денег на счет больше не вносите.

При этом, стоит учитывать, что депозиты с процентов (ежемесячно начисленные проценты по вкладу прибавляются к сумме вклада и в дальнейшем начисление происходит уже на сумму вклада с учетом ранее капитализированных процентов) при равных ставках процентов дают дополнительный выигрыш в итоговой сумме. Система поиска benefit.by учитывает это при расчете итоговых выплат, так что «капитализация» - это просто к сведению.

Накопительные депозиты – это вклады с возможностью увеличения первоначальной суммы. Основная задача — накопить сумму для крупной покупки. Их главное преимущество в том, что, открыв такой депозит, можно реально увеличить итоговую сумму, причем проценты по вкладам будут начисляться на все увеличивающуюся сумму. В этом случае уже не так важно, в каком режиме их будут выплачивать. Как правило, люди, открывающие накопительный вклад, стремятся скопить побольше и проценты не забирают, плюсуя их к сумме вклада.

Данные вклады зачастую предлагаются банками в рамках комплексных программ. К примеру, в рамках «жилищной» программы клиенту предлагается накопить часть стоимости жилья на специальном вкладе, после чего банк выдает кредит на недвижимость на оставшуюся сумму.

Процентные ставки по накопительным депозитам немного ниже, чем по сберегательным и доходным, так как банк заранее не знает, сколько же денег окажется на счете в определенный момент времени. Но если у клиента нет на руках большой суммы, но он может делать небольшие ежемесячные взносы, то размер ставки отходит на второй план.
Стоит отметить, что доход по депозитам в РБ начисляется в виде процентов, потому иногда банковские депозиты называют "процентные депозиты".

В Беларуси ставка процентов на сумму пополнения вклада, как правило, не отличается от основной. Однако в депозитном договоре банк может прописать различные ограничения, которые могут помешать вкладчику максимально эффективно пользоваться накопительным счетом.
Во-первых, это могут быть ограничения по сумме общего вклада (то есть счет можно пополнять до определенного уровня или минимальной сумме пополнения).
Во-вторых, могут быть ограничения по срокам. Например, вклад разрешается пополнять только первые полгода или нельзя пополнять в последний месяц и т.п. Со стороны банков такое ограничение вполне логично: им невыгодно выплачивать клиенту высокий процент как по годовому вкладу за сумму, которая пролежала месяц.

Существуют также пополняемые депозиты с возможностью частичного изъятия средств без потери процентов. Такие счета можно пополнять, однако размер минимального взноса и сроки пополнения чётко оговариваются в договоре. Деньги можно снимать, но сумма средств на счёте не должна опускаться ниже оговоренного порога – неснижаемого остатка. На подобных счетах процентная ставка чуть ниже, чем на классических срочных депозитах.


Стоит еще упомянуть несколько обособленных видов вкладов.

Расчетные (как правило, с выпуском банковской дебетовой карточки). Для желающих сохранить контроль над размещенными средствами. Такие вклады также пополняемые, кроме этого в рамках таких вкладов обычно предлагается периодическая (к примеру, ежемесячная) выплата процентов на счет или пластиковую карту и возможность свободно использовать средства вклада с одним условием: на счете всегда должна оставаться сумма в размере особо оговоренного минимального остатка, в противном случае ставка автоматически снижается.

Мультивалютный депозит позволяет хранить деньги в нескольких валютах с отдельной процентной ставкой по каждой из них. Здесь также есть неснижаемый остаток по каждой валюте, всё, что выше него, может быть снято или переведено в другую валюту по курсу банка.

Специализированные вклады, предназначенные для отдельных категорий клиентов — для ветеранов, пенсионеров, детей, работников определенных предприятий, клиентов банка.

Источник http://benefit.by/page/show/articles/21.

понедельник, 28 марта 2011 г.

Для чего нужен ипотечный калькулятор

Если Вы решили взять в банке ипотечный кредит, но хотите заранее узнать величину суммы, которую Вам сможет выдать кредитная организация, а также размер ежемесячных выплат, то для начала можно воспользоваться ипотечным калькулятором. Это очень удобная программа, которая позволит быстро сделать необходимые расчеты. Сегодня на сайте большинства банков обязательно существует такая услуга как ипотечный калькулятор. Поскольку каждый банк не только имеет свои собственные программы ипотечного кредитования, но и выдвигает определенные требования к заемщику, то можно сидя за компьютером проверить, подходите ли Вы с банком друг другу. Конечно, расчеты с помощью ипотечного калькулятора не являются абсолютно точными и без личного похода в кредитную организацию не обойтись. Ведь расчеты, проведенные Вами самостоятельно, не дают гарантии положительного ответа банка на получение ипотечного кредита. Однако сделать необходимый предварительный расчет и помочь Вам в выборе банка, в котором будут самые подходящие для Вас условия кредитования, калькулятор однозначно сможет.

На данный момент есть калькуляторы, которые помогут рассчитать максимальную сумму банковского кредита, учитывая совокупные ежемесячные доходы клиента и его семьи. Существуют также и другие виды ипотечных калькуляторов, с помощью которых рассчитываются выплаты банку-кредитору, исходя из рыночной стоимости покупаемой недвижимости, а также величины первоначального взноса. Расчет платежей ипотечного кредита можно осуществлять или по аннуитетной схеме, или по дифференцированной (стандартной). Аннуитетная схема имеет место тогда, когда кредит погашается равными платежами в течение всего срока выплаты кредита. Платежи состоят как из выплат самого тела кредита, так и процентов, начисленных банком за пользование ипотекой. В России именно аннуитетные платежи стали наиболее популярными и распространенными среди населения. Они являются достаточно удобными при планировании бюджета семьи заемщика, поскольку представляют собой одинаковый по размеру платеж каждый месяц. Стандартная или дифференцированная форма – это такой вид платежа, при котором само тело кредита заемщик выплачивает одинаковыми частями во время всего кредитного срока, а проценты банку-кредитору насчитываются на остаток суммы задолженности, которая каждый месяц уменьшается. Поэтому необходимо учесть, что если в самом начале погашения кредита сумма ежемесячных аннуитетных выплат будет меньше, чем сумма дифференцированных платежей, то со второй половины кредитного срока платеж по дифференцированной схеме значительно уменьшится. В итоге получится, что если заемщик выбрал для себя аннуитетную схему расчета, то он заплатит банку-кредитору большую денежную сумму, чем тот заемщик, который рассчитывается по стандартной схеме.

При пользовании ипотечным калькулятором необходимо учитывать что они, как правило, настроены на определенную процентную ставку данного банка. Поэтому применять их для расчета под другие процентные ставки невозможно. Зато можно определить стоимость краткосрочного и долгосрочного кредитов и выбрать себе наиболее выгодную ипотечную программу. Однако если Вам нужен точный расчет по ипотеке, то следует обратиться непосредственно в банк, который показался наиболее подходящим после общения с ипотечными калькуляторами разных кредитных организаций.

Благодаря использованию ипотечного калькулятора, Вы имеете прекрасную возможность оценить не только быстро, но и наглядно денежные затраты, которые вам предстоят во время приобретения жилья по ипотеке.
Расчет ипотеки с помощью кредитного калькулятора. http://russia.allbanks.org/info/credits.html



При подготовке были использованы материалы сайта http://www.creditsbrf.ru/articles/013.htm


пятница, 25 марта 2011 г.

С++ ООП. Проектирование сетевого клиента.


Поскольку мы уже немного освоились с перехватом сетевого трафика, с тем как формируются пакеты передаваемые по сети и программировании сетевых приложений, то пора уже приступать к важной части – проектированию приложения. И если с логикой работы программы у нас не возникает затруднений потому, что достаточно пары условий и действий по отправке-приему сообщений, то вот проблемы с раздутием кода из-за появления временных переменных и прочего непотребного хлама начинают уставать глаза и напрягаться мозг. Выход есть. Спроектировать приложение с учетом парадигмы ООП, которая нам поможет и код сделать понятным, да и ООП научиться применять на практике.
Но с чего нужно начать? Куда это ООП прикладывать или приписывать? Как мы уже видели, логика работы с сетью однозначна и не требует улучшений. А вот с самими пакетами дела обстоят намного хуже. Постоянно приходится что-то с ними делать, то разбирать на части, выделяя заголовок или тело, то сравнивать с чем-то. Вот тут-то и начинается простор для проектировщика.
Что на текущий момент нам уже известно:
1)      Приходящие и отправляемые пакеты – это набор символов (в С++ их удобно хранить в массивах).
2)      Обычно такие сообщения имеют заголовок 4 символа (байта).
3)      Тело таких сообщений может быть разной длины.



Не забудем, что еще у нас есть ID клиента для сетевой и его тоже нужно где-то постоянно хранить.
Теперь давайте приблизительно набросаем, что необходимо для простой и незамысловатой работы с сетевыми пакетами:
1)      Длина всего сообщения
2)      Заголовок и его длина.
3)      Тело сообщения и его длина.
4)      ID сетевого клиента и его длина.

Поскольку ООП предполагает принцип разделения данных и методов и сокрытия внутренних механизмов от пользователя (инкапсуляция), то будем исходить из того, что данные будут недоступны напрямую, а для того чтобы получить значение того или иного нужного нам свойства объекта будет использовать методы.
В результате можно предположить, что неплохо было бы обзавестись следующими методами для приходящих пакетов:
1) Выделение из полученного пакета заголовка и тела, заполнение полей отвечающих за длины заголовка и тела.
2) Установка, получение длины сетевого пакета.
3) Установка, получение заголовка пакета
4) Установка, получение длины заголовка пакета.
5) Установка, получение тела пакета
6) Установка, получение длины тела  пакета.
7) Установка, получение ID пакета
8) Установка, получение длины ID пакета.

Что касается формирования отправляемого пакета данных, но свойства и методы не сильно отличаются от перечисленных выше.

Для примера разберем содержимое заголовочного файла rcvpckt.h, в котором объявим все, что необходимо для работы с приходящими пакетами:

const unsigned int mx_buff = 2048+2;
const unsigned int hdrSz = 4+1;
const unsigned int bdySz = mx_buff-hdrSz;

class rcvPckt
{
    char id[hdrSz];
    int idLen;
    char header[hdrSz];
    char bdy[bdySz];
    int hdrLen;
    int bdyLen;


public:
    char rPckt[mx_buff];

    rcvPckt()
    {
        hdrLen = hdrSz-1;
    }

    void setRcvdPcktLen(int len)
    {
         bdyLen = len - hdrLen+1;
    }

    int getRcvdPcktLen()
    {
        return hdrLen + bdyLen;
    }

    char *getRcvdPckt()
    {
        return &rPckt[0];
    }

    void setHdr(char *value, unsigned int len);

    char *getHdr()
    {
        return &header[0];
    }

    int getHdrLen()
    {
        return hdrLen;
    }

    void setBdy(char *value, unsigned int len);

    char *getBdy()
    {
        return &bdy[0];
    }

    int getBdyLen()
    {
        return bdyLen;
    }

    void setId(char *value, unsigned int len);

    char *getId()
    {
        return &id[0];
    }

    int getIdLen()
    {
        return idLen;
    }

    void fillRcvdPckt(char *value, unsigned int len);

};

И заголовочное файла sndpackt.h:

const unsigned int mx_buff = 2048+2;
const unsigned int hdrSz = 4+1;
const unsigned int bdySz = mx_buff-hdrSz;

class sndPckt
{
    char sPckt[mx_buff];
    char header[hdrSz];
    char bdy[mx_buff - hdrSz];
    int hdrLen;
    int bdyLen;

public:

    sndPckt()
    {
        hdrLen = hdrSz-1;
    }

    void setHdr(char *value, unsigned int len);

    char *getHdr()
    {
        return &header[0];
    }

    int getHdrLen()
    {
        return hdrLen;
    }

    void setBdy(char *value, unsigned int len);

    void setBdyNoth();

    char *getBdy()
    {
        return &bdy[0];
    }

    int getBdyLen()
    {
        return bdyLen;
    }

    char *sendPckt();

   
    int sendPcktLen()
    {
        return hdrLen + bdyLen;
    }
};

Теперь все манипуляции с сетевыми пакетами должны стать более наглядными и простыми для чтения. Теперь можно переходить к этапу реализации методов для созданных классов.

пятница, 18 марта 2011 г.

Алгоритм изменения Id сетевого клиента. Воплощение в коде.


Почти со всеми вопросами, касающимися алгоритма получения и обработки Id клиента сетевой игры мы разобрали. Пора перейти непосредственно к воплощению задуманного в коде. Но постойте. Кажется, что мы что-то упустили из виду. Так и есть. Ведь все наши рассуждения относительно того, как происходит процесс преобразования приходящей информации, строились исходя из того, что работать будем не с байтами, а с частями этих байтов. Давайте вспомним как все это выглядит в действительности в нашей программе сейчас. Приходит сообщение из 8 байт и мы записываем его в массив.
char ans1[] = { 0xCF, 0xCF, 0xCF, 0xCF, 0x01, 0x02, 0x30, 0x40, 0};
Для примера, приведен массив, в котором хранится присылаемый сервером пакет вместе с заголовком. Значит заголовок:
0xCF, 0xCF, 0xCF, 0xCF
Тело сообщения:
0x01, 0x02, 0x30, 0x40
Но вот беда, наш алгоритм рассчитан на работу с каждой отдельной шестнадцатеричной единицей. А давайте попробуем написать собственную функцию, которая будет из принятого массива 4 байт создавать новый массив размером 8 ячеек, в каждой из которой будет хранится одно шестнадцатеричное число. То есть результат предыдущего тела сообщения должен предстать в виде:
0x0, 0x1, 0x0, 0x2, 0x3, 0x0, 0x4 , 0x0.
Опять же значения каждого числа записаны в шестнадцатеричном виде.
Чтобы была понятна сама схема разбора на составные части, попробуем представить этот процесс для одного числа.
0х01 = 1 * 16 0 + 0 * 16 1 = 1
0х40 = 0 * 16 0 + 4 * 16 1 = 64
Для того чтобы сделать все тоже самое, но только обратно, то есть из десятичного числа получить 16-чное:
1 = 1 / 16 1 = 0 (остаток 1) – это первое 16-чное значение
1 = 1 / 16 0 = 1 (остаток 0) – это второе 16-чное значение

64 = 64 / 16 1 = 4 (остаток 0) – это первое 16-чное значение
0 = 0 / 16 0 = 0 (остаток 0) – это второе 16-чное значение

Вот что получилось, если сделать функцию, для обработки массива любого размера:
char *Decod(char *value, unsigned int len)
    {
        char *dec = new char[len * 2];
        for (unsigned int i = 0, j = 0; i < len*2; i += 2, j++)
        {
            dec[i] = (unsigned char)((unsigned char)value[j] / 16);
            dec[i + 1] = (unsigned char)((unsigned char)value[j] % 16);
         }
    }
Видно, что подавать на вход мы должны массив и его размер, а на выходе будет указатель на массив, который размером в два раза больше. И только после этого можно будет обрабатывать каждый отдельный элемент нового массива согласно выведенного нами алгоритма изменения Id. А вот и этот алгоритм, который мы так усердно расписывали в excel:

if ((value[0] == 0) || (value[0] == 8))  { value[0] += 7; }
        else
        if ((value[0] == 1) || (value[0] == 9)) { value[0] += 5; }
        else
        if ((value[0] == 2) || (value[0] == 10)) { value[0] += 3; }
        else
        if ((value[0] == 3) || (value[0] == 11)) { value[0] += 1; }
        else
        if ((value[0] == 4) || (value[0] == 12)) { value[0] -= 1; }
        else
        if ((value[0] == 5) || (value[0] == 13)) { value[0] -= 3; }
        else
        if ((value[0] == 6) || (value[0] == 14)) { value[0] -= 5; }
        else
        if ((value[0] == 7) || (value[0] == 15)) { value[0] -= 7; }


        if ((value[1] == 0) || (value[1] == 1) || (value[1] == 4) || (value[1] == 5))     { value[1] += 10; }
        else
        if ((value[1] == 2) || (value[1] == 3) || (value[1] == 6) || (value[1] == 7))     { value[1] += 6; }
        else
        if ((value[1] == 8) || (value[1] == 9) || (value[1] == 12) || (value[1] == 13))   { value[1] -= 6; }
        else
        if ((value[1] == 10) || (value[1] == 11) || (value[1] == 14) || (value[1] == 15)) { value[1] -= 10; }


        if ((value[2] == 0)  || (value[2] == 1)  || (value[2] == 4) || (value[2] == 5) || (value[2] == 8) ||
            (value[2] == 9)  || (value[2] == 12) || (value[2] == 13)) { value[2] += 2; }
        else
        if ((value[2] == 2)  || (value[2] == 3)  || (value[2] == 6) || (value[2] == 7) || (value[2] == 10) ||
            (value[2] == 11) || (value[2] == 14) || (value[2] == 15)) { value[2] -= 2; }


        if ((value[3] == 0) || (value[3] == 4)) { value[3] += 11; }
        else
        if ((value[3] == 1) || (value[3] == 5)) { value[3] += 9; }
        else
        if ((value[3] == 2) || (value[3] == 6)) { value[3] += 7; }
        else
        if ((value[3] == 3) || (value[3] == 7)) { value[3] += 5; }
        else
        if ((value[3] == 8) || (value[3] == 12)) { value[3] -= 5; }
        else
        if ((value[3] == 9) || (value[3] == 13)) { value[3] -= 7; }
        else
        if ((value[3] == 10) || (value[3] == 14)) { value[3] -= 9; }
        else
        if ((value[3] == 11) || (value[3] == 15)) { value[3] -= 11; }


        if (((value[7] >=0 ) && (value[7] <=3)) || ((value[7] >= 8 ) && (value[7] <=11))) { value[7] += 4; }
        else
        if (((value[7] >= 4) && (value[7] <= 7)) || ((value[7] >= 12) && (value[7] <= 15))) { value[7] -= 4; }

Где массив value[] это то, что должно у нас появиться после работы функции Decod.

А что же дальше? После обработки каждого отдельного шестнадцатеричного значения, нужно будет свернуть 8 шестнадцатеричных чисел обратно в 4 байта. И в этом нам поможет функция:
char *Encod(char *value, unsigned int len)
    {
        char *en = new char[len/2];
        for (unsigned int i = 0, j = 0; i < len; i += 2, j++)
        {
            en[j] = (unsigned char)((unsigned char)(value[i] * 16) + (unsigned char)value[i + 1]);
            //Console.WriteLine(en[j]);
        }

        return en;
    }
Здесь все происходит ровно наоборот, если сравнивать с функцией Decod, то есть создаем из пары 16-чных чисел одно десятичное.

Пора собирать все это в единый монолит и лишь надеяться на очередное чудо.

Исходный код клиента, который принимает, обрабатывает ID и отправляет серверу.
Для наглядности включена функция вывод массива на экран, которая сначала показывает значения ID пришедшие с сервера в количестве 8 штук (то есть те самые 8 16-чных значений, после разбиения 4 байтов на куски), а затем этот же ID после «магических пассов» и до отправки на сервер.

Маленькое чудо своими руками мы сотворили.

среда, 16 марта 2011 г.

Алгоритм изменения Id сетевого клиента.


Как уже нам стало известно, для начало общения необходимо принять от сервера набор из 8 шестнадцатеричных значений (или по-простому, 4 байта), которое является уникальным идентификатором сетевого клиента - Id, затем магическим образом изменив их, нужно отправить этому серверу. Для того чтобы поближе ознакомится с эталоном принимаемого Id и отправляемого, мы уже реализовали сервер и попробовали отправлять заранее известные комбинации значений, а затем сохранять для изучения ответы сетевого клиента. Чтобы максимально упростить задачу, отправим всего 16 сообщений и проследим за их метаморфозами, а при удачном стечении обстоятельств, узнаем какой алгоритм изменения был использован.
Вот эти 16 сообщений отправленные нашим сервером и ответы, которые прислал настоящий клиент:


Улов настоящего охотника за сетевыми пакетами богат. Пора сворачивать сети и начинать разбирать улов. Первое, что бросается в глаза, это то, что мы работать должны не с байтами, а с 16-чными числами, которых получается 8 штук. Из этих 8, как видно изменяются первые 4 и последнее. А 5, 6, 7 не изменяются. Ну что, можно считать, что полдела сделано.
Дальше запишем все изменения, выделив столбец для каждого 16-чногочисла, группировку делаем по 2 строки, первая строка – это поданные на вход числа, вторая строка – это принятые от сетевого клиента числа:



В таком виде ничего внятного сказать нельзя о том, как изменяется Id. Попробуем перемешать всю эту кашу и подать с другим соусом.



Для каждого 16-чного числа запишем, что отправляет клиент (id сервера), что отправляет настоящий клиент (id клиента) и разницу между этими значениями. Соответственно в каждом столбце записаны конкретные значения, которые могут принимать это 16-чные числа.

А вот и вторая половина дела сделана, осталось только все это воплотить в коде.

воскресенье, 13 марта 2011 г.

Разбираем процесс сетевого общения в деталях. Эмулируем сервер.


Наше дело застопорилось и видимо продвигаться дальше не хочет. Все возможные варианты были перебраны, но присылаемый ответ от сервера нам так и не удалось преобразовать для последующей отправки обратно. Видно уж очень хитрый алгоритм применяется. Как же быть? В нашем случае не нужно рвать волосы на голове или груди, не нужно брать волшебный бубен и исполнять тайный танец. А все потому, что в нашем распоряжении имеется парочка трюков. Итак, приступим к вскрытию этого хитрого алгоритма преобразования полученного сообщения – идентификатора сетевого клиента, который назовем для краткости Id. Есть два пути:
1)      Для этого нам понадобится тысяча часов неустанного наблюдения за посылаемыми пакетами, запись их в экселевкий файл, выделение всех уникальных сообщений, создание математической формулы для расчета преобразования.
2)      Создание собственного сервера, а затем посыл данных каких мы хотим, чтобы узнать, как все-таки отвечает на них клиент.
Ну что, выбираем вариант №2?

Немного поколдовав над кодом программы и немного его видоизменив, получаем уже не клиент, а сервер который будет вместо настоящего сервера игры получать и отправлять данные, общаясь с настоящим клиентом. То есть задумка такая:
1)      Запускаем собственный сервер, который будет ожидать от настоящего клиента сообщения «EFEFEFEF».
2)      Посылаем в ответ «CFCFCFCF» + некоторое сообщение («Х»).
3)      Смотрим, как на это сообщение отреагирует клиент и что пришлет нам.
Так что вместо «Х»? Ну, поскольку, «Х» это кусочек, который имеет размер 4 байта, то значит нужно отсылать все возможные комбинации этих 4 байтов. То есть:
0 0 0 0
0 0 0 1
0 0 0 2
0 0 0 3
0 0 0 255
0 0 1 0
0 0 1 1
0 0 255 255
0 1 0 0
255 255 255 254
255 255 255 255

Солидное количество информации. Количество пакетов, которые нужно отправить и принять умопомрачительное. Если еще учесть, что это потом нужно будет все записать, то волосы встают дыбом.
Предлагаю разбить все общение с клиентом нашего сервера на мини-тесты. Другими словами будем следить за изменениями в шестнадцатеричной системе и изменять за один раз на одну шестнадцатеричную единицу. Что-то похожее на это:
00 00 00 00
00 00 00 01
00 00 00 02
00 00 00 0D
00 00 00 0F

00 00 00 10
00 00 00 20
00 00 00 F0

00 00 01 00
00 00 02 00
00 00 0F 00

10 00 00 00
20 00 00 00
F0 00 00 00

Соответственно отследить 16 разных сообщений проще, чем 4 294 967 296 повторов. И будем надеяться на чудо, что нам повезет, и мы увидим хоть что-то похожее на общую формулу изменения Id.
На практике получается, что нужно запустить цикл с повтором 15 и изменять:
1)      Для увеличения первой шестнадцатеричной единицы будем на каждом шаге прибавлять 1.
2)      Для увеличения второй шестнадцатеричной единицы будем на каждом шаге прибавлять 16.
Все это нужно проделать с каждым из 4 байт.

Пробная версия программы.

Начинаем тестирование. Запускаем NPA в режиме захвата локально траффика. Запускаем наш сервер. Запускаем клиент, пытаемся подключиться. Но неожиданно обнаруживаем, что в ответ на 16 пакетов с разными сообщениями, нам в ответ клиент прислал всего лишь одно. Чувство огорчения пусть не сильно нас тревожит. Ведь нам удалось подделать сервер и заставить думать клиент, что он общается с настоящим сервером. Это большая победа. И теперь осталось всего-навсего вручную, без всяких циклов послать 16 х 16 сообщений и записать все результаты в табличном виде.
Пробная версия программы №2.


Первый результат уже получен, дело за малым. Увеличивать каждый раз на шестнадцатеричную единицу отсылаемое сообщение и фиксировать результат.
Итак, первая пара готова.
Послали: CFCFCFCF00000000 .
Получили: CACACACA7A2B0004 .

Ну и напоследок пара замечаний:
Не стоит волноваться, если ваша программа-сервер начнет занимать 40 – 60 % мощности процессора – это нормально для консольного сервера.
Переменная ans1len нужна, для того чтобы хранить размер передаваемой строки по сети, если же будет использоваться strlen (ans1[]), то размер будет определен неправильно, поскольку в строке имеются спец символы, в частности {0xCF, 0xCF, 0xCF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0}. Это означаем, что после измерения длины строки с помощью функции strlen, мы получим неправильную длину – 4 символа. Ведь 0x00 это ноль, а ноль как известно – признак конца строки.

четверг, 10 марта 2011 г.

Разбираем процесс сетевого общения в деталях. Эпизод 2.


Наших знаний пока что хватило на то, чтобы связаться с сервером и получить хоть что-то от него вразумительное в ответ. Теперь же, чтобы продвигаться дальше нужно разузнать, что все-таки отвечает сервер, как это обрабатывать и какой запрос посылать следующим.
Как уже нам известно сервер в ответ на приветствие должен прислать «CFCFCFCF» + Х. В след за этим нужно послать запрос «CACACACA»+ Х. Допустим что «Х» это одно и то же. Попробуем выделять кусок после «CFCFCFCF» и отправлять его, только в начало поставив «CACACACA».
Для удобства заведем массив header[5], куда будем складывать первые 4 полученных байта. Поскольку уже видно, что каждое сообщение передаваемое от сервера к клиенту и обратно имеет постоянную часть и часть, которая может изменяться. И, соответственно, каждый раз когда приходит сообщение будем смотреть на его заголовок, а уж потом разбираться что будем с ним делать.
В результате должно получиться что-то вроде:

Прежде чем запустить пример, нужно поставить NPA в режим захвата локального трафика. Ну что, попробуем?
Ответ сервера на приветствие:

Пробуем послать тоже самое, изменив заголовок:

Ответ один и тот же:


И так повторяя раз за разом, можно убедиться, что исходное предположение о том, «что пришло в теле сообщения то и отправляем серверу» неверно. Нам постоянно приходят сообщения с заголовком «DF DF DF DF» + X + Y. Думаю, что нетрудно заметить, что X везде одинаковый. В нашем примере это «13 E0 58 9E».

Посмотрим за процессом общения настоящего клиента и сервера. Запускам клиент игры. Подключаемся. Стреляем. Отключаемся. Что нас интересует? Прокручиваем весь список отправленных сообщений до конца. И видим, что общение всегда заканчивается сообщением с заголовком «DF DF DF DF». Только этот пакет посылает клиент. Получается, мы узнали две важных вещи.
1)      «DF DF DF DF» - это заголовок пакета, которым завершается общение между клиентом и сервером. Послать его может и клиент, и сервер.
2)      «X» - это своеобразный кусочек, который отправляется сервером и служит уникальным идентификатором для клиента. Как это определить? Очень просто – запустить процесс подключения и отключения настоящего клиента игры раз 100 и проследить за тем, что приходит в сообщении от сервера после заголовка «CACACACA» и сравнить с тем, что отравляется клиентом в сообщении, которым все завершается, то есть после «DF DF DF DF». Совпадает все 100 раз. Итак, это уникальный идентификатор клиента сетевой игры.

Поскольку это важная часть процесса общения, то создадим переменную для хранения уникального идентификатора (Id).

Но так и остался открытым вопрос, что все-таки нужно отправлять серверу, после получения Id?

суббота, 5 марта 2011 г.

Разбираем процесс сетевого общения в деталях. Эпизод 1.


В прошлый раз мы умели начать разговор с сервером, причем сервер нам даже ответил. Настала пора вплотную заняться изучением содержимого ответа и вообще попробовать побольше разузнать о том, что посылают клиент и сервер друг другу. Что для этого понадобится?
Хороший текстовый редактор. Стандартный блокнот не подойдет. Notepad++ то, что нам нужно. Качаем http://notepad-plus-plus.org/download .
Табличный процессор. Обычно это Microsoft Excel.
Установили? Тогда продолжим.
Поскольку нам придется постоянно переключаться между клиентом игры и окном захвата трафика, то лучше установить запуск игры в оконном режиме. Для этого открываем папку, в которой находится игра и находим файл «config.cfg» или «godlypc.cfg», если запускаем игру с максимальными настройками. Открываем с помощью блокнота или NPP (Notepad++). Находим строку «FullScreen = 1» и изменяем на 0. Результатом должно стать «FullScreen = 0». Теперь закрываем текстовый файл, предварительно не забыв сохранить. Вот теперь мы готовы исследовать сообщения сервера и клиента.

Создаем простой Excel файл. Первая колонка будет содержать время, вторая строку, которая будет  содержимым первого переданного сетевого пакета за сеанс игры.

Эпизод 1.
Запускаем сервер. Запускаем перехватчик трафика. Запускаем игру, теперь уже в оконном режиме. Что нас интересует? Прежде всего, с чего начинается взаимодействие. То есть процесс выглядит следующим образом. Записываем в первую колонку текущее время, вместе с секундами (их можно увидеть два раза щелкнув на табло времени в системном трее). В нашей запущенной игре (клиенте) выбираем «Подключиться», дожидаемся, когда все этапы пройдут успешно и появится танк на поле боя, стреляем, отключаемся. Открываем окно с захваченным трафиком.
В окне появилось много строк, но что конкретно мы ищем? Мы ищем первое сообщение, которое посылается по сети. Находим место, с которого начинается общение.


Копируем его в Excel (выделив текст, нажимаем правой кнопкой и «Copy as Hex»). В результате будем иметь что-то вроде:

И так хотя бы раз десять.

Теперь все ясно. Общение всегда начинается клиентом и всегда словами «EFEF EFEF». Оно и понятно, ведь сервер не сможет узнать о существовании страждущего поиграть, пока тот сам не намекнет об этом и поздоровается. Мы уже разобрались, как это реализовать.

Эпизод 2.
Теперь черед разобраться с тем, а что отвечает нам сервер? Для этого ищем, какими были вторые сообщения в сеансах связи. Проделываем тот же трюк как в эпизоде 1, только теперь ищем 2-е сообщения а затем копируем содержимое сообщения в 3-ю колонку. Например, вот так:


Видно, что в сообщении сервера повторяется «CFCFCFCF», а вот что идет дальше? И почему все время изменяется? Пока предположений нет. Что делать? Давайте дальше двигаться. Посмотрим, что посылает клиент, когда увидит в сообщении «CFCFCFCF» + еще что-то.

Эпизод 3.
Ну что, уже не так весело? В окне NPA теперь ищем третьи сообщения в сеансах связи между клиентом и сервером.


И что мы видим? В ответе постоянно «CACACACA» + еще что-то. Но это что-то отличается от того, что приходит от сервера.

В голову приходит пока одно, попробовать схему:
Пришло в сообщении «CFCFCFCF» + х.
Отправить «CACACACA» + х.

пятница, 4 марта 2011 г.

Современные тенденции на рынке ипотеки.

Наиболее распространенные в России ипотечные программы – это кредиты на приобретение готовых квартир. В период кризиса это была практически единственная хоть как-то действующая ипотечная программа. С конца 2009 года в продуктовые линейки банков стали возвращаться кредиты на покупку жилья на этапе строительства, загородного жилья, земельных участков, под залог имеющейся недвижимости.

Медленнее всех идет возвращение программ рефинансирования выданных кредитов на других условиях. Впрочем, и до кризиса это был не самый популярный продукт. Его предлагали преимущественно самые агрессивные игроки, чтобы в период резкого снижения процентных ставок по кредитам не допустить оттока заемщиков в банки с более выгодными условиями и одновременно нарастить ипотечный портфель, переманивая чужих заемщиков.

Не особенно распространенные до кризиса кредиты на приобретение земельных участков сегодня выдают немногие банки – Банк Сосьете Женераль Восток (БСЖВ), банк «Зенит», РосЕвроБанк, Россельхозбанк. 17 марта 2010 года ТрансКредитБанк запустил программу кредитования в рублях на приобретение земельных участков для индивидуального жилищного или дачного строительства под залог приобретаемой земли. Кредиты предоставляются на приобретение земельных участков в Подмосковье, продавцами которых являются ЗАО УК "Солид - Фонды недвижимости" и ООО "Кузяево-Трейд". Минимальный первоначальный взнос по кредиту - 30 % стоимости земельного участка. Кредиты выдаются на короткий срок от 1 до 5 лет под 16-18% годовых, при условии оформления заемщиком полисов страхования жизни и потери трудоспособности, а также предмета залога от гибели и ущерба. В случае выбора заемщиком иных условий страхования процентная ставка по кредиту выше на 2 процентных пункта уровня базовой ставки.

Финансовый кризис 2009 года породил две новых ипотечных программы: предоставление кредитов на приобретение жилья из под залога у неплатежеспособных заемщиков и реструктуризацию кредитов на новых условиях с целью снижения кредитной нагрузки.

Появились первые программы коммерческой ипотеки, не имевшие широкого распространения и до кризиса. Сегодня получить кредит на приобретение объекта коммерческой недвижимости под залог приобретаемой недвижимости можно в Абсолют Банке, Московском кредитном банке, Росбанке, банке "Уралсиб", Ханты-Мансийском банке.


Кредиты на приобретение квартир на этапе строительства
Сейчас практически все банки, предлагающие ипотеку, выдают кредиты на покупку квартир в строящихся домах под залог прав на приобретаемую квартиру. Еще в прошлом году к этому виду кредитования вернулись ВТБ 24, банк «ДельтаКредит», Московский кредитный банк (МКБ). Одним из немногих, кто не прекращал в кризис кредитовать приобретение жилья на этапе строительства, был Сбербанк.

Одна из самых выгодных ипотечных программ для приобретения квартиры на этапе строительства с 1 марта 2010 года появилась в продуктовой линейке Газпромбанка под названием «Юбилейный ипотечный кредит». Приобретение квартиры в строящихся домах». Кредиты предоставляются в рублях, минимальная процентная ставка составляет 13% годовых, первоначальный взнос - от 20%. Погашение кредита может осуществляться аннуитетными или дифференцированными платежами. Обеспечением на период строительства дома служит залог имущественных прав требования и либо страхование финансовых рисков, либо поручительство третьих лиц - с даты предоставления кредита до регистрации права собственности на квартиру.

Часть банков готово выдать кредит на приобретение квартиры у любого хорошо зарекомендовавшего себя девелопера, но довольно многие ограничивают свои предложения партнерскими программами с компаниями, чей бизнес понятен и прозрачен. С другой стороны, учитывая небывалое количество партнерских программ с застройщиками, банки явно стремятся за счет ипотеки решить проблему своих клиентов – застройщиков и девелоперов.

Если жилье приобретается не у партнеров банка, в большинстве случаев обязательным требованием для получения кредита является готовность дома не ниже 60%. В то же время, заемщики, которые берут кредит на приобретение строящегося жилья, предпочитают выбирать объекты высокой степени готовности, памятуя о риске недостроя и повышенной ставке по кредиту до момента регистрации жилья в собственность.

Впрочем, по партнерским программам условия кредитования могут быть более мягкими, чем даже на приобретение готового жилья - более низкие первоначальный взнос по ипотеке и размер процентной ставки. Например, процентные ставки по кредитам на квартиры, предлагаемые на продажу компанией «МИЭЛЬ-Новостройки» в рамках партнерских программ с банками, начинаются от 15% годовых.

Нордеа Банк в феврале снизил ставки по ипотечным кредитам на долевое участие в строительстве для приобретения квартир в домах, возводимых концерном «ЮИТ ДОМ». Минимальная ставка по кредиту на период до момента оформления ипотеки составляет от 13,5%, а с момента оформления ипотеки на приобретаемую квартиру - 12%.

В марте Нордеа Банк и компания «ЮИТ Московия» провели совместную акцию, в рамках которой банк отменил комиссию за выдачу ипотечного кредита на покупку квартир как в строящихся, так и в готовых объектах компании. «ЮИТ Московия» при этом предоставляла получателям кредитов скидку на квартиры от 3% до 5% и брала на себя расходы по государственной регистрации сделки.

Из-за нестабильной экономической ситуации у банков заметно сузился круг потенциальных заемщиков и среди юридических, так и физических лиц, поэтому они стремятся использовать все имеющиеся возможности заработать в секторе розничного кредитования, в том числе, предоставляя кредиты на приобретение строящегося жилья. При этом кризис показал, что опасения по поводу качества кредитов на приобретение жилья на этапе строительства были преувеличены. Как известно, при выдаче именно таких кредитов банкам была всегда свойственна повышенная придирчивость, которая, как видно, и принесла добрые плоды. Елена Тарасова, старший вице-президент ВТБ 24, в ходе выступления на Всероссийской конференции «Ипотечное кредитование в России - перезагрузка рынка», прошедшей в декабре 2009 года, отметила, что по кредитам на строительство жилья в ипотечном портфеле ВТБ 24 фиксируется самый низкий уровень просрочки.


Ипотека для приобретения загородного жилья
Ипотека для приобретения загородного жилья возвращается на рынок чуть менее активнее, чем кредитование квартир в строящихся домах. Кредиты на приобретение и строительство коттеджей и таунхаусов предлагают Банк Москвы, банк «Жилфинанс», Банк Сосьете Женераль Восток (БСЖВ), ВТБ 24, Городской Ипотечный Банк, Банк Интеза, КредитЕвропа Банк, Нордеа Банк, Росбанк, Россельхозбанк, Сбербанк, Связь-Банк, ЮниКредит Банк. С 1 июня к этому списку добавился банк "Московское ипотечное агентство" (МИА).

Помимо этого некоторые банки предлагают кредиты на приобретение земельных участков, в частности, Абсолют Банк, БСЖВ, Россельхозбанк, Ханты-Мансийский банк. С марта 2010 года ТрансКредитБанк начал выдавать кредиты на приобретение земельных участков для индивидуального жилищного или дачного строительства в Подмосковье. Кредиты предоставляются в рублях, на срок от 1 года до 5 лет, на сумму от 200 тыс. до 3 млн. рублей, минимальный первоначальный взнос - 30% от стоимости земельного участка, процентная ставка 16 - 18% годовых в зависимости от размера первоначального взноса.

Главное отличие ипотечных программ по приобретению загородного жилья в большинстве случаев теперь проявляется в величине первоначального взноса, чтобы получить кредит на загородный дом, в большинстве случае надо вложить на 10% больше собственных средств, чем при покупке в кредит квартиры – от 40 до 50%.

Россельхозбанк выдает кредиты на строительство жилого дома в сельской местности для постоянного проживания на период строительства по такой же ставке, что и на приобретение готового жилья, тогда как обычно у банков принято использовать более высокую ставку из-за отсутствия залога до момента государственной регистрации приобретаемой недвижимости.


Нецелевые ипотечные кредиты под залог имеющейся недвижимости
Нецелевые ипотечные кредиты под залог имеющейся недвижимости становятся более доступными. Процентные ставки по ним падают, соотношение кредит/залог увеличивается.
РосЕвроБанк в феврале увеличил размер кредита по программе «Залог» до 70% от стоимости жилья. 2 июня 2010 года Банк Сосьете Женераль Восток (БСЖВ) в июне снизил величину первоначального взноса для заемщиков, приобретающих в кредит загородное жилье, с 40% до 30% и уравнял процентные ставки по кредитам на приобретение загородного жилья и на приобретение квартир.

Банк «Московское Ипотечное Агентство» («МИА») в марте изменил условия выдачи ипотечных кредитов под залог квартиры на вторичном рынке в Москве или Подмосковье таким образом, что они теперь являют собой одно из самых выгодных предложений на рынке. Размер кредита увеличился с 50% до 30% от оценочной стоимости объекта залога. Максимальный срок кредитования увеличился с 10 до 30 лет. Минимальная процентная ставка снижена с 17,5% до 12,6% годовых при условии подтверждения доходов справкой по форме 2-НДФЛ.


Рефинансирование кредитов для заемщиков
Все больше банков дополняют линейку своих ипотечных продуктов программами рефинансирования - погашения ипотечных кредитов, выданных другими банками, за счет получения нового кредита. Рефинансирование позволяет уменьшить ежемесячные платежи за счет снижения процентной ставки, а также скорректировать срок, сумму и валюту кредита.

Если на начало года рефинансирование предлагали только ВТБ 24 и Сбербанк, то сейчас можно такую программу можно найти еще и в Банке Сосьете Женераль Восток (БСЖВ), Газпромбанке, Газэнергопромбанке, банке "ЖилФинанс", Банке Москвы, банке "Московское ипотечное агентство" (МИА), Национальном резервном банке.

Ставки, по которым заемщикам других банков предлагается рефинансировать кредиты на приобретение жилья на вторичном рынке, начинаются от 13% годовых по кредитам в рублях (Сбербанк) и от 9,1% годовых по кредитам в долларах США (ВТБ 24). Некоторые банки, как ВТБ 24 и Сбербанк, устанавливают ставки по программе рефинансирования на том же уровне, что и для кредитов по аналогичным программам (на приобретение жилья на вторичном рынке, под залог имеющейся недвижимости). Однако можно встретить и банки, у которых процентные ставки при получении кредитов на рефинансирование несколько выше, чем по базовым ипотечным программам (Альфа-Банк, БСЖВ).

Ряд банков держит программы рефинансирования в своей ипотечной линейке с чисто декоративной целью. Например, Альфа-Банк предлагает рефинансировать кредиты на приобретение жилья на вторичном рынке. По новому кредиту, выданному в рублях, ставки составляют 17,5 - 19,5% годовых и 14 - 16% - в долларах США. У БСЖВ и Национального резервного банка ставки пониже, но все равно гораздо выше, чем у ВТБ 24, Сбербанка, Газпромбанка и банка "ЖилФинанс". В то же время рефинансирование кредитов под залог недвижимости в Газпромбанке тоже явно предлагается лишь для вида: в рублях - под 19% годовых, в долларах – под 14%.


Реализация заложенной недвижимости
Кризис заставил некоторые банки сформировать отдельную программу кредитования для реализации заложенного жилья. Получив согласие неплатежеспособных заемщиков на реализацию заложенного по ипотеке жилья, банки сформировали базы данных недвижимости, которую можно приобрести в кредит из под залога. Подобные предложения есть, например, у Абсолют Банка, банк «Жилфинанс», ВТБ 24, банков «ДельтаКредит» и «КИТ Финанс», Собинбанка, банка «Хоум Кредит». Единичные предложения можно видеть у АМТ-Банка (экс БТА-Банка), ДжиИ Мани Банка и Райффайзенбанка. Большой популярности эти программы не завоевали, поскольку жилье выставляется на продажу по докризисной стоимости, которая существенно выше сегодняшних расценок на квартиры и дома. Впрочем, негласно представители ипотечных банков признают, что относительно цены жилья уже можно торговаться. В то же время, покупатель заложенного по ипотечному кредиту жилья может неплохо сэкономить на риэлторских услугах. Приобретая заложенное по ипотеке жилье, не надо тратиться на комиссионные за его поиск, а также за проверку этого жилья на юридическую чистоту, поскольку банк озаботился этим, еще когда принимал решение о выдаче кредита на его приобретение.

Часть банков предлагают кредиты на заложенное жилье значительно дешевле, чем по любой другой программе. Банк «КИТ-Финанс» готов сбыть ипотечные залоги своих злостных должников по тем же ставкам, по которым они были предоставлены в 2007 - 2008 годах. У банка «ДельтаКредит» минимальная ставка по кредитам подобного рода в рублях равняется всего 10,5%, а в долларах США - 5,75% годовых.

У ВТБ 24 по кредитам в рублях процентная ставка устанавливается в соответствии с условиями кредитного договора текущего заемщика, осуществляющего продажу объекта, но не более ставки рефинансирования Центрального банка РФ на дату принятия банком решения (на данный момент – 8% годовых), в долларах и евро – не выше 10% годовых. При этом размер процентной ставки не зависит от срока кредитования и размера первоначального взноса. Чтобы стимулировать реализацию ипотечных залогов, ВТБ 24 минимизировал все расходы заемщика на получение и обслуживание кредитов, которые предоставляются для приобретения такого жилья: не взимается единоразовая комиссия за выдачу ипотечного кредита, досрочное погашение кредита без комиссий возможно с первого дня после выдачи без ограничений по срокам и сумме.

Другие банки менее щедры, например, Собинбанк предлагает приобрести у него в кредит заложенное жилье под 15,5% годовых в рублях и 13% в долларах. Совсем неконкурентоспособным выглядит предложение БЖФ: минимальная ставка по кредитам в рублях – 21% годовых, в долларах США – 16,75%.


Реструктуризация
Следствием кризиса в ипотеке стали специальные программы реструктуризации просроченной задолженности. В частности, их предлагают Альфа-Банк, ОТП Банк, Юниаструм Банк. Эти программы позволяют изменить график погашения кредита с тем, чтобы отсрочить или рассрочить выплату просроченного долга, а также прекратить начисление штрафных санкций за просрочку. Проблема просроченной задолженности, в основном, решается путем снижение кредитной нагрузки за счет удлинения срока кредита. Менее охотно банки соглашаются предоставить заемщику «кредитные каникулы» на срок от 3 до 6 месяцев, во время которых размер платежа значительно снижается. Наибольшую фантазию при разработке вариантов реструктуризации проявил Юниаструм Банк, у которого заемщик может перевести долг на другое лицо или привлечь дополнительных созаемщиков.

Однако большинство банков предпочитает обговаривать условия реструктуризации ипотеки с заемщиками в индивидуальном порядке. Зато некоторые кредиторы сочли перспективным способ решения проблемы просроченной задолженности по ипотеке путем предоставления стабилизационного кредита по примеру Агентства по реструктуризации ипотечных жилищных кредитов (АРИЖК). Такие программы разработали Абсолют Банк, Банк Москвы, ВТБ 24, ГПБ-ипотека, банк «КИТ Финанс», Сбербанк, Собинбанк. Кредит предоставляется в объеме, достаточном для совершения платежей по основному кредиту на срок до одного года.

источник

четверг, 3 марта 2011 г.

Квартирный вопрос: свое жилье или чужое?

Живет человек. Но живет не в вакууме, а среди людей. Имеет место проживания. И если этот человек молод, то, конечно же, проживает с родителями. Приходит момент, когда хочется отделиться и попробовать настоящего вкуса жизни вольной. Мысли такие приходят со временем каждому. Хорошим вариантом является наличие какой-никакой работы. Желательно, опять же, оплачиваемой. Потому как без собственных доходов и мечты о жизни вольной очень часто несбыточны. Ну, предположим, есть заработок. Как получить свое собственное жилье, чтобы вздохнуть свободно. Вариантов сегодня существует множество, как уверяет нас денно и нощно СМИ. К примеру, можно накопить нужную сумму складывая под матрас деньги или храня в банке, но это долго и вряд ли кто-то способен так долго копить Ну, или можно вступить в КПК (это который кредитно-потребительский кооператив), но лопаются они ежегодно по 3 штуки или в пересчете на обманутых дольщиков это по 2-3 тысячи человек – не вариант. Самый стандартный и привычный способ – это ипотечный кредит в банке. Мало риска, выгодные условия, ну и доверие – это все-таки солидное учреждение.
Давайте разбираться, сколько вся эта затея будет стоить реально. Допустим, что цены на квартиру (возьмем для начала однокомнатную) будут в пределах 1,5 миллионов рублей. Жители Москвы и Питера пусть  умножают на нужный коэффициент стоимость жилья, а заодно и зарплаты.
Выбор банка дело добровольное. Самым доступным и присутствующим почти в любом городе является Сбербанк. Тем более сегодняшняя кампания по возврату доверия и уважения через СМИ формирует положительный образ этого заведения среди россиян. Давайте взглянем на условия, на которых этот банк предоставляем ипотечные кредиты. Не забываем, что хочется жить отдельно сегодня, сейчас. Так что строящиеся квартиры не берутся в расчет.


Красным прямоугольником выделена процентная ставка, которая будет применяться для расчета платежей за ипотеку. В качестве исходных данных принимаем тот факт, что зарплатная карта Сбербанка есть не у всех, а правильнее сказать, лишь у единиц, так называемых бюджетных работников. А второе допущение, что максимум , что сможет набрать человек желающий взять ипотеку, будет стремиться к очень скромной сумме, то есть 15% от суммы ипотечного кредита (это если повезет, если все друзья, знакомые, родственники скинутся хоть по десять тысяч), что примерно равно 225 тысячам. Наш очень оптимистичный вариант понемногу начинает вырисовываться.

Брать кредит надолго это просто великолепно. Но вот просыпаться и каждое утро думать о том, что нависает груз долга перед кем-то это не самое приятное чувство. Значит, стараемся минимизировать срок бремени. Минимум как видно – 10 лет.

А теперь запускаем калькулятор и начинаем считать.

1500000 – 22500 = 1275000.

Это сумма, которую нужно взять по ипотечному кредиту. Теперь посчитаем общую сумму, которую человек должен выплатить за 10 лет в виде процентов за кредит.  Для этого считаем сколько будет 13,5 процентов от этой суммы и умножаем на количество лет.

1 275 000 х (13,5 / 100) х 10 = 172 125 х 10 = 1 721 250.

Итоговая стоимость квартиры:

1 721 250 + 1 500 000 = 3 221 250.

Довольно внушительная сумма. Получается, что взяв в кредит мы получаем квартиру по стоимости в 2 раза дороже, чем ее реальная стоимость.

Теперь посчитаем, а сколько будет нужно платить в месяц:
1)      Оплата суммы самого кредита (то, что мы занимаем у банка для покупки квартиры). Для этого делим всю сумму на 10 лет, за которые мы должны ее выплатить, а потом еще на 12 месяцев, ведь выплаты производятся раз в месяц.

1 500 000 / (10 * 12) = 12 500.

2)      Оплата суммы процентов за пользование кредитом. Схема такая же, как и в 1 пункте.

1 721 250 / (10 * 12) = 14 343,75.

Для того чтобы посчитать сколько реально придется платить в месяц сложим два получившихся числа:

12 500 + 14 343,75 = 26 843,75.

Солидная сумма выходит, однако. А чтобы реально выплачивать такие деньги в месяц ваша зарплата должны быть тысяч на 10 больше, как, впрочем, и ваших двух поручителей, а то и всех трех.

Если у вас зарплата меньше  40 тысяч, то вам явно не стоит дергаться и бегать по банкам.

Поэтому, самым простым решением в данном случае, является съемная квартира, далекая от центра города. Такое решение вопроса обойдется намного дешевле, всего в 6 – 8 тысяч. Согласитесь разница существенная. Но это только если вам нужно побыть одному и попробовать вкус настоящего независимого человека, без притязаний на собственность и со стойкой зависимостью от арендодателей.

Что не было учтено в расчетах, так это стоимость ежемесячных платежей за страхование жилья, таковы условия ипотечного кредитования, которые не всегда пишутся крупным шрифтом. И предполагалось, что ежемесячные платежи постоянны и равномерны.


среда, 2 марта 2011 г.

Подделываем сообщение клиента.


Продолжаем развивать и закреплять успех, который был достигнут. Что мы уже знаем? Знаем, как подсмотреть за общением сервера и клиента. Знаем, как выглядят сообщения и что конкретно отправляют друг другу сервер и клиент. Даже умеем отправлять какие-то сообщения и пытались принимать ответ от сервера.
Давайте теперь детально разберемся что и, самое главное, как будет отсылать и принимать от сервера. Для этого обратимся к исходному коду main.cpp, котрый является каркасом нашего собственного клиента. В этом коду уже все, что нам нужно есть.
Функция отправки сообщений по выбранному адресу и порту:

sendto(my_sock,(char*) адрес указателя на ваш массив ,strlen(адрес указателя на ваш массив),0, (sockaddr *) &srv_addr,sizeof(srv_addr));

Для этой функции нужно подготовить массив данных, которые будем отправлять.
Как нам уже известно, инициируется соединение клиентом. Он отсылает на сервер данные «EFEF EFEF». Но вот вопрос как эти данные хранить в нашей программе? И что это за буквы такие? Тут нам поможет значение «length», которое определяет количество байтов. Ага. Значит речь идет о байтах. И получается, что это 4 байта. Но у нас 8 символов непонятных. Не будем гадать на кофейной гуще, а лучше проясним ситуацию. Для представления данных в программах может использоваться несколько вариантов типов данных, один из них это шестнадцатеричное представление, в котором числа представляются в виде от 0 до F (соответствует числу 15). Это как раз наш случай, только записать нужно правильно: 0xEF. Соответственно получаем четыре числа - 0xEF 0xEF 0xEF 0xEF. Если же перевести из шестнадцатеричной системы исчисления в десятичную, то получится четыре числа 239.
Вопрос на засыпку, как связаны байты, символы, и числа? Если вы помните, то в компьютере информация хранится в виде битов, которые принимают значение 0 или 1. Эти самые биты принято хранить в виде наборов по 8 штук, а называют их байтами. 1 байт = 8 бит или 256 различных состояний. То есть этот набор битов разрешает хранить какие-то значения, в количестве 256 штук, ими могут быть, например, числа от 0 до 255. Во многих языках есть специальный тип данных byte. А в Си++ для этих целей используется тип char. Да-да, тот самый char, который предназначен для хранения символьных данных. Но мы-то знаем, что символьный тип хранится как число этого символа в кодовой таблице. В итоге получается, что наше первое настоящее сообщение, отсылаемое серверу, будет хранится в виде символьного массива, примерно так:

char hello1[] = { 239, 239, 239, 239 , 0}; //EFEFEFEF
или
char hello1[] = { 0xEF, 0xEF, 0xEF, 0xEF , 0};

После отправки сообщения выведем на консоль сообщение, что делаем и что посылаем:

printf("%s: %s\n", "Send to server ", &hello1[0]);

И будем придерживаться правила, что после отправки или приема сообщения будем выводить соответствующие уведомления на экран.
Ну и что же. Отправили сообщение серверу, в ответ он тоже что-то ответит нам? Хранить это нужно где-то?

char buff[2*1024+1]; // в этот массив будем принимать сообщения, приходящие от сервера

Все уже готово и есть в исходном коде (в самом начале). На всякий случай возьмем массив побольше, чтоб точно хватило. Однако и этого может не хватить, по ходу разработки будет видно.

Функция приема сообщений по выбранному адресу и порту:

int n=recvfrom(my_sock,&buff[0],sizeof(buff)-1,0, (sockaddr *) &server_addr, &server_addr_size);

После приема сообщения, его содержимое можно найти в массиве buff, а количество символов пришедших от сервера будет лежать в переменной n.
Чтобы правильно формировать массив нужно в конец добавлять символ нуля, иначе при работе с массивом как со строкой могут случится казусы. Значит добавляем в конец массива, что полагается:

buff[n]=0;

Попробуем вывести то, что прислал нам сервер.

printf("%s: %s\n", "Coming from server ", &buff[0]);

Исходный код:  main.cpp
 
Великолепно, все получилось. Даже не нужно обращаться к Network Protocol Analyzer. Пример того, что должно появиться на экране консольного приложения приведен в самом начале статьи.