• Анонимизация всего траффика через VPN + TOR/I2P. Собираем миддлбокс с нуля

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



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

      Когда я говорю «TOR», я подразумеваю «TOR и I2P». По схожей методике сюда можно подключить любой даркнет.

      Статья — «чисто конкретная». Теория уже неплохо изложена в статье Pandoshabrahabr.ru/post/204266. В данном тексте будет дана детальная инструкция «как сделать, чтобы работало».

      Постановка задачи


      1. Мой компьютер должен по нажатию одной кнопки переходить в режим «весь трафик — не русский».

      2. По нажатию второй кнопки он должен переходить в режим «весь траффик идет через TOR»

      3. Третья кнопка — для I2P.

      4. Входная TOR-нода должна находиться за рубежом.

      5. Все это должно работать под linux, windows, android. Заранее: с OS X и iPhone тоже все в порядке, просто у меня их нету, так что протестить не смогу.
      Далее
    • Вложенные функции на C++

        Приветствую сообщество!

        Я наткнулся на возможность сделать в С++ что-то похожее на объявление функций внутри функций. Выглядит это вот так:

        #include <iostream>
        int main()
        {
            inline_function(std::string s)
            {
                std::cout << "Hello, " << s << "!\n";
            }
            with_name(make_hello);
        
            make_hello("Vasiliy Pupkin!");
            return 0;
        }
        


        В приведенном примере внутри метода main изготавливается вложенный «метод» с названием make_hello и затем вызывается с параметром «Vasiliy Pupkin». Разумеется, на экран будет выведено Hello, Vasiliy Pupkin!.

        К сожалению, перетащить название вверх у меня не получилось.

        Как это сделано
      • Обработка Segmentation Fault в C++

        Вводная


        C++ является «небезопасным» («unmanaged») языком, поэтому программы могут «вылетать» — аварийно завершать работу без сохранения данных пользователя, сообщения об ошибке и т.п. — стоит только, например, залезть в не инициализированную память. Например:
        void fall()
        {
          char * s = "short_text";
          sprintf(s,"This is very long text");
        }
        

        или
        void fall()
        {
          int * pointer = NULL;
          *pointer = 13;
        }
        


        Всем было бы лучше, если бы мы могли «отловить» падение программы — точно так же, как в java ловим исключения — и выполнить хоть что-то перед тем, как программа упадет (сохранить документ пользователя, вывести диалог с сообщением об ошибке и т.п.)

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

        Читать дальше →