Задать вопрос
  • Почему протокол UDP считается привитым от DDOS-атак?

    @res2001
    Developer, ex-admin
    Кто вам сказал, что больше 0xFFFF TCP соединений нельзя принять? Видимо вы сделали этот не правильный вывод исходя из того, что номер порта - двухбайтовое целое? Но в случае принимающей стороны будет использоваться один и тот же порт (который открыт для прослушивания) для всех принятых соединений.
    ко мне делают запросы каждый комп. с интернетом во всем мире одновременно

    Хочу напомнить, что, например, Ethernet - последовательный канал. В один момент времени по нему может передаваться только один пакет данных, все остальные либо встанут в очередь где-то на промежуточном маршрутизаторе, либо будут отброшены, когда очередь переполнится. То же самое касается и оптических линий и прочего. Так что из всего мира только первый счастливчик прорвется, остальные будут курить в сторонке пока ваш комп принимает первый пакет.

    Сам по себе UDP, как писали предыдущие отвечающие, не предполагает подтверждения получения пакета, поэтому он и работает быстрее - меньше накладных расходов. Видимо из-за этого и кем-то считается, что он не подвержен DDoS. Но! Многие приложения, работающие через UDP строят поверх UDP свой собственный протокол, который может гарантировать доставку даже поверх UDP. Например OpenVPN. В этом случае DDoS вполне сработает.
    Вообще DDoS атака направлена на то, что принимающий сервис не сможет обработать корректный запрос. Это может произойти по нескольким причинам:
    1. принимающий сервис умер из-за большого количества запросов или настолько загружен, что начал пропускать запросы.
    2. канал связи забит левым трафиком и нормальные запросы не могут прорваться. При этом сам сервис может чувствовать себя прекрасно - трафик в канале может быть произвольный, не обязательно направленный именно на этот сервис.
    Оба варианта - успех DDoS атаки. При этом второму варианту пофигу какой протокол использует сервис и есть ли у него гарантия доставки. Важно то, что сервис не получит корректного трафика, что то же будет успехом DDoS.
    Ответ написан
  • C - как сделать замену подстроки в строке (руками)?

    @res2001
    Developer, ex-admin
    1. Не правильно вычисляете размер будущей строки в первом случае. В первом случае результирующая строка будет меньше оригинальной, у вас же получается больше.
    2. Не выделяете место под завершающий нулевой символ. Вообще завершающий ноль вы полностью игнорируете. Без него у вас в итоге получится не строка, а массив символов. Раз уж вы делаете все в ручную, то и завершающий ноль надо проставлять руками.
    3. Согласен с Wataru на счет startsof и трех циклов.
    4. Я бы сначала искал вхождение строки замены и только если оно найдено производил бы необходимые действия, в т.ч. и выделение памяти под новую строку. У вас же сейчас предполагается, что подстрока замены всегда найдется, что в общем случае не верно.
    5. Что будете возвращать, если замены не будет? Будете просто выделять память под новую строку и возвращать новую строку аналогичную оригинальной? Или будете возвращать указатель оригинальной строки? Но тогда будет мешать квалификатор const для str1. А кроме того, если возвращать указатель на оригинальную строку, то что должен делать вызывающий код со старой строкой? Т.е. если замена была, то вы возвращаете новую строку и в вызывающем коде старую строку можно удалить. А если строка не найдена, то старую строку удалить нельзя, т.к. вы вернули указатель на нее же. В общем надо еще продумать как возвращать результат. Я бы на самом деле возвращал признак была замена или нет (или количество замен), а результирующий указатель надо возвращать в дополнительном параметре. Если замен нет, то либо указатель не возвращается, либо возвращается указатель на str1.
    6. в качестве оптимизации:
    for (int i = 0; i < strlength(str1); i++)
    Вызываете на каждой итерации strlength.
    Ответ написан
    1 комментарий
  • Разбиение локалки на подсети?

    @res2001
    Developer, ex-admin
    Петр, В целом вы правы, это работает так как вы описали. Добавлю, что маска не обязана содержать только 0 и 255 - в ней могут быть любые числа, где в двоичном представлении старшие биты заполнены единицами, а младшие нулями (0 и 255 - частные случаи - все нули и все единицы), чем меньше единиц в маске - тем шире диапазон, каждая дополнительная единица в маске уменьшает доступный диапазон адресов в 2 раза.

    Но Если у вас в реальности 10 (20, 30, <200) компов, то нет смысла увеличивать маску. Проще при той же маске, отдать какой-то диапазон адресов роутерам, другой диапазон серверам, третий - пользовательским компам. Все диапазоны - чисто формальные у вас в голове для простоты эксплуатации - сеть все равно остается одной с единым широковещательным доменом.

    Если у вас есть и другие цели, например вы хотите как-то ограничивать доступ или оптимизировать трафик к серверам, сетевым принтерам, группам пользователей друг к другу и т.п., то имеет смысл эти группы устройств помещать в отдельный VLAN и внутри VLAN использовать свою IP подсеть, доступ к серверам ограничивать фаерволом на границе подсети. В этом случае нужно будет еще подумать над тем, какое устройство будет маршрутизировать и фильтровать трафик между подсетями.
    Ответ написан
    Комментировать
  • Как создать bat file с вызовом окна вопроса, восклицания, ошибки и подкюченеим \отключением устройств?

    @res2001
    Developer, ex-admin
    Для вывода окна с сообщением раньше была команда msg. Но сейчас я ее не обнаружил у себя в Вин10. Возможно ее нет в домашней версии, а в Pro есть.

    Про отключение устройств - у микрософт есть утилита командной строки devcon. Но она не входит в комплект по умолчанию, она есть в составе какого-то SDK у микрософт, гуглите. Эта утилита не показывает окон - все свои действия она выполняет в командной строке, все действия, которые она должна совершить задаются параметрами утилиты.

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

    Итог: ваши хотелки на bat/cmd штатными средствами не реализовать.
    Либо вы используете сторонние утилиты, либо используете другой инструмент - думаю, в том же powershell это все можно сделать. Так же в винде из коробки доступны VBScript и JScript их то же можно копнуть.
    Ответ написан
    Комментировать
  • Как соеденить две линии интернета?

    @res2001
    Developer, ex-admin
    Проще всего использовать роутер, который умеет использовать одновременно 2 внешних линии. Чаще всего в простых роутерах с поддержкой резервирования канала одна линий рабочая, вторая резервная, т.е. не используется. Вам же нужно использовать одновременно обе линии, так что роутер нужен соответствующий. Конкретную модель не подскажу.

    Подобный маршрутизатор можно собрать и самому, если очень хочется. Собирал такое в свое время на FreeBSD с использованием принципов policy based routing в тамошнем фаерволе ipfw и множественных таблиц маршрутизации. По моему, аналогичную штуку можно реализовать и на Linux, но тут я не в курсе. Дело это не легкое, требует серьезного погружения в тему и знаний работы IP протокола, принципов маршрутизации, используемого фаервола.
    Видимо нечто подобное реализовано по ссылке в ответе ValdikSS
    На винде сделать это из коробки нельзя. Возможно есть какое-то стороннее ПО для этого.
    Ответ написан
    Комментировать
  • Почему программа требует константу?

    @res2001
    Developer, ex-admin
    Наверное стоит обратится к учебнику по Си почему именно так.
    Изначально автоматические массивы в Си имели фиксированный размер, т.е. размер надо задавать константой.
    Отличие константы от обычной переменной - компилятор в процессе компиляции знает значение константы, а значение переменной нет. В процессе компиляции компилятор может сгенерировать команды для выделения памяти под массив.

    Начиная с С99 (это такой стандарт Си от 1999 года) появились VLA (Variable Length Array). Синтаксис такой же как и у обычных массивов, но они могут иметь изменяемый размер, т.е. размер можно задавать обычной переменной.
    Использование VLA влечет дополнительные расходы времени выполнения, поэтому многие принципиально не используют эту возможность (например ядро Linux). И это вполне оправданно еще и потому, что память под VLA массивы выделяется на стеке, пространство стека ограничено, а вы с дуру можете там выделить слишком большой массив, что вызовет переполнение стека.

    Большинство компиляторов поддерживают VLA, но судя по ошибке, вы используете микрософтовский компилятор. Микрософт никогда не славилась поддержкой стандартов Си. VLA в ее компилятор не завезли до сих пор.
    Ответ написан
    Комментировать
  • Запуск OpenVPN клиента и сервера на одной машине. Как?

    @res2001
    Developer, ex-admin
    Проблема, видимо, в том, что при подключении ВПН клиента шлюзом по умолчанию становится ВПН-сервер, к которому подключается ВПН клиент. Нужно убрать это поведение (опция push "redirect-gateway def1" в конфиге ВПН сервера 10.36.0.1).
    В целом, не вижу проблем, что бы клиент и сервер работали параллельно на одном компе, если они оба не будут трогать настройки шлюза по умолчанию. Скорее всего для правильной маршрутизации трафика придется добавлять статические маршруты или прописывать правила фаервола, перенаправляющие определенный трафик в нужный интерфейс.
    Ответ написан
  • Как добавить lib файл в g++?

    @res2001
    Developer, ex-admin
    Файлы *.lib - это для микрософтовского компилятора.
    gcc нужны либо *.dll (для динамических библиотек), либо *.a (для статических).
    Ответ написан
    1 комментарий
  • Какой подход использовать в многопоточном программировании на Си?

    @res2001
    Developer, ex-admin
    Макросы это просто один из инструментов, который предоставляет язык. Использовать его или не использовать ваше дело, многопоточность тут не при делах.
    Один и тот же код может моментально стать не потокобезопасным, как только появляются не защищенные разделяемые между потоками данные, которые использует код. При этом сам код может не поменяться, просто вы решили добавить поток и использовать в нем те же данные. Данные сразу же становятся разделяемыми и нужно их использование защищать везде, где они раньше использовались "беззащитными", будь то обычный код или код в макросах.
    Ответ написан
    Комментировать
  • Нет интернета хотя подключен к wifi ;(?

    @res2001
    Developer, ex-admin
    Linux_nub, Можете протестировать вашу сеть WiFi с помощью другого устройства. Если другие устройства подключаются и работают с вашим WiFi нормально, в т.ч. и с вашего раб.места и при изменении места расположения устройства (удаление/приближение к WiFi роутеру), то скорее всего проблема все таки в WiFi адаптере.

    Может ли проблема быть не в адаптере??

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

    Через какую кнопку?

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

    Кроме помех, может быть повреждена антенна WiFi адаптера (это равносильно не исправности WiFi адаптера), что может приводить к низкому уровню сигнала (или его отсутствию) даже без помех при удалении от роутера. В этом случае вариант с тестированием поможет выявить подобную проблему. Не забудьте протестировать на разных дистанциях от точки доступа (WiFi роутера). При отсутствии сильных помех в помещении WiFi нормально работает в радиусе 15-25 м. Может и дальше, но там уже сильно зависит от конкретных условий (стены, помехи и т.п.).
    Ответ написан
    Комментировать
  • Как изменить атрибуты в объекте C++ через ввод?

    @res2001
    Developer, ex-admin
    Ошибка, очевидно, тут: cin >> mark;
    У вас mark - это указатель (а не строка). При этом указатель никуда не указывает (не инициализирован). Следовательно память под чтение не выделена. Куда по вашему должна попадать прочитанная информация?
    Напомню, что указатель это целое беззнаковое число (размером в 4 или 8 байт в зависимости от платформы, могут быть и другие варианты, но это больше экзотика), которое интерпертируется как адрес в памяти. Если в указателе мусор (как сейчас), то запись по этому указателю вызовет SEGFAULT при выполнении программы, вам повезло - компилятор сам заметил эту ошибку, с SEGFAULTом разбираться обычно труднее.

    Но и это еще не все.
    В следующей строке вы создаете временный объект Car с помощью вызова конструктора, после выхода из Input этот объект сразу уничтожается.

    Вам нужно:
    1. выделить память под marka. Лучше всего использовать не char*, а std::string, тогда память будет выделяться автоматически.
    2. читать ввод не в mark, а в marka. То же самое и для других двух переменных класса.
    Ответ написан
    1 комментарий
  • Как ускорить работу скрипта?

    @res2001
    Developer, ex-admin
    Один из файлов (меньший) сразу читайте весь (блоками, об этом ниже) и каждую строку помещайте в std::unordered_set<std::string>.
    Второй файл - построчно проверяете находится ли строка в set.

    Читать файлы лучше не строками, а большими блоками (4Кб или больше). Наибольшее время занимают именно операции чтения файла. Читая файл большими блоками вы сокращаете количество операций чтения. Дальше работаете с блоком - вручную делите его на строки и т.д. Не забываете, что блок не обязан заканчиваться и начинаться ровно в конце или начале строки.

    Если еще более оптимизировать, то std::unordered_set<std::string> лучше заменить на std::unordered_set<const char*> или std::unordered_set<std::string_view>.
    Смысл в том, что std::string под каждую строку будет выделять динамическую память - выделение памяти само по себе медленная операции (конечно быстрее, чем чтение файла, но тем не менее), а тут вы сначала прочитаете кусок файла в большой блок который будет выделен в динамической памяти, а затем под каждую строку из этого блока будете еще раз выделять память. Поэтому лучше при чтении большими блоками первого файла выделять блок динамически и сразу прям внутри блока делить его на строки (т.е. добавлять символ '\0' в конце каждой строки) и указатель на начало каждой строки добавлять в set (или делать из него std::string_view и уже его добавлять в set).
    Естественно выделенные блоки первого файла вам придется учитывать вручную (например хранить указатели на блоки в векторе) и после освобождения setа освобождать каждый блок (а не каждую строку).
    Для второго файла будет достаточно одного блока.
    Ответ написан
    Комментировать
  • Как подключить к wireguard более 255 клиентов?

    @res2001
    Developer, ex-admin
    Маска не обязана быть кратной 8. Она может быть любым числом от 0 (все IP адреса, такую маску наверное нельзя назначить), до 32 (1 адрес). Уменьшая маску на 1, вы увеличиваете емкость адресного пространства в 2 раза.
    Например для сети 10.0.0.0/23 адресное пространство будет 10.0.0.0 - 10.0.1.255 и это адресное пространство будет в одной подсети.
    Ответ написан
    3 комментария
  • Есть ли способ организовать двойное подключение к хосту: напрямую через интернет и через впн?

    @res2001
    Developer, ex-admin
    Следует отказаться от FTP. Используйте, например, протокол SCP - защищенное подключение по ssh, GUI клиенты.

    Но и VPN можно допилить. Скорее всего у вас сейчас при подключении к ВПН весь трафик направляется в ВПН (ВПН сервер становится шлюзом по умолчанию), от этого и проблемы. Это можно исправить настройками ВПН. Но этого будет не достаточно, вам нужно поднять NAT на ВПН сервере на внешнем интерфейсе для не ВПН трафика, который затем должен быть направлен в ВПН (и наоборот). Как правило NAT на ВПН сервере не обязателен, но это не ваш случай.
    Ответ написан
    Комментировать
  • Указываются ли комментарии в листинге кода?

    @res2001
    Developer, ex-admin
    В исходники смотрят люди, которые могут понять код. Соответственно комментарии в коде пишутся для них, т.е. для программистов. А раз человек может прочитать код, то проще всего написать код так, что бы он был достаточно прост для понимания читающего. Тут включаются стандартные правила об именовании переменных, стилю написания кода, KISS и т.д. и т.п.
    В реальности комментарии необходимы только для не тривиальных, трудных для понимания частей кода, где используется какой-то хитрый алгоритм или не очевидный хак.
    Если вы будете использовать систему авто-генерации документации, то тут уже придется писать комментарии к каждой сущности в коде по правилам этой системы и программист заодно становится и тех.писателем.
    Ответ написан
    Комментировать
  • Как маршрутизировать траффик через промежуточный локальный интерфейс?

    @res2001
    Developer, ex-admin
    Вам нужно на роутере добавить маршрут до сети 192.168.5.0/24 через IP eth0.
    На самом компе добавлять маршрут не нужно, т.к. он имеет IP адреса во всех задействованных сетях, то маршруты уже есть.
    Пингами с роутера проверяете доступность IP eth1.
    Т.к. eth2 работает мимо ОС, то схема должна работать.
    Естественно на компе надо включить маршрутизацию пакетов и настроить/выключить фаервол.
    Сниффером слушаете eth1.

    Более "чистая" и точно рабочая схема была бы, если использовать второй ПК: eth2<=>второй ПК<=>router
    На втором ПК можно настраивать сниффер и видеть весь трафик.
    Ответ написан
    1 комментарий
  • Какой ВПН установить на сервер, без установки конфигураций?

    @res2001
    Developer, ex-admin
    Все ВПН клиенты требуют той или иной конфигурации. Т.к. вы работаете с линуксом, то конфигурация находится в файлах. Была бы винда, был бы еще вариант конфигурации в реестре. Но в любом случае конфигурация будет.
    Приведенная вами команда генерирует конфиг сама, а то и не один, не проверял. Ссылки на дополнительные скрипты, указанные в вашем скрипте сейчас не доступны. И это не РКН их блочит. Ссылки ведут на github, но github изменил стиль ссылок на raw файлы. В скрипте используются старые ссылки, которые сейчас не работают. Можете поправить ссылки вручную в скрипте при желании.
    Этот скрипт мало того, что конфигурирует ВПН, он еще и устанавливает необходимые пакеты. Т.е. нормально так вмешивается в систему.
    Родной github репозиторий вашего скрипта тут: https://github.com/hwdsl2/setup-ipsec-vpn
    Там же лежат и другие скрипты, которые выкачиваются первым скриптом.
    Ответ написан
    Комментировать
  • Как оценивается идентификатор функции без оператора вызова?

    @res2001
    Developer, ex-admin
    Как указатель на функцию.
    При повышенном уровне сообщений компилятора скорее всего будет какое-то предупреждение. С точки зрения языка ошибки нет, но фактически действие бесполезное, поэтому и предупреждение.
    Ответ написан
  • Как создать изолированную учетную запись в Windows 10?

    @res2001
    Developer, ex-admin
    "Нормальные" современные программы сохраняют свои документы, настройки или временные файлы в профиль пользователя, из-под которого они были запущены, в каталоги типа Documents, %Temp%, %AppData% и ветки реестра в разделе HKCU.
    Это не влияет на подобные сохранения других пользователей этой программы на этом компьютере.
    Конечно могут быть и исключения. Например, некоторые настройки каких-то программ могут быть сделаны только на уровне системы, в таких случаях подобная настройка повлияет на всех пользователей. Или криво написанная программа может сохранять свои настройки и временные файлы куда-то в каталог/раздел реестра, который будет общим для всех пользователей.

    Новый пользователь всегда создается с чистым профилем (точнее с профилем "по умолчанию", который то же можно менять), но ему доступны все программы установленные ранее администратором (см.ответ Hemul GM ).
    Если не хотите, что бы пользователи влияли друг на друга, используйте для сохранения программ каталоги профиля пользователя и отберите администраторские права у всех пользователей, кроме одного.
    Ответ написан
    Комментировать
  • Как создать ссылку от имени другого пользователя в Linux?

    @res2001
    Developer, ex-admin
    В скрипте после создания ссылки измените ее владельца с помощью chown.
    Ответ написан
    4 комментария