• Как откинуть 5 число с массива?

    @res2001
    Developer, ex-admin
    Просто так взять и удалить элемент из массива на Си нельзя.
    Из статического массива удалить нельзя ничего в принципе - его размер не меняется никогда.
    В динамических массивах могут быть варианты:
    Вы можете переписать хвост массива, начиная с шестого элемента, на один элемент вперед, т.е. 6 элемент станет 5 и т.д. Но при этом в конце образуется не используемый элемент, избавится от него можно перевыделением массива с помощью realloc, например. Но если это делать, то проще сразу выделить память под новый массив и скопировать весь первый массив, кроме удаляемого элемента, как писал GavriKos.
    Другой вариант - помечать подобные не используемые элементы каким-то образом. Либо писать в них какое-то значение, обозначающее для вас, что это не используемый элемент, либо хранить где-то отдельно используемый размер массива (так сделано в std::vector).
    Ответ написан
    Комментировать
  • Маскировка виртуальной сетевой карты под железную?

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

    @res2001
    Developer, ex-admin
    Код то где?

    На сколько я знаю, микрософтовский компилятор официально не поддерживает стандартов Си. Так что на самом деле, собирая Сишный код на msvc вы используете некий "микрософт Си" диалект языка.
    Так что не удивляйтесь подобным вещам.
    Некоторые фичи из более современных стандартов Си (С99, С11) в компилятор микрософт до сих пор не завезли или завезли, но в каком-то видоизмененном виде.
    Ответ написан
    Комментировать
  • Как сравнить две даты в dat?

    @res2001
    Developer, ex-admin
    Батники не умеют работать с датами. Тут все переменные строковые.
    Да, set /a умеет целочисленную арифметику, но результат все равно строковый.
    Нужно перевести даты в количество дней с начала эпохи, а потом их уже можно сравнивать стандартными средствами.
    Проще всего использовать для этих целей более продвинутые средства, умеющие работать с датами, например powershel, JS, VBS - эти скрипты при желании можно вызывать из батника.
    Но если очень хочется, можно и батником пересчитать. Алгоритм расчета есть на вики. Код можно дернуть отсюда - https://www.robvanderwoude.com/files/datediff_nt.txt
    Ответ написан
    Комментировать
  • Как правильно ввести данные?

    @res2001
    Developer, ex-admin
    Как вы планируете пользователь должен завершать работу удаленного компа?

    Например, есть команда shutdown - она требует привилегий администратора на том компе, который она будет удаленно перезагружать/останавливать.
    Ее же можно выполнить, находясь в сеансе RDP. Для обычного пользователя в RDP нет возможности выключить комп.

    Самый простой вариант без использования домена - создать на всех компах одного и того же пользователя с админскими правами и одним и тем же паролем. Тогда выключать компы удаленно можно выполнив у себя команду shutdown из под этого пользователя и указав в параметрах удаленный комп.
    Ответ написан
    Комментировать
  • Как вывести результат команды cmd в переменную?

    @res2001
    Developer, ex-admin
    Вот так должно работать:
    for  /f "delims=" %i IN ('net user %username% ^| findstr /C:"Действие пароля завершается" ') DO set var=%i
    Ответ написан
  • Как ввести результат поиска cmd в переменную?

    @res2001
    Developer, ex-admin
    Правильная команда: dir /s steam.exe
    Примерно так будет:
    for "tokens=* delims=" %%a in ('dir /s  steam.exe') do (
      move "%%~a" "путь куда перемещаем файл"
    )
    Ответ написан
    2 комментария
  • Зачем Visual Studio нужен свой runtime?

    @res2001
    Developer, ex-admin
    std::string - это то же часть микрософтовского рантайма (стандартной библиотеки), если вы собираете проект в MSVS.
    Нет никаких стандартных реализаций компилятора и libstd++, есть стандарт, где описано какой должна быть реализация. А реализаций много.
    Ответ написан
  • Роутер через время сбрасывается до заводских настроек. Как исправить?

    @res2001
    Developer, ex-admin
    Может быть нельзя прошить версию 1 сразу на 3, нужно через промежуточную 2.
    Попробуйте найти версию 2 прошивки и прошить сначала ею, а потом 2 проапгрейдить на 3.
    Еще можно поискать подходящую неофициальную прошивку, может быть такие есть для вашего роутера.
    Ответ написан
    Комментировать
  • Как сделать доступным сервис из lan и из wan по имени?

    @res2001
    Developer, ex-admin
    Добавьте на внутренний ДНС запись о сервере.
    Адреса сервера для внешнего и внутреннего ДНСа могут быть разные.
    Ответ написан
    Комментировать
  • Нет доступа к внутренней подсети как настроить машрут?

    @res2001
    Developer, ex-admin
    Встречные вопросы:
    1. На сколько понял ВПН поднимается и, например, пинги идут с ВПН IP сервера на ВПН IP клиента и наоборот?
    2. Значит проблема в доступе из сети клиента в сеть сервера и наоборот?
    3. Т.к. ВПН сервер и клиент подняты на роутерах, то предполагаю, что эти же роутеры являются шлюзами по умолчанию для компов в своих сетях?

    Если на все вопросы ответ - Да.
    То проблема в блокировке трафика фаерволами. Блокировка может происходить как на роутерах так и на конечных узлах локальными фаерами.
    Проблемы с маршрутизацией быть не должно, т.к. роутеры - шлюзы по умолчанию в своих сетях.
    Выберите по компу в обеих сетях, убедитесь, что на этих тестовых компах роутеры являются шлюзами по умолчанию, отключите на них локальные фаерволы и тестируйте. Предварительно убедитесь, что на роутерах фаервол не блокирует ВПН трафик. Так же было бы полезно во время теста смотреть на роутерах вывод tcpdump по ВПН интерфейсу.
    Ответ написан
  • Как запускать exe автоматически при попадании на ПК?

    @res2001
    Developer, ex-admin
    В такой постановке вопроса ответ - никак.

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

    Так же можно запустить приложение удаленно, таких вариантов довольно много. Из встроенных средств можно использовать: wmic или powershell. Тот же psexec (о котором писал pavelsha ) и т.п. Но программа должна быть доступна на удаленном компьютере, по указываемому пути. Т.е. вы должны сначала скопировать программу на удаленный комп, а потом уже удаленно ее запускать. Как вариант - указывать сетевой путь, доступный удаленному компьютеру. Но нужно не забывать, что в случае сетевого пути, потребуется авторизация на сетевом ресурсе ... Проще скопировать локально.

    Кстати, редактировать реестр можно и удаленно. Для этого есть средства из коробки. Например команда reg add - умеет это делать. Но и тут есть своя специфика.
    Ответ написан
    Комментировать
  • Почему на линукс не работает библиотека conio.h?

    @res2001
    Developer, ex-admin
    conio.h - это чисто виндовый заголовочный файл, в линукс его нет и к стандартной библиотеке С/С++ он отношения не имеет.
    Для вашего примера он не нужен - просто уберите строку и откомпилируйте.
    Ответ написан
    Комментировать
  • Как организовать перезапуск сервиса при падении?

    @res2001
    Developer, ex-admin
    По идее если сервис падает, то он освобождает порт.

    Это только по вашей идее.
    На самом деле порт может быть еще какое-то время занят пока не придет пакет с установленным флагом FIN или не закончится тайм-аут ожидания такого пакета. Так работает протокол TCP.
    Обычно, что бы избежать ожидания закрытия порта, порт открывают с указанием флага SO_REUSEADDR.
    Возможно программа падает потому, что происходит обрыв соединения. Возможно у вас не корректно обрабатывается эта ситуация (если вообще обрабатывается).
    На счет рестарта - возможно стоит оформить ваш сервис как виндовую службу, тогда за рестарт будет отвечать виндовый Service Manager. И не понадобится костыль в виде батника.
    Ответ написан
    Комментировать
  • Как преодолевается потеря мотивации в ИТ?

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

    @res2001
    Developer, ex-admin
    Если на диске важные данные, то я бы сделал образ диска, а потом бы производил потенциально деструктивные операции.

    В первом случае можно ввести в ответ No, тогда он что-то попробует сделать.
    Можно попытаться восстановить раздел с загрузочного носителя, используя софт для восстановления разделов.
    Для начала стоит провести тест диска, т.к. суперблоки и таблицы разделов обычно просто так не сбоят. Вероятно диск начал сыпаться.
    Ответ написан
    3 комментария
  • Общие вопросы по работе Интернета и сетей?

    @res2001
    Developer, ex-admin
    1. Вещи это разные, но взаимосвязанные. Домен сайта - это просто запись в DNSе и веб сервер настроенный на это имя. Домен AD - это целый комплекс решений, в которые в т.ч. входит и DNS и может быть веб сервер.
    Но сайты обычно используются внешними по отношению к организации пользователями, а домен предприятия - внутренними. Поэтому лучше их разделять и вообще делать так, чтоб инфраструктура обслуживающая обе сущности не пересекалась друг с другом. Делать это полезно в т.ч. и с точки зрения безопасности сети. При этом имя внутреннего и внешнего домена вполне может быть одно и то же, но это не обязательно.
    2. Маска нужна для того, что бы tcp/ip мог понять отправляется ли пакет в другую сеть, не доступную на прямую, или же он уходит соседу по своей сети. Если пакет отправляется в другую сеть, то включается маршрутизация, обычно это заключается в том, что реально пакет уходит на шлюз по умолчанию, а там уже разруливается по нужным направлениям. Делается это так:
    if ((remoteIP & mask) != (selfIP & mask)) {
      пакет предназначен для другой сети, идем на маршрутизацию
    } else {
      пакет для своей сети - можно отправлять сразу
    }

    Где:
    remoteIP - IP назначения,
    selfIP - свой IP,
    mask - маска своей сети.
    Используется операция побитового И.
    Для совершения подобной проверки маска и IP адреса преобразуются в 4-ёх байтовое беззнаковое целое (просто 4 октета IP адреса "склеиваются" вместе в двоичном представлении и составляют это 4-ёх байтовое целое) и уже над этими числами производятся операции.
    Из подобного применения маски видно, что она не обязательно должна быть 255 или 0. Возможны любые значения, которые может принимать 4 байтовое беззнаковое целое, где старшие биты единицы, а младшие нули. Например допустимы значения: 0, 128, 192, 224, 240, 248, 252, 254, 255 (тут я указываю значения для одного октета в маске). Чтоб было понятнее переведите все эти числа в двоичную систему.
    3. Классовой адресации уже в реальности нет (это "уже" длится уже долго, я не успел застать классовую адресацию :)). Про нее еще пишут в книгах, но в жизни ее нет. Везде где вы встретите маску в настройках IP - классовой адресации нет.
    В принципе, все задачи по разделению сетей и определению масок можно решить основываясь на том, как используется маска сети (см.п.2).
    4. Для виндовых машин фактический стандарт управления доменом - AD. По понятным причинам - предоставляется производителем винды.
    Но есть и аналоги. Из платных у Novell есть соответствующий продукт, которые то же умеет в виндовые GPO и т.п.
    Жаль, что сама Novell уже не существует и похоже "пошла по рукам", но ее продукты используются до сих пор. Некоторые продукты Novell опережали конкурентов на года.
    В основе AD лежит служба каталогов (посмотрите определение в вики). Есть открытый стандарт для подобных служб - LDAP. Есть открытые и проприетарные решения, реализующие службу каталогов. Как служба каталогов AD не единственная и далеко не лучшая. Кстати, на сколько я знаю, именно в Novell была разработана первая служба каталогов, когда еще AD даже в проекте не было.
    Но AD это не только служба каталогов, это еще и механизмы управления раб.станциями, пользователями и т.д. и т.п. И вот это все в совокупности делает AD не заменимой вещью для управления виндовой сетью.
    Ответ написан
    Комментировать
  • Как использовать RDP по одному адресу и в локалке и по интернету?

    @res2001
    Developer, ex-admin
    Настройте разные DNSы для внутренних пользователей и для внешних. И используйте имена для подключений.
    Ответ написан
    Комментировать
  • Как сделать чтобы Windows могла проверить подлинность самоподписанного сертификата?

    @res2001
    Developer, ex-admin
    Попробуйте добавить сертификат в Personal, Trusted People или Trusted Device
    А вообще - не используйте самоподписанный сертификат.
    Поднимите свой ЦС. Сгенерируйте сертификат ЦА, и сертификат сервера, который будет подписан сертификатом ЦА. На клиентах устанавливаете в корневые доверенные центры сертификации сертификат ЦА и будет вам счастье.
    Можно использовать встроенный в Windows Server Центр сертификации, или использовать openssl.

    Другой вариант - ослабить проверку сертификата у клиента. Думаю как-то это должно делаться в винде, возможно через реестр или GPO. Но я бы не стал этого делать.
    Ответ написан
    Комментировать
  • Как подсчитать необходимый размер буфера для monotonic_buffer_resource?

    @res2001
    Developer, ex-admin
    Например, в std::vector определяется тип value_type - это как раз тип элемента вектора.
    Можете использовать конструкции типа:
    sizeof(decltype(vector_val)::value_type)
    или
    sizeof(decltype(vector_val.back()))

    для вычисления размера элемента вектора, где vector_val - существующий экземпляр вектора
    Ответ написан