Задать вопрос
  • Как решить проблему потерь пакетов при пробросе порта на tcp server?

    @res2001
    AlexSer,
    Пример неправильной отправки

    Устройство с той стороны очень часто не может определить слушает ли кто-то порт.
    Оно просто шлет данные в порт, не заботясь о том, есть ли кто-то с той стороны или нет.
    Если у вас как раз такой вариант, то при подключении вы запросто можете попасть на середину отправляемых данных.
    Да, в UART есть управляющие сигналы, с помощью, которых это можно делать. Но часто эти сигналы просто не используются. Для работы последовательного порта RS232 достаточно двух трех проводов, на сколько я помню (RX, TX, GND). RS485 вообще обходится двумя. Все остальное - дополнительные опции, которых может не быть физически.
  • Как решить проблему потерь пакетов при пробросе порта на tcp server?

    @res2001
    AlexSer, Что за устройство у вас там висит?
    Поток данных интенсивный? Подобная портянка за сколько времени накапливается?

    В линуксе по умолчанию все данные с tty прогоняются через фильтры, по моему, это называется line discipline, там идет анализ входных данных на команды терминала (линукс по умолчанию считает, что к порту подключен терминал). Команды применяются и удаляются из данных.
    Вам надо получать сырые данные (raw) и надо все эти фильтры отключить.
    Сделать это можно с помощью утилиты stty. Смотрите man stty
    Команда будет выглядеть как-то так:
    stty -F /dev/ttyACM0 raw
    Тут же можно задать и все остальные параметры порта.
    Есть еще утилита setserial, там то же можно выставлять какие-то параметры.
    Обе утилиты, возможно, надо будет дополнительно установить.

    Возможно с помощью этих утилит можно выставить и размер буфера приема. Размер буфера точно можно регулировать программно с помощью системных вызовов. Но не уверен, можно ли это сделать с помощью утилит типа stty. Возможно есть соответствующая настройка в том же minicom.
  • Wireguard и OpenVPN на одном сервере?

    @res2001
    Попробуйте и напишите результат тут. Будет интересно узнать.
    Сам такой конструктор не использовал, но не вижу причин почему бы им не работать вместе на одном сервере.
    В свое время у меня на одном компе были подняты openvpn, pptp, ipsec, все работало.

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

    @res2001
    rPman, Ограничение в 260 символов сейчас это уже во многом кривые руки программистов. Т.к. все Unicode функции WinAPI, работающие с файлами принимают пути до 32Кб длиной. Старые ASCII функции по прежнему имеют это ограничение в 260 символов. Т.е. по факту достаточно использовать в программе Unicode функции и этого ограничения не будет. Кто знает, какие функции для работы с файлами используются внутри cmd.exe :)
    https://docs.microsoft.com/ru-ru/windows/win32/fil...

    Azat2015, Файлов или каталогов с не стандартными символами в имени нет внутри этих подкаталогов?
    Помнится сталкивался с ситуацией, что какая-то программа создала файлы с неподдерживаемыми символами в имени и ничем эти файлы не удалялись. Удалил с помощью Ubuntu live CD, как советовал Alexander , там поддержка NTFS есть из коробки.

    Кстати, Far manager, возможно, сможет удалить вашу портянку каталогов. Я когда-то сталкивался с похожим случаем, тогда удалилась вся ветка каталогов достаточно просто. Как именно удалял уже не помню. Возможно удалил с помощью Far, т.к. я его активно использую.

    Еще вариант - попробуйте в cmd с помощью cd перейти куда-нибудь в середину вложенности этой ветки каталогов и оттуда удалить все вышестоящие каталоги с помощью rmdir. Или то же самое в Far.
  • Как удалить тысячи вложенных каталогов?

    @res2001
    Попробуйте из проводника удалять зажав Shift - это удалит каталог полностью без возможности восстановления (не будет помещать в корзину).
    Вообще из командной строки с помощью rmdir должно быть возможно удалить каталог. Задайте опцию /s для команды.
    Смтори rmdir /?
  • Как подключиться по ip из одной подсети в другую?

    @res2001
    Дмитрий,
    я из сотой попадаю на файловую помойку с адресом 1.2

    Значит с маршрутизацией все нормально - маршруты везде прописаны.
    Не совсем понятно, что за "удаленка". RDP?
    Попробуйте мой совет выше с отключением фаерволов (только для теста, конечно). Если с отключенными на обеих сторонах фаерволами вы будете нормально подключаться, значит нужно правильно настроить правила фаерволов. Так же возможно вмешивается фаервол на шлюзе.
    Что бы попасть на шлюз из 1ой подсети, вы должны использовать адрес шлюза из этой же подсети (у него же адреса в обеих подсетях есть).

    Для проверки доступности компа проще всего использовать утилиту ping:
    ping <IP адрес удаленного компа>
    Утилита несколько раз пытается проверить доступность удаленного IP с помощью пакета ICMP ECHO Request, ждет ответа на запрос и печатает отчет об этом. Если пинги проходят, то и любой другой трафик будет проходить - вопрос только в настройке фаерволов. Ответы на пинги отправляет ядро ОС (т.е. не требуется что бы на удаленном компе было что-то запущено, кроме ОС), этот функционал встроен в стек TCP/IP, но как ответы так и запросы могут быть заблокированы фаерволом.
  • Как подключиться по ip из одной подсети в другую?

    @res2001
    Руслан Федосеев,
    У вас на шлюзе не прописана маршрутизация.

    Думаю, что это не совсем так, т.к. автор пишет:
    с ПК 100й подсети я могу попасть по IP в 1ю подсеть

    Дмитрий, Прокомментируйте подробней этот момент. Что значит попасть в 1 подсеть? Как вы туда попадаете? Пингуете или еще что? Какие конкретно адреса пингуете и откуда?

    Возможно тут просто правила фаервола блокируют трафик. Попробуйте отключить фаерволы на обоих тестируемых компах (из разных подсетей) и проверьте прохождение пингов в обе стороны.
  • Как решить проблему потерь пакетов при пробросе порта на tcp server?

    @res2001
    AlexSer, Какие полные настройки? Настройки обычные для последовательного порта: скорость, количество бит данных, количество стоповых бит, проверка четности, контроль потока.
    пакеты идут не попорядку

    Там нет никаких пакетов - ttyACM - символьный драйвер, т.е. он работает с каждым передаваемым символом отдельно. В случае если ПО не успевает читать поток байт, то данные теряются, т.к. буфер в драйвере ограниченного размера.

    Что-то я сомневаюсь, что в ttyACM есть известные не исправленные баги. Драйвер далеко не новый, существует в ядре давно. https://www.kernel.org/doc/html/latest/usb/acm.html
  • Как решить проблему потерь пакетов при пробросе порта на tcp server?

    @res2001
    AlexSer, В линуксе все драйвера в ядре. Либо встроены, либо в виде подгружаемых модулей.
    На сколько я знаю, драйвер для ttyACM встроен в ядро, так же как и для ttyUSB и ttyS.
    Так что смена драйвера - это только смена ядра.
    Что за проблема в драйвере?
  • Как решить проблему потерь пакетов при пробросе порта на tcp server?

    @res2001
    AlexSer, Используйте любую программу, которая умеет работать с последовательными портами, например minicom, или что-то еще, их много.

    Можно даже так: cat </dev/ttyACM0
    Но, конечно, порт в системе должен быть правильно сконфигурирован. Программы общего назначения сами не умеют правильно конфигурировать порт, поэтому вы должны об этом позаботится.
    Тот же minicom сам может сконфигурировать порт через свои настройки/опции.
  • Как правильно передавать функцию в качестве параметра?

    @res2001
    Matvey_Mt, Верно.
    Даже если вы попробуете передать автоматический массив, то все равно передается только указатель:
    #define N   10
    void foo(int arr[N]) {}
    ...
    int array[N];
    foo(array);

    Но с автоматическими массивами надо быть аккуратным - имя такого массива не всегда ведет себя как указатель, в некоторых случаях оно ведет себя как массив. Например sizeof(array) из примера выше вернет полный размер массива в байтах, а не размер указателя.
  • Как использовать make на windows?

    @res2001
    voproser45654, В качестве окружения рекомендую связку msys2 + mingw.
    msys2 представляет собой линуксовую командную строку и пакетный менеджер с помощью которого можно установить кучу утилит и библиотек из пакетов. С его помощью ставим окружение для сборки, которое включает в себя в т.ч. и make, и mingw (компилятор).
    Если добавить соответствующие пути в виндовую переменную окружения PATH, то все утилиты будут доступны из командной строки винды. Если добавить виндовые переменные окружения MINGW_HOME и MSYS_HOME (смотри документацию msys2), то msys и mingw увидят разнообразные IDE.

    Другой вариант - WSL. Это полноценная виртуальная Линукс машина, предоставляемая микрософт. Все что собрано в WSL может быть запущено только в WSL. Но в винде много чего сделано для того что бы работа с WSL была достаточно прозрачна для пользователя. Не так давно появилась возможность запускать полноценное графическое окружение внутри WSL и иметь нормальный рабочий стол линукса, параллельно с раб.столом винды. Запускать WSL команды можно и из виндовой командной строки, через утилиту wsl))
  • Сервер-клиент openvpn win не видят за собой локальную сеть. как исправить?

    @res2001
    Слава Кривошейков, Как я и писал выше в такой конфигурации адрес подсети: 172.22.24.0, маска 255.255.248.0.
    Этот адрес и маску указывайте в настройках openvpn.
    PS: Чтоб вычислить адрес подсети надо сделать операцию побитового И над IP адресом и маской.
    PPS: Но что-то я сомневаюсь, что вам реально требуется такая маска. Обычно для разбиения на подсети выбирают такой диапазон адресов (адрес и маску подсети), в который бы помещалось необходимое количество узлов + 10-20% на расширение. Самая распространенная подсеть с маской 24 (255.255.255.0), она достаточно маленькая, ее удобно запоминать и просто вычислять адреса узлов и подсети.
  • Сервер-клиент openvpn win не видят за собой локальную сеть. как исправить?

    @res2001
    Слава Кривошейков, Видимо из-за сочетания адреса подсети 28.0 и маски 248.0.
    Дело в том, что для адреса подсети 28.0 маска 248.0 не подходит.
    Для такой маски адрес 28.0 - это адрес узла, а не подсети. Для подсети в таком случае адрес 24.0.
    Если адрес подсети реально должен быть 28.0, то маска должна быть 252.0.

    Что у вас фактически на камерах настроено? Какой диапазон адресов из этой подсети реально используется?

    Для справки - в подсети с маской 248.0 - может быть до 2048 узлов. Для подсети 252.0 - 1024 узла.
    Вам реально требуется такое количество узлов (камер) в этой подсети?
  • Сервер-клиент openvpn win не видят за собой локальную сеть. как исправить?

    @res2001
    Слава Кривошейков, Маршрут на месте, лишних маршрутов нет.
    Теперь пинги с сервера на компы в сети за клиентом должны проходить.
  • Сервер-клиент openvpn win не видят за собой локальную сеть. как исправить?

    @res2001
    Слава Кривошейков,
    Есть еще 2 впн клиент с такой же подсетью 192.168.100.1(роутер) , но там в ccd я не чего не прописывал кроме ip 10.8.0.3.

    Это не считается. В данном случае маршрут существует даже без запущенного openvpn. Значит он появился откуда то вне openvpn.
    Если route delete маршурт удалит успешно и после перезагрузки он не появится опять, то не важно откуда он взялся. Иначе, придется искать, откуда растут ноги у этого маршрута.

    Кстати, если потребуется доступ к сети за этим вторым клиентом, то придется как-то решать вопрос с пересекающимися подсетями. Обычно правильней всего - изменить адресацию в одной из сетей, но это может быть не всегда возможно.
  • Сервер-клиент openvpn win не видят за собой локальную сеть. как исправить?

    @res2001
    Слава Кривошейков, Маршруты не удаляются с помощью route delete 192.168.100.0?
    Если сразу посмотреть таблицу маршрутизации после команды? Сама команда ошибки выдает?
    На сервере нет сетевых адаптеров с вторичным адресом из сети 192.168.100.0?
  • Сервер-клиент openvpn win не видят за собой локальную сеть. как исправить?

    @res2001
    res2001,
    192.168.100.255 255.255.255.255 On-link 192.168.1.245 291

    Этот маршрут то же надо удалить.
  • Сервер-клиент openvpn win не видят за собой локальную сеть. как исправить?

    @res2001
    Слава Кривошейков, Завершите openvpn на сервере полностью.
    Посмотрите таблицу маршрутизации.
    Если остались маршруты для сети 192.168.100.0, то удалите их с помощью route delete.
    Перезагрузите винду, проверьте таблицу маршуртизации еще раз. После перезагрузки и до старта openvpn маршрутов к 192.168.100.0 не должно быть.
  • Сервер-клиент openvpn win не видят за собой локальную сеть. как исправить?

    @res2001
    Слава Кривошейков, Маршрут на сервере добавился:
    192.168.100.0 255.255.255.0 10.8.0.2 10.8.0.1 281

    Но помимо этого там же есть еще 2 маршрута:
    192.168.100.0 255.255.255.0 On-link 192.168.1.245 36
    192.168.100.255 255.255.255.255 On-link 192.168.1.245 291

    Как они туда попали?
    У первого из них метрика (последняя цифра в строке) 36, а у маршрута на 10.8.0.1 метрика 281, т.к. маршруты оба маршрута для одной и той же сети, то для выбора используется метрика - выбирается маршрут у которого метрика меньше.