Задать вопрос
  • Можете покритиковать мой код?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    1) (Вкусовщина) стиль наименования не самый удачный. И переменные и функции называются одинаково - каждое слово с большой буквы без разделителей. Во всех массово применяемых стилях обычно переменные, функции и константы называются по разному. Например, переменные можно называть log_password. Функции и так оставить с большой буквы, а константы - полностью большими буквами.

    2) обилие вложенных if. Практикуйте ранний выход. Например в Login() можно сделать так:
    if (Data.is_open()) {
      std::cout << "Ошибка. У вас нет аккаунта" << std::endl;
      return;
    }


    И весь оставшийся код оказывается на 1 уровень выше.

    3) Бесконечные рекурсивные вызовы - это плохо. Рано или поздно программа упадет с закончившимся стеком.
    У вас Menu вызывает Login, который опять вызывает Menu. Да и сам Menu тоже.

    Лучше сделать в Menu бесконечный цикл (while(true)) и или выходить из программы через exit(), или возвращать из Login, что надо завершаться и тогда в Menu делать break.
    Ответ написан
    1 комментарий
  • Как заставить IP камеру вести запись по движению если она находится в другой подсети отличной от подсети NVR?

    mikes
    @mikes
    если детекция движения по анализу картинки, то крутите настройки nvr
    если детекция в самой камере (изображение/сенсор) то смотрите включено ли в камере и есть ли логи о срабатывании.

    то что камера в другой сети (при условии маршрутизации + не запрещено каким нить firewall) не имеет значения
    Ответ написан
    1 комментарий
  • Привязаны ли номера портов к протоколам транспортного и прикладного уровня?

    @pfg21
    ex-турист
    протоколы не привязаны к портам.
    но есть официальные "дефолтные" рекомендации Список портов TCP и UDP.

    да. на любой порт, это просто номер квартиры где обитает конкретный сервис.
    к примеру, в давние времена слабых машин обычно на 80 порту работал многофункциональный апач, ворочавший php скриптами. а на порту 8080 висел какойнить легкий lighthttpd который быстро отдавал статические файлы (картинки).

    для tcp/udp "номер порта" это просто число в заголовке их пакета.
    tcp/udp , в принципе, формируют само понятие порта для более высших по стеку протоколов. так скажем, находятся на уровень "выше" чем порты.
    порты значимы лишь для протоколов, работающих через tcp/udp.
    другие протоколы, не завязанные на tcp/udp, вообще не будут ничего знать о портах. у них будут другие системы разграничений потоков данных.
    Ответ написан
    Комментировать
  • Насколько большую роль в IT-карьере играют связи?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Очень большую роль играют нейронные связи в мозгу. Чем их больше, тем лучше соображается, а в кодинге без этого никак. Остальные связи особого значения не имеют.
    Ответ написан
    4 комментария
  • Таненбаум или Олифер?

    CityCat4
    @CityCat4
    Дома с переломом ноги
    Если совсем с нуля - Олиферы, даром что учебное пособие :) А Танненбаум - на "второй проход". Там в общем-то все то же самое, но больше, подробнее, академичнее.

    "Роман классический, старинный, отменно длинный, длинный, длинный..." (С)
    Ответ написан
    1 комментарий
  • Как убрать системные прерывания?

    @Drno
    удалите драйвер на сетевую от винды(в диспетчере устройств
    скачайте драйвер нужный с сайта асус и установите
    https://www.asus.com/ru/SupportOnly/K52F/HelpDesk_...

    вариант 2 - помирает сетевуха - тогда можно купить сетевую карту USB
    Ответ написан
    9 комментариев
  • Как сделать, чтобы printf() заменял -nan на любой заданный символ?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как сделать, чтобы вместо -nan печатался символ "-" ?

    Только добавив свою логику в свою программу, проверяющую значение на NaN и печатающую в зависимости от этого то или иное значение. С помощью стандартного printf -- никак.
    Ответ написан
    Комментировать
  • Как задать IP адреса и маски в этой сети?

    @Drno
    Я во второй раз вижу этот вопрос, и до сих пор не понимаю проблемы

    Датчики подключаются к инету через роутер, роутер их NATит в инет..
    все что надо - указать в датчиках внешний IP сервера... роутер их автоматом перекинет

    Если они к серверу должны стучаться внутри ВПН соединения, которое на роутере поднято, то укажите адрес сервера в сети ВПН и всё... ( в ESP)

    если же это одна локальная сеть - задайте ESP, ВИФИшке и серверу IP из одной подсети, выше уже пример указали
    например возьмите сеть 192.168.0.0/24
    Ответ написан
    2 комментария
  • Как задать IP адреса и маски в этой сети?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Классика

    Датчики с завода допустим идут с настройкой
    192.168.0.2
    Что вам нужно на роутере настроить
    192.168.0.1 отрубить dhcp задать маршруты до сервера с приложением влажности

    Далее настраиваете есп
    192.168.0.2
    192.168.0.3
    192.168.0.4
    192.168.0.5
    192.168.0.6
    192.168.0.7

    Гэйтвеем указываете 192.168.0.1
    Итого у вас

    Роутер 192.168.0.1 который роутит и вот этот адрес 172.27.1.12
    Датчики 192.168.0.2-192.168.0.7
    И сервер приложений 172.27.1.12

    Впрочем можете раздать сенсорам и их роутеру адреса из сетки 172.27.1.0/24
    Ответ написан
    Комментировать
  • Какие адреса из подсети 172.16.10.0 можно использовать для адресации?

    fzfx
    @fzfx
    18,5 дм
    Можно использовать адреса со 172.16.10.0 по 172.16.10.63. Потому что именно эти адреса входят в подсеть 172.16.10.0/26. Другие адреса в эту подсеть не входят. При наложении маски подсети на адрес подсети будет видно, какие биты адреса подсети относятся к адресу подсети, а какие к адресу хоста в подсети.
    Адрес 172.16.10.0 при этом является адресом самой подсети, адрес 172.16.10.63 - широковещательный адрес подсети, назначать эти два адреса машинам в этой подсети нельзя. Остальные адреса диапазона доступны для назначения машинам в этой подсети.
    Ответ написан
    1 комментарий
  • Как получить HMODULE импортированой dll без LoadLibraryA() или GetModuleHandleA()?

    @wishz Автор вопроса
    РЕШЕНИЕ:

    #include <Windows.h>
    #include <winternl.h>
    #include <cstdio>
    
    using namespace std;
    
    void get_by_peb()
    {
    	// Получаем указатель на PEB
    	// небольшой хак без какого либо импорта, чисто через asm получаем указататель на PEB структуру
    	PPEB peb = NULL;
    #ifdef _WIN64
    	peb = (PPEB)__readgsqword(0x60);
    #else
    	peb = (PPEB)__readfsdword(0x30);
    #endif
    	printf("PEB addr: [%p]\n", peb);
    	PPEB_LDR_DATA ldr = peb->Ldr;
    	PLIST_ENTRY startPos = &ldr->InMemoryOrderModuleList;
    	PLIST_ENTRY currPos = startPos->Flink;
    
    	int moduleCount = 0;
    	while (currPos != startPos) {
    		moduleCount++;
    		currPos = currPos->Flink;
    	}
    	printf("Modules count: [%d]\n", moduleCount);
    
    	currPos = currPos->Flink;
    	PLDR_DATA_TABLE_ENTRY pLdrEntry;
    	for (int i = 0; i < moduleCount; ++i) {
    		pLdrEntry = CONTAINING_RECORD(
    			currPos,
    			LDR_DATA_TABLE_ENTRY,
    			InMemoryOrderLinks);
    		printf(
    			"[%ls], BASE-ADDR: [0x%p], Entry-Point:[0x%p]\n",
    			pLdrEntry->FullDllName.Buffer,
    			pLdrEntry->DllBase,
    			pLdrEntry->Reserved3[0]
    		);
    
    		currPos = currPos->Flink;
    	}
    
    }
    
    int main(void) 
    {
    	
    	// Проверяем адрес
    	HMODULE dll_1 = GetModuleHandleA("KERNEL32.dll");
    
    	printf("--------------------\n");
    	printf("KERNEL32.dll :: [%p]\n", dll_1);
    	printf("main() :: [%p]\n", main);
    	printf("--------------------\n");
    	// Решение:
    	printf("--------------------\n");
    	get_by_peb();
    	printf("--------------------\n");
    
    	return 0;
    }


    62c348dec459d705410876.png

    Большая часть кода (оригинал): https://makestation.net/thread-3057.html
    Ответ написан
    1 комментарий
  • Как из vector с int8_t получить int число?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как получить то же самое в С++?

    например так:
    uint8_t foo[] = {7, 7};
    int i = foo[0] + 256 * foo[1];


    В js я могу получить это так
    Int8Array

    Скажи,
    - а что будет, если элемент массива foo будет иметь отрицательное значение?
    - а что будет, если твой код запустить на архитектуре с порядком байт big-endian?
    Ответ написан
  • Указатели в языке Си?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему программа завершилась? Вмешалась ОС? Но если так, то почему?

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

    Почему я не могу поменять значение самого указателя (ведь указатель - это всего лишь ссылка на адрес памяти, а не на значение).

    Значение указателя ты поменять можешь, но это не то, что было написано в коде. В коде было написано поменять значение на которое указатель указывает. Поменять указатель было бы a = (int *)10;

    могу ли я указателю дать ссылку на конкретную ячейку в памяти?

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

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

    В памяти всё хранится как последовательность байтов. Любую последовательность байтов можно проинтерпретировать как указатель. Но чтобы компилятор С понял что ты имеешь в виду, ему надо явно сказать, что ты хочешь проинтерпретировать целое число как адрес: int *a = (int *)0x0061FF18;
    Ответ написан
    Комментировать
  • Что означает -'0' на C?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Это вычитание значения '0' из значения str[j]. И то и другое - символы, они же char. В языке Cи, это целочисленный тип. Просто каждому символу дается его ascii код.

    Тут это используется для получения численнного значения цифры из ее символьного значения, ведь символы '0'-'9' в ascii идут подряд в натуральном порядке.
    Ответ написан
    Комментировать
  • Как данные перемещаются в сети интернет, всегда конвертируются в кадры Ethernet или остаются в пакетах IP?

    CityCat4
    @CityCat4 Куратор тега Сетевое администрирование
    Дома с переломом ноги
    Олиферы прочитаны?

    Если нет, то тогда вот такая вот история:
    - ты берешь кило картошки и высыпаешь его в пакет, на котором пишешь "кило картошки"
    - потом упаковываешь это в другой пакет, на котором пишешь "квартира 29"
    - потом упаковываешь это в другой пакет, на котором пишешь "3-я ул. Строителей, дом 12"
    - потом упаковываешь это в другой пакет, на котором пишешь "В доставку" и зовешь курьера.

    Курьер приезжает в доставку и снимает свой пакет.
    Доставка видит адрес, довозит пакет до дома, передает его консьержу и снимает свой пакет
    Консьерж зовет коридорного, который подымает пакет к двери квартиры и снимает свой пакет, потом звонит в дверь
    Адресат открывает дверь и видит пакет с надписью "кило картошки".

    Разве картошка по пути следования в что-то "преобразовывалась"?
    Ответ написан
    5 комментариев
  • Можно ли сделать отдельный вывод в Microsoft Visual Studio 2021?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Программист управляет двумя потоками вывода текста. STDOUT и STDERR через функции printf(...) или через расширенную версию с указанием файлового дескриптора вывода fprintf( stderr, ....).

    При запуске в консоли вы можете указывать что например вывод ошибок идет в err.log и стандартный вывод в std.log
    application.exe > std.log 2>err
    (в данном случае двойка - это номер дескриптора STDERR. Есть альтерантивный синтаксис когда для STDOUT
    мы указываем единичку "1>std.log" но ее просто опускают поэтому синтаксис так странно отличается)

    Как поступает с обоими потоками среда - я не помню. Скорее всего она их объединяет. Поэтому запускайте в консоли.

    Это вобщем-то архитектура любого процесса Unix и Windows.
    Ответ написан
    2 комментария
  • Как удобно переключаться между двумя дисками?

    @pfg21
    ex-турист
    1. менять приоритет запуска носителей в менюшке биос.
    2. поставить хороший загрузчик и менять приоритет запуска разделов в нем.
    Ответ написан
    Комментировать
  • Как удобно переключаться между двумя дисками?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Bcdedit вам в помощь. Настройте менюшку на входе по дефолту 10 через 5 сек или пункт меню
    Ответ написан
    Комментировать
  • Как записать значение в файл и зашифровать его на языке C?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Открывайте файл в бинарном режиме "wb" и пишите туда через fwrite (лучше побайтово, чтобы не мучиться с переносимостью из-за порядком байтов в int).

    Читайте, соответственно, через fread.

    Для шифрования лучше всего, во-первых, байты в разном порядке писать, (не 0,1,2,3, а, скажем, 2,0,3,1) и, во-вторых, xor-ить их с какими-то константами. А еще лучше не с константами, а со случайными данными, которые тоже записываются в файл рядом. Или не рядом, так будет закономерность меньше видна.

    Но все это может спасти только от людей незнакомых с reverse engineering'ом и отладкой. Более менее осведомленный ползователь посмотрит в ассемблерный код и поймет, что и как там читается и где и что надо поменять. Но да, это посложнее просто редактирования txt файла.

    Ну и, artmoney с cheat engine никто не отменял.
    Ответ написан
    Комментировать