• Как проверить ping до игрового сервера?

    @res2001
    Developer, ex-admin
    Пинг - это команда:
    ping <IP адрес сервера>
    ping использует протокол ICMP для запросов и ответов. ICMP может быть заблокирован фаерволом на хостах в интернете, так что успешное прохождение не гарантируется.
    Ответ написан
  • Какая книга по c++ на данный момент актуальна, годна?

    @res2001
    Developer, ex-admin
    Если учить с нуля, то сгодится любая толстая книга по языку более-менее современного издания. Смотрите, что бы в ней был учтен хотя бы стандарт С++11 или С++14. Не пытайтесь найти учебник с самым последним стандартом - их нет. Например, Прата или Лафоре последних изданий сгодятся вполне. Тот же Лоспинозо, судя по содержанию, наверное то же подойдет.
    Дальше уже надо будет углубляться в зависимости от сферы деятельности и интересов.
    Углубленно именно по языку в разных направлениях на русском могу порекомендовать:
    1. Майерс "Эффективный и современный С++. 42 рекомендации ..." - толково о нововведениях в С++11/14.
    2. Уильямс "C++. Практика многопоточного программирования"
    3. Гантерот "Оптимизация программ на C++" - рассказывает про устройство STL, что и в каких случаях лучше применять с замерами производительности и т.п.
    Все 3 книги не для новичков, требуют уже нормального понимания базовых принципов и некоторой практики.
    Ответ написан
    Комментировать
  • Как заменить символ во всех файлах?

    @res2001
    Developer, ex-admin
    Для обхода файлов по маске используете цикл for. Из переменной цикла с помощью модификаторов получаете имя файла. С помощью операции замены подстроки в команде set делаете замену в имени файла. С помощью ren задаете файлу новое имя.
    Для справки:
    for /?
    set /?
    ren /?
    setlocal /?

    Модификаторы для переменной цикла описаны в справке по for.
    В теле цикла вам придется изменять переменные и тут же использовать новые значения. По умолчанию в батниках это не работает. Чтоб работало надо в самом начале дать команду
    setlocal ENABLEDELAYEDEXPANSION
    Затем для обращение к переменной в нутри цикла использовать восклицательные знаки, а не знаки процента, например так: !var!. Это приведет к отложенной подстановке переменных в команду. Переменная цикла всегда работает с процентами %%i
    Ответ написан
    Комментировать
  • Как закрепить ярлык на панели задач через gpo?

    @res2001
    Developer, ex-admin
    Ответ написан
    Комментировать
  • Где найти полное руководство пользователя по Линуксу?

    @res2001
    Developer, ex-admin
    Дистрибутив Linux - это такой конструктор из нескольких достаточно глобальных вещей, которые могут меняться от дистрибутива к дистрибутиву, но их не так много и количество комбинаций не то что бы сильно велико. Но т.к. это конструктор, то общей "всебъемлющей" документации нет (кроме страниц ман, по понятным причинам) - в этот конструктор входит ПО, которое делают разные люди, часто никак не связанные с теми кто выпускает конкретный дистрибутив.
    То что объединяет все дистрибутивы - это ядро линукс и набор "стандартных" утилит. По утилитам подойдут любые книжки по администрированию линукс. Про ядро то же можно что-нибудь найти, если вы программист.

    То что отличает дистрибутивы один от другого:
    1. пакетный менеджер: отвечает за установку и обновление софта, а так же за обновление всей ОС
    2. системный менеджер: чаще всего сейчас это systemd, но есть и альтернативы, он отвечает за старт ОС, за запуск служб и т.п.
    3. GUI - графических оболочек довольно много, хотя часто ноги растут из гнома или кед, каждый дистрибутив пытается добавить что-то свое отличительно в GUI оболочку, чтоб его можно было узнавать на фоне других. Но именно этот аспект ОС по большому счету не сильно важен - управлять ОС, в т.ч. и GUI можно из командной строки. Сейчас в GUI уже есть довольно много инструментов для управления ОС, но далеко не все.

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

    Так что изучать нужно конкретный пакетный менеджер, конкретный системный менеджер, конкретную графическую оболочку, которые используются в конкретном дистрибутиве по документации на их сайтах. А так же стандартный набор утилит и стандартные правила работы Linux, которые едины для всех дистрибутивов и по ним есть книги.
    Ответ написан
    Комментировать
  • Две сессии на win 10, возможно?

    @res2001
    Developer, ex-admin
    RDPWrapper позволяет такое делать, ищите на гитхабе. Но это нарушение лицензии.
    Ответ написан
  • Почему протокол 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 на ВПН сервере не обязателен, но это не ваш случай.
    Ответ написан
    Комментировать