Раньше приложение поставляли в виде обычного exe файла ( была написана С++ ) и для него можно было настроить файрвол и запретить процессу исходящие запросы.
Сейчас ее переделали на нет.коре и поставляется в виде dll файла и запускается через dotnet app.dll.
1) можно ли создать exe для данной app.dll ( исходников нету ) при этом чтобы он не просто запускал еще один процесс, а в рамках него чтобы работала dll ( чтобы настройки firewall работали)
2) возможно есть способ настроить файрвол для net core dll ?
ОСь Windows
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Здравствуйте, okon, Вы писали:
O>Раньше приложение поставляли в виде обычного exe файла ( была написана С++ ) и для него можно было настроить файрвол и запретить процессу исходящие запросы. O>Сейчас ее переделали на нет.коре и поставляется в виде dll файла и запускается через dotnet app.dll.
O>1) можно ли создать exe для данной app.dll ( исходников нету ) при этом чтобы он не просто запускал еще один процесс, а в рамках него чтобы работала dll ( чтобы настройки firewall работали) O>2) возможно есть способ настроить файрвол для net core dll ?
O>ОСь Windows
что за специфические требования к настройке? если у вас сетевой сервис, то нужно просто открыть нужный порт на файрволе, добавлять exe в исключения не обязательно.
Здравствуйте, Разраб, Вы писали:
Р>Здравствуйте, okon, Вы писали:
O>>Раньше приложение поставляли в виде обычного exe файла ( была написана С++ ) и для него можно было настроить файрвол и запретить процессу исходящие запросы. O>>Сейчас ее переделали на нет.коре и поставляется в виде dll файла и запускается через dotnet app.dll.
O>>1) можно ли создать exe для данной app.dll ( исходников нету ) при этом чтобы он не просто запускал еще один процесс, а в рамках него чтобы работала dll ( чтобы настройки firewall работали) O>>2) возможно есть способ настроить файрвол для net core dll ?
O>>ОСь Windows Р>что за специфические требования к настройке? если у вас сетевой сервис, то нужно просто открыть нужный порт на файрволе, добавлять exe в исключения не обязательно.
почему специфические, мне не нужно ограничивать исходящий траффик для всех приложений. А только для конкретного и я не знаю какой порт оно может использовать поэтому блокировать надо все.
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Там предлагается "provide the absolute path to dotnet.exe" и нет возможности указать конкретную app.dll.
А запрещать исходящие всем приложениям которые через dotnet.exe запускаются не нужно.
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
O>Там предлагается "provide the absolute path to dotnet.exe" и нет возможности указать конкретную app.dll. O>А запрещать исходящие всем приложениям которые через dotnet.exe запускаются не нужно.
Здравствуйте, okon, Вы писали:
O>1) можно ли создать exe для данной app.dll ( исходников нету ) при этом чтобы он не просто запускал еще один процесс, а в рамках него чтобы работала dll ( чтобы настройки firewall работали)
Ну, по идее, можно создать проект, который будет собирать exe, ему в зависимости добавить reference на эту dll.
В своём стартовом методе Launcher.Program.Main дёргать App.Program.Main (можно через студию или ILSpy глянуть какие в dll пространства имён, классы, где точка входа находится).
Можно ещё попробовать прокси прописать на 127.0.0.1 или где его заведомо нет.
На предмет этого можно посмотреть какие конфиги у dll есть,
либо запускать app.dll с добавлением переменных окружения HTTP_PROXY/HTTPS_PROXY/ALL_PROXY
но не факт, что весь сетевой обмен будет учитывать прописанный прокси.
O>>>ОСь Windows Р>>что за специфические требования к настройке? если у вас сетевой сервис, то нужно просто открыть нужный порт на файрволе, добавлять exe в исключения не обязательно.
O>почему специфические, мне не нужно ограничивать исходящий траффик для всех приложений. А только для конкретного и я не знаю какой порт оно может использовать поэтому блокировать надо все.
Узнать порт несложно, либо у разрабов чуда, либо самостоятельно посмотрев в мониторе ресурсов
Здравствуйте, Разраб, Вы писали:
Р>Узнать порт несложно, либо у разрабов чуда, либо самостоятельно посмотрев в мониторе ресурсов
Порт может назначаться динамически, если уже занят по умолчанию, ну и таких dll может быть множество каждый со своим портом
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, okon, Вы писали:
O>Там предлагается "provide the absolute path to dotnet.exe" и нет возможности указать конкретную app.dll.
А может быть создать копию (симлинк) "dotnet2.exe", указать путь к нему и твоё приложение запускать через него?
Поставить вторую копию фреймворка?
В докер запереть, наконец?
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
O>>Там предлагается "provide the absolute path to dotnet.exe" и нет возможности указать конкретную app.dll. O>>А запрещать исходящие всем приложениям которые через dotnet.exe запускаются не нужно.
S> А --self-contained true не может помочь? S>https://learn.microsoft.com/ru-ru/dotnet/core/tools/dotnet-publish
По идее да, но можно ли его сделать для сторонней dll или только для исходников ?
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Здравствуйте, ·, Вы писали:
·>Здравствуйте, okon, Вы писали:
O>>Там предлагается "provide the absolute path to dotnet.exe" и нет возможности указать конкретную app.dll. ·>А может быть создать копию (симлинк) "dotnet2.exe", указать путь к нему и твоё приложение запускать через него?
Да как вариант, попробую , но может есть какой-то более кошерный способ.
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Здравствуйте, okon, Вы писали:
O>>>Там предлагается "provide the absolute path to dotnet.exe" и нет возможности указать конкретную app.dll. O>·>А может быть создать копию (симлинк) "dotnet2.exe", указать путь к нему и твоё приложение запускать через него? O>Да как вариант, попробую , но может есть какой-то более кошерный способ.
Очень сомневаюсь... Операционка не может в общем случае смотреть внтурь exe и разбираться что же там дальше происходит, какие другие файлы откуда загружаются и на основании этого выбирать правила firewall. Т.е. проверка exe — максимум чего можно добиться.
Предсавь себе ты хочешь настроить фаерволл для определённого .py-файла. Ничего не выйдет, придётся указывать python.exe про строение которого операционка ничего знать не может. Ведь .py-файл в общем случае может запускаться через несколько слоёв. Так и .net приложение.
Тебе надо иметь отдельный .exe, возможно его можно собрать специальным образом для конкретного приложения, но, имхо, самое простое — просто копи-пастнуть уже существующий .exe. Тем более как я понял это просто какой-то временный хак ты делаешь для себя лично, а не продукт для конечных пользователей.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
O>>>Там предлагается "provide the absolute path to dotnet.exe" и нет возможности указать конкретную app.dll. O>>>А запрещать исходящие всем приложениям которые через dotnet.exe запускаются не нужно.
S>> А --self-contained true не может помочь? S>>https://learn.microsoft.com/ru-ru/dotnet/core/tools/dotnet-publish
O>По идее да, но можно ли его сделать для сторонней dll или только для исходников ?
Ну можешь создать свое приложение использующее эту Dll ку
и солнце б утром не вставало, когда бы не было меня
·>Очень сомневаюсь... Операционка не может в общем случае смотреть внтурь exe и разбираться что же там дальше происходит, какие другие файлы откуда загружаются и на основании этого выбирать правила firewall. Т.е. проверка exe — максимум чего можно добиться.
Здравствуйте, Serginio1, Вы писали:
S>Но может обработать командную строку
Кто? Зачем? Ты о чём? Предлагаешь в фаерволл регекспы на командную строку ставить? Я написал почему это не будет работать.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, ·, Вы писали:
·>Здравствуйте, Serginio1, Вы писали:
S>>Но может обработать командную строку ·>Кто? Зачем? Ты о чём? Предлагаешь в фаерволл регекспы на командную строку ставить? Я написал почему это не будет работать.
Там даже без регекспов а просто путь с командной строкой
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S>·>Кто? Зачем? Ты о чём? Предлагаешь в фаерволл регекспы на командную строку ставить? Я написал почему это не будет работать. S>Там даже без регекспов а просто путь с командной строкой
Я не понял что ты предлагаешь, но это не может работать в принципе.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, ·, Вы писали:
·>Здравствуйте, Serginio1, Вы писали:S>>·>Кто? Зачем? Ты о чём? Предлагаешь в фаерволл регекспы на командную строку ставить? Я написал почему это не будет работать. S>>Там даже без регекспов а просто путь с командной строкой ·>Я не понял что ты предлагаешь, но это не может работать в принципе.
Сейчас ты можешь настроить только на путь. Но хотелось бы добавить путь с параметрами, что бы фильровать еще и по параметрам.
Сейчас этого нет, но возможность такая есть ибо процесс эту информацию хранит.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S>·>Здравствуйте, Serginio1, Вы писали:S>>·>Кто? Зачем? Ты о чём? Предлагаешь в фаерволл регекспы на командную строку ставить? Я написал почему это не будет работать. S>>>Там даже без регекспов а просто путь с командной строкой S>·>Я не понял что ты предлагаешь, но это не может работать в принципе. S>Сейчас ты можешь настроить только на путь. Но хотелось бы добавить путь с параметрами, что бы фильровать еще и по параметрам. S> Сейчас этого нет, но возможность такая есть ибо процесс эту информацию хранит.
Т.е. Ты предлагаешь фильтровать по совпадению на строчку "dotnet.exe App.dll"?
А вот так? "dotnet.exe .\App.dll"
А вот так? "dotnet.exe App.dll app-args"
А вот так? "dotnet.exe --depsfile xyz App.dll"
А вот так? "dotnet.exe AnotherAppWhichRuns-theApp-Indirectly.dll"
А вот так? "dotnet.exe SomethingCompletelyDifferent.dll --some-args=App.dll --more"
Ещё раз повторюсь — такое в принципе работать не может.
Фаерволл вешается где-нибудь внутре CreateProcess и проверяет путь до executable. А ты ещё предлагаешь парсить аргументы, разбираться в их структуре, понимать что к чему и где там имя Dll-ки который executable может загружать (а может и не загружать!) на выполнение.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, ·, Вы писали:
·>Здравствуйте, Serginio1, Вы писали:
S>>·>Здравствуйте, Serginio1, Вы писали:S>>·>Кто? Зачем? Ты о чём? Предлагаешь в фаерволл регекспы на командную строку ставить? Я написал почему это не будет работать. S>>>>Там даже без регекспов а просто путь с командной строкой S>>·>Я не понял что ты предлагаешь, но это не может работать в принципе. S>>Сейчас ты можешь настроить только на путь. Но хотелось бы добавить путь с параметрами, что бы фильровать еще и по параметрам. S>> Сейчас этого нет, но возможность такая есть ибо процесс эту информацию хранит. ·>Т.е. Ты предлагаешь фильтровать по совпадению на строчку "dotnet.exe App.dll"? ·>А вот так? "dotnet.exe .\App.dll" ·>А вот так? "dotnet.exe App.dll app-args" ·>А вот так? "dotnet.exe --depsfile xyz App.dll" ·>А вот так? "dotnet.exe AnotherAppWhichRuns-theApp-Indirectly.dll" ·>А вот так? "dotnet.exe SomethingCompletelyDifferent.dll --some-args=App.dll --more"
·>Ещё раз повторюсь — такое в принципе работать не может.
Я с тебя хренею. Во первых ТП уже знает как запускает приложение.
Второе достаточно CommamdLine.Contains
Но проще что то из ПМ условия
[0]\\App.dll or [0]App.dll or [1]%App.dll
Можно напридумывать кучу вариаций, так же как и ты обрабатываешь аргументы командной строки
·>Фаерволл вешается где-нибудь внутре CreateProcess и проверяет путь до executable. А ты ещё предлагаешь парсить аргументы, разбираться в их структуре, понимать что к чему и где там имя Dll-ки который executable может загружать (а может и не загружать!) на выполнение.
if( !CreateProcess( NULL, // No module name (use command line)
argv[1], // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi ) // Pointer to PROCESS_INFORMATION structure
)
Ты споришь, ради того, что бы тебе чего то написать. Раз есть командная строка, то всегда по ней можно фильтровать. Хоть Contains, хоть Like? хоть регекспы.
Это мелочь, даже по тому, что бы разобрать путь и загрузить программу в память!
Второе, кроме имени приложения еще есть отборы по протоколам портам. А сделать проверку при создании это такая мелочь.
Мы же программисты. И ты говришь, о таких мелочах
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S>Здравствуйте, Разраб, Вы писали:
Р>>Узнать порт несложно, либо у разрабов чуда, либо самостоятельно посмотрев в мониторе ресурсов S>Порт может назначаться динамически, если уже занят по умолчанию, ну и таких dll может быть множество каждый со своим портом
тогда присоединяюсь к совету скачать зип версию дотнет и запускать ее. файрвол же по пути работает если не ошибаюсь.
Здравствуйте, ·, Вы писали:
·>Здравствуйте, okon, Вы писали:
O>>Там предлагается "provide the absolute path to dotnet.exe" и нет возможности указать конкретную app.dll. ·>А может быть создать копию (симлинк) "dotnet2.exe", указать путь к нему и твоё приложение запускать через него?
Вот этот способ у меня не получилось заставить работать — оно проверяет название exe файла и пишет что он неправильно называется.
·>Поставить вторую копию фреймворка?
Можно попробовать, но у меня и так стоит несколько .NET SDK, а вот dotnet.exe он один похоже ставится.
·>В докер запереть, наконец?
Докер не получится там есть WinForms нужно кнопки нажимать
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Р>>>Узнать порт несложно, либо у разрабов чуда, либо самостоятельно посмотрев в мониторе ресурсов S>>Порт может назначаться динамически, если уже занят по умолчанию, ну и таких dll может быть множество каждый со своим портом Р>тогда присоединяюсь к совету скачать зип версию дотнет и запускать ее. файрвол же по пути работает если не ошибаюсь.
Да по пути. Но проще сделать exe. Так проще для клиентов.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S> Да по пути. Но проще сделать exe. Так проще для клиентов.
Ты читал начальное сообщение? Готовое сделанное приложение ему даёт кто-то другой. У него есть только dll. Что _он_ может сделать?
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, ·, Вы писали:
·>Здравствуйте, Serginio1, Вы писали:
S>> Да по пути. Но проще сделать exe. Так проще для клиентов. ·>Ты читал начальное сообщение? Готовое сделанное приложение ему даёт кто-то другой. У него есть только dll. Что _он_ может сделать?
Сделать свое приложение где вызовет эту dll. И скомпилирует с --self-contained true
Или мы не программисты?
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, okon, Вы писали:
O>>>Там предлагается "provide the absolute path to dotnet.exe" и нет возможности указать конкретную app.dll. O>·>А может быть создать копию (симлинк) "dotnet2.exe", указать путь к нему и твоё приложение запускать через него? O>Вот этот способ у меня не получилось заставить работать — оно проверяет название exe файла и пишет что он неправильно называется.
Вот же зараза. Я бы быстренько попробовал переименовать "dotnet.exe" -> "dotsux.exe" (т.е. с сохранением длины строки) и потом в бинарном редакторе сделать такую же замену внутри, т.к. имя exe прописано в самом exe зачем-то. Правда там может вылезти, что подпись сломалась. В общем наверно не взлетит, но быстро попробовать можно.
O>·>Поставить вторую копию фреймворка? O>Можно попробовать, но у меня и так стоит несколько .NET SDK, а вот dotnet.exe он один похоже ставится.
Ну это ж ms... простых путей не найдёшь. Вон же пишут, что можно отдельно поставить, чуть ли не из zip?
O>·>В докер запереть, наконец? O>Докер не получится там есть WinForms нужно кнопки нажимать
Core обещает многоплатформенность же — пусть в докере под иксами и прокинуть DISPLAY наружу.
Как насчёт написать небольшую аппликуху, которая загружает app.dll и дёргает у неё Main?
Создать в Винде ещё одного пользователя и стартовать приложение "run as" с аккаунтом? А в фаерволле запретить сеть этому аккаунту.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, Serginio1, Вы писали:
S>·>Ты читал начальное сообщение? Готовое сделанное приложение ему даёт кто-то другой. У него есть только dll. Что _он_ может сделать? S>Сделать свое приложение где вызовет эту dll.
А ты знаешь как?
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, ·, Вы писали:
S>>·>Ты читал начальное сообщение? Готовое сделанное приложение ему даёт кто-то другой. У него есть только dll. Что _он_ может сделать? S>>Сделать свое приложение где вызовет эту dll. ·>А ты знаешь как?
Я уже ссылки давал. http://rsdn.org/forum/dotnet/8645215.1
Здравствуйте, ·, Вы писали:
S>> Или ты про вызов Main? ·>yes
Есть очень много способов вызвать статический метод класса!
Начиная от прямого метода, до рефлексии включая интероп и прочие прибамбасы
Здравствуйте, ·, Вы писали:
S>> Или ты про вызов Main? ·>Гы. Bard выдал: https://g.co/bard/share/0d0cb769760e
Ну я предлагал другой подход, создать приложение включить app.dll в проект и создать единственный exe файл, автономное приложение не зависящее от dotnet
Да еще и обрезать.
Короче у ТП есть варианты
и солнце б утром не вставало, когда бы не было меня
O>1) можно ли создать exe для данной app.dll ( исходников нету ) при этом чтобы он не просто запускал еще один процесс, а в рамках него чтобы работала dll ( чтобы настройки firewall работали)
O>ОСь Windows
да, можно. используйте SmartAssembly (red-gate.com)