Вверх ↑
Этот топик читают: Гость
Ответов: 240
Рейтинг: 0
#16: 2022-05-04 23:35:49 ЛС | профиль | цитата
Ну пока вот что получилось, не пинайте пожалуйста)) Постарался разобрать схему максимально понятно. Наверное можно было как-то проще и по другому. но я пока только так умею)

Сервер


Add(TCP_Server,6559233,469,161)
{
Port=5645
DataType=3
Point(doSendByIp)
link(onRead,12490335:doWork1,[])
link(onConnect,7707604:doWork,[(534,174)(534,202)])
link(onDisconnect,6035953:doWork,[(513,181)(513,216)])
}
Add(Label,9154769,518,238)
{
Left=70
Top=10
Width=4
Height=4
Caption="В сети: 0"
}
Add(Timer,264827,427,238)
{
Interval=5000
link(onTimer,6452263:doString,[])
}
Add(DoData,16696006,1029,224)
{
link(onEventData,7219476:##add,[])
link(Data,10958249:Select,[])
}
Add(ChildFormEx,7219476,1085,224)
{
Mode=1
link(onFString,12044158:In,[])
link(Str,6588103:Left,[(1091,212)(1063,212)(1063,324)(1035,324)])
link(Index,7219476:##index,[(1098,212)(1086,212)(1086,268)(1098,268)])
}
BEGIN_SDK
Add(EditMultiEx,5560497,21,21)
{
WorkCount=#5:##add|8:##select|
EventCount=#14:onFString=Data|
VarCount=#5:Value|7:##index|
DataCount=#3:Str|5:Index|
Width=916
Height=690
Point(##add)
Point(##select)
Point(##index)
link(##add,9496530:doSplit,[(73,27)(73,104)])
link(##select,14056592:doEvent1,[(39,34)(39,216)])
}
Add(MainForm,7834749,266,28)
{
Left=35
Top=105
Width=486
Height=281
Point(Handle)
}
Add(WinTools,8555549,266,70)
{
Point(doCaption)
link(Handle,7834749:Handle,[])
}
Add(Button,9343642,231,546)
{
Left=5
Top=105
Width=80
Caption="Domain"
Data=String(!dom!1!dom!)
link(onClick,7678700:##add,[])
}
Add(Memory,2370494,196,98)
{
Point(Data)
link(onData,10458678:doEvent1,[])
link(Data,9496530:Left,[(202,86)(184,86)(184,142)(153,142)])
}
Add(StrPart,9496530,147,98)
{
Char=";"
Point(Left)
Point(Right)
link(onSplit,2370494:doValue,[])
}
Add(LineBreakEx,2113519,672,70)
{
Type=1
link(OnEvent,14371575:doWork2,[])
}
Add(LineBreakEx,9908383,196,140)
{
Caption="ip"
Type=3
link(_Data,2370494:Value,[])
}
Add(LineBreakEx,12798015,791,35)
{
Caption="ip"
Type=2
}
Add(Button,3921568,232,385)
{
Left=5
Top=30
Width=80
Caption="VPN ON"
Data=String(!vpn!1!vpn!)
link(onClick,14199151:doString,[])
}
Add(LineBreakEx,15704431,490,385)
{
}
Add(MT_Add,10126953,791,63)
{
link(onAdd,5560497:onFString,[(880,69)(880,27)])
link(Data,12798015:getVar,[])
}
Add(StreamPack,3894687,742,63)
{
DataCount=#10:тип данных|6:данные|0:|
link(onPack,10126953:doAdd,[])
link(данные,14371575:Data,[(755,37)(734,37)(734,107)(706,107)])
}
Add(ChanelToIndex,14371575,700,63)
{
Count=3
Point(Data)
link(onIndex,3894687:doPack,[])
}
Add(Hub,10458678,238,98)
{
link(onEvent1,8555549:doCaption,[])
link(onEvent2,13431465:doString,[(259,111)(259,146)])
}
Add(LineBreakEx,763166,308,140)
{
Caption="-"
}
Add(RichEdit,12795543,84,210)
{
Left=90
Top=30
Width=370
Height=175
AddType=1
ScrollBars=2
link(Str,3129383:Var,[])
}
Add(FormatStr,13431465,266,140)
{
DataCount=1
Mask="!set!%1!set!"
link(onFString,763166:doWork,[])
link(Str1,13573524:Var,[])
}
Add(Hub,14056592,49,210)
{
link(onEvent1,12795543:doClear,[(70,216)(70,223)])
link(onEvent2,12795543:doAdd,[(70,223)(70,216)])
}
Add(Button,6819205,231,448)
{
Left=5
Top=55
Width=80
Caption="VPN OFF"
Data=String(!vpn!0!vpn!)
link(onClick,173637:doString,[])
}
Add(LineBreakEx,13783216,350,448)
{
}
Add(FormatStr,14199151,294,385)
{
DataCount=3
Mask="rasdial %1 %2 %3"
link(onFString,5971027:doEvent1,[])
}
Add(FormatStr,173637,294,448)
{
DataCount=1
Mask="rasdial %1 /DISCONNECT"
link(onFString,13783216:doWork,[])
}
Add(Button,10886206,231,497)
{
Left=5
Top=80
Width=80
Caption="Создать VPN"
Data=String(!dom!1!dom!)
link(onClick,13420474:doString,[])
}
Add(LineBreakEx,4360634,350,497)
{
}
Add(FormatStr,13420474,294,497)
{
DataCount=3
Mask="Add-VpnConnection -Name "%1" -ServerAddress "%2" -TunnelType "L2tp" -L2tpPsk "%3" -Force -EncryptionLevel "Required" -AuthenticationMethod MSChapv2 -SplitTunneling -RememberCredential -PassThru"
link(onFString,4360634:doWork,[])
}
Add(Timer,8675822,364,399)
{
Interval=4000
Enable=1
AutoStop=1
link(onTimer,3822465:doString,[])
}
Add(Hub,5971027,336,385)
{
link(onEvent1,8460138:doWork2,[])
link(onEvent2,8675822:doTimer,[(357,398)(357,405)])
}
Add(FormatStr,3822465,406,399)
{
DataCount=1
Mask="netsh interface ip show address "%1""
link(onFString,8460138:doWork3,[(459,405)])
}
Add(HubEx,8460138,455,385)
{
link(onEvent,15704431:doWork,[])
}
Add(LineBreakEx,11636129,630,56)
{
Caption="-"
Type=1
link(OnEvent,14371575:doWork1,[(672,62)(672,69)])
}
Add(ChildFormEx,7678700,301,546)
{
Mode=1
link(onFString,12420587:doWork,[])
}
BEGIN_SDK
Add(EditMultiEx,7452595,21,21)
{
WorkCount=#5:##add|
EventCount=#9:onFString|
Point(##add)
}
Add(MainForm,6915761,280,175)
{
Left=35
Top=105
Width=276
Height=138
Caption="Domain"
BorderStyle=4
}
Add(FormatStr,426406,84,63)
{
DataCount=3
Mask="$Username = '%1'\r\n$Password = '%2'\r\n[SecureString]$Securepassword = $Password | ConvertTo-SecureString -AsPlainText -Force \r\n$credential = New-Object System.Management.Automation.PSCredential -ArgumentList $Username, $Securepassword\r\nAdd-Computer –domainname '%3' -Credential $credential\r\n"
link(onFString,12597975:doWork2,[])
}
Add(Button,14511719,35,63)
{
Left=5
Top=75
Width=125
Caption="Добавить в домен"
link(onClick,426406:doString,[])
}
Add(Button,13653873,35,126)
{
Left=135
Top=75
Width=125
Caption="Проверить домен"
link(onClick,7301847:doString,[])
}
Add(FormatStr,7301847,84,126)
{
DataCount=3
Mask="dcdiag /s:%1 /u:%2 /p:%3"
link(onFString,12597975:doWork3,[(172,132)])
}
Add(HubEx,12597975,168,63)
{
link(onEvent,7452595:onFString,[(218,69)(218,27)])
}
END_SDK
Add(LineBreakEx,12420587,350,546)
{
}
Add(Edit,13923511,287,595)
{
Left=90
Top=210
Width=310
Text=""
link(onEnter,979959:doWork1,[(331,608)(331,624)(277,624)])
}
Add(Button,11338661,231,637)
{
Left=405
Top=210
Caption="Enter"
link(onClick,979959:doWork2,[])
}
Add(DoData,9639695,287,637)
{
link(onEventData,15138721:doWork,[])
link(Data,13923511:Text,[])
}
Add(HubEx,979959,273,637)
{
link(onEvent,9639695:doData,[])
}
Add(LineBreakEx,15138721,329,637)
{
}
Add(LineBreak,12947475,91,28)
{
Caption="ident"
Type=1
link(Data,5560497:Index,[(97,24)(34,24)])
Primary=[13573524,175,91]
}
Add(LineBreak,11278910,77,49)
{
Caption="result"
Type=1
link(Data,5560497:Str,[(83,32)(27,32)])
Primary=[3129383,7,140]
}
Add(InfoTip,9202813,343,112)
{
Info=#26:1) Отправляем info запрос |31:с информацией о идентификаторе |44:формы, чтобы клиент знал куда вернуть ответ |
Transparent=1
Width=169
Height=81
}
Add(InfoTip,10166069,231,350)
{
Info=#30:2) Отправляем команды клиенту |
Transparent=1
Width=176
Height=25
}
Add(InfoTip,16107618,35,252)
{
Info=#22:3) Получаем результаты|
Transparent=1
Width=169
Height=25
}
Add(InfoTip,2703401,686,112)
{
Info=#11:Отправочная|
Transparent=1
Width=176
Height=25
}
END_SDK
Add(MainForm,11013520,385,112)
{
Width=401
Height=264
Caption="Server"
link(onCreate,6559233:doOpen,[(432,132)(432,167)])
}
Add(Button,8220560,980,224)
{
Left=320
Top=195
Caption="Выбрать"
link(onClick,16696006:doData,[])
}
Add(StringTable,10958249,1022,161)
{
Top=35
Width=375
Height=155
Columns=#2:IP|4:NAME|
Redaction=1
Point(Strings)
}
Add(LineBreak,5526306,406,189)
{
link(Out,6559233:doSendByIp,[(446,195)(446,188)])
Primary=[12044158,728,35]
}
Add(DoData,13607125,259,168)
{
Data=String(!info!1!info!)
link(onEventData,3253775:doWork1,[])
}
Add(LineBreakEx,7707604,567,196)
{
Caption="info"
}
Add(LineBreakEx,6035953,567,210)
{
Caption="info"
}
Add(LineBreakEx,3544120,140,161)
{
Caption="info"
Type=1
link(OnEvent,14829874:doEvent1,[(183,167)(183,174)])
}
Add(StreamPack,10662291,350,168)
{
DataCount=#10:тип данных|6:данные|0:|
link(onPack,6559233:doSend,[(426,174)(426,181)])
link(данные,3253775:Data,[(363,142)(342,142)(342,212)(314,212)])
}
Add(ChanelToIndex,3253775,308,168)
{
Count=1
Point(Data)
link(onIndex,10662291:doPack,[])
}
Add(LineBreak,1867441,966,175)
{
Caption="Cls"
link(Out,10958249:doClear,[(1009,181)(1009,174)])
Primary=[2203403,-749,-35]
}
Add(Hub,14829874,189,168)
{
InCount=2
link(onEvent1,2203403:In,[(210,174)(210,146)])
link(onEvent2,16004187:doTimer,[])
}
Add(Timer,16004187,210,175)
{
Enable=1
AutoStop=1
link(onTimer,13607125:doData,[(250,181)(250,174)])
}
Add(StrPart,6588103,1029,280)
{
Char=";"
Point(Left)
link(onSplit,7219476:##select,[(1073,286)(1073,237)])
}
Add(LineBreak,1506573,987,280)
{
link(Out,6588103:doSplit,[])
Primary=[1858140,-161,-105]
}
Add(MultiElement,12490335,777,161)
{
link(onEvent1,10958249:doAdd,[])
link(onEvent2,1858140:In,[(817,174)(817,181)])
}
BEGIN_SDK
Add(EditMulti,15082416,21,21)
{
EventCount=2
WorkCount=1
Width=636
Height=361
link(doWork1,16516823:doGet,[(95,27)(95,146)])
}
Add(IndexToChanel,1679627,273,147)
{
Count=3
Point(Index)
Point(Data)
link(onEvent1,13289691:doString,[(341,153)(341,125)])
link(onEvent2,4261597:doWork2,[])
link(onEvent3,4261597:doWork3,[(389,167)])
link(Index,13936499:тип данных,[(279,135)(264,135)(264,195)(223,195)])
link(Data,13936499:данные,[(286,130)(258,130)(258,191)(230,191)])
}
Add(StreamUnPack,13936499,217,147)
{
DataCount=#10:тип данных|6:данные|1:4|0:|
link(onUnPack,1679627:doEvent,[])
link(Stream,15737934:Value,[(223,135)(195,135)(195,191)(167,191)])
}
Add(FormatStr,13289691,378,119)
{
Mask="%1;%2"
link(onFString,15082416:onEvent1,[(534,125)(534,27)])
link(Str1,5570442:Value,[])
}
Add(MT_Get,16516823,119,140)
{
link(onData,5570442:doValue,[(268,146)(268,69)])
link(onGet,15737934:doValue,[])
}
Add(Memory,5570442,378,63)
{
link(onData,13936499:doUnPack,[(422,69)(422,111)(205,111)(205,153)])
}
Add(Memory,15737934,161,147)
{
}
Add(HubEx,4261597,385,154)
{
link(onEvent,15082416:onEvent2,[(565,160)(565,34)])
}
END_SDK
Add(Button,2207539,105,175)
{
Left=5
Top=10
Width=60
Caption="Обновить"
link(onClick,14829874:doEvent2,[])
}
Add(FormatStr,6452263,469,238)
{
Mask="В сети: %1"
link(onFString,9154769:doText,[])
link(Str1,6559233:Count,[])
}
Add(InfoTip,5457708,567,238)
{
Info=#38:1) Если подключился новый пользователь|44:Отправляем всем запрос для обновления списка|
Transparent=1
Width=183
Height=67
}
Add(InfoTip,5856113,56,56)
{
Info=#48:2) Отправляем всем запрос для обновления списка |58: подключенных клиентов, предварительно чистим список "cls"|
Transparent=1
Width=183
Height=74
}
Add(InfoTip,12322718,945,105)
{
Info=#42:3) Генерируем список подключенных клиентов|23: IP и Имя компьютера |
Transparent=1
Width=183
Height=46
}
Add(InfoTip,2365093,1078,280)
{
Info=#20:4) Выбираем клиента |41:над которым будем проводить манипуляции |
Transparent=1
Width=183
Height=46
}
Add(InfoTip,718975,763,140)
{
Info=#8:Приёмная|
Transparent=1
Width=71
Height=18
}


Клиент


Add(TCP_Client,4355517,399,196)
{
Port=5645
DataType=3
link(onRead,13235102:doUnPack,[(450,202)(450,133)])
link(onConnect,14332808:In,[])
link(onDisconnect,13586780:In,[(454,216)(454,223)])
}
Add(Ping,10841041,287,119)
{
Name=""
link(onFind,4355517:doOpen,[(355,125)(355,202)])
}
Add(Timer,5424614,175,119)
{
Interval=5000
link(onTimer,13209653:doIPByHost,[])
}
Add(ComputerInfo,10497356,175,329)
{
}
Add(DoData,15456582,182,371)
{
link(onEventData,12524206:doWork1,[(223,377)(223,363)])
link(Data,10497356:CompName,[])
}
Add(Edit,15345655,783,127)
{
Width=427
Align=2
Text=""
link(onChange,5599196:doEvent1,[])
}
Add(Host,13209653,238,112)
{
link(onIPByHost,10841041:doPing,[])
link(HostName,12266588:Text,[])
}
Add(LineBreak,4270003,133,119)
{
Caption="on"
link(Out,5424614:doTimer,[])
Primary=[13586780,343,98]
}
Add(LineBreak,4181942,133,133)
{
Caption="off"
link(Out,5424614:doStop,[(169,139)(169,132)])
Primary=[14332808,343,70]
}
Add(VisualStrings,12266588,245,56)
{
Lines=#17:IP или Имя домена|
Width=116
}
Add(LineBreak,9970967,91,371)
{
Caption="NameInfo"
link(Out,15456582:doData,[])
Primary=[12402745,881,-244]
}
Add(BlockFind,5725440,916,127)
{
IncludeBlock=1
StartBlock="!info!"
EndBlock="!info!"
link(onSearch,12402745:In,[])
}
Add(StreamPack,14434465,322,357)
{
DataCount=#10:тип данных|6:данные|0:|
link(onPack,4355517:doSend,[(376,363)(376,216)])
link(данные,12524206:Data,[(335,331)(314,331)(314,401)(286,401)])
}
Add(ChanelToIndex,12524206,280,357)
{
Count=3
Point(Data)
link(onIndex,14434465:doPack,[])
}
Add(IndexToChanel,4233687,664,127)
{
Count=3
Point(Index)
Point(Data)
link(onEvent1,15345655:doText,[])
link(onEvent2,14512553:In,[])
link(Index,13235102:тип данных,[(670,115)(655,115)(655,175)(614,175)])
link(Data,13235102:данные,[(677,110)(649,110)(649,171)(621,171)])
}
Add(StreamUnPack,13235102,608,127)
{
DataCount=#10:тип данных|6:данные|0:|
link(onUnPack,4233687:doEvent,[])
}
Add(LineBreak,11297443,105,420)
{
Caption="Setinfo"
link(Out,10791341:doString,[])
Primary=[571514,909,-244]
}
Add(BlockFind,8562392,916,176)
{
IncludeBlock=1
StartBlock="!set!"
EndBlock="!set!"
link(onSearch,4165039:doValue,[])
}
Add(FormatStr,10791341,168,420)
{
DataCount=3
Mask="User:%2\r\nCPU:%3\r\n;%1"
link(onFString,12524206:doWork2,[(226,426)(226,370)])
link(Str2,10497356:UserName,[])
link(Str3,10497356:CPU,[(188,394)(195,394)])
}
Add(Charset,6319885,770,371)
{
link(onCharset,16324093:doEvent1,[])
}
Add(RichEdit,16471805,875,371)
{
Top=20
Width=427
Height=224
Align=5
AddType=1
ScrollBars=2
link(onChange,2548687:doString,[])
}
Add(Memory,4165039,965,176)
{
link(onData,571514:In,[])
}
Add(LineBreakEx,15141311,924,343)
{
Caption="ident"
Type=2
}
Add(FormatStr,2548687,924,371)
{
Mask="%2;%1"
link(onFString,14215854:In,[])
link(Str1,15141311:getVar,[])
}
Add(LineBreakEx,219894,965,218)
{
Caption="ident"
Type=3
link(_Data,4165039:Value,[])
}
Add(Hub,16324093,812,371)
{
link(onEvent1,16471805:doClear,[(850,377)(850,384)])
link(onEvent2,16471805:doAdd,[(850,384)(850,377)])
}
Add(MainForm,4248222,56,84)
{
Width=443
Height=286
Caption="client"
}
Add(WinExec,3064201,721,357)
{
FileName="powershell"
Mode=0
Action="runas"
Point(doConsoleExec)
Point(onConsoleResult)
Point(onConsoleError)
link(onConsoleResult,6319885:doCharset,[])
}
Add(LineBreak,12423762,672,371)
{
Caption="cmd"
link(Out,3064201:doConsoleExec,[])
Primary=[14512553,34,-237]
}
Add(Hub,5599196,832,127)
{
link(onEvent1,5725440:doSearch,[])
link(onEvent2,8562392:doSearch,[(881,140)(881,182)])
}
Add(LineBreak,7138444,231,378)
{
Caption="cmd"
link(Out,12524206:doWork3,[(273,384)(273,377)])
Primary=[14215854,742,-7]
}
Add(InfoTip,11880815,616,84)
{
Info=#8:Приёмная|
Transparent=1
Width=71
Height=18
}
Add(InfoTip,15762037,140,154)
{
Info=#29:1) Пытаемся пинговать Сервер |29: при его появлении конектимся|
Transparent=1
Width=169
}
Add(InfoTip,16393529,770,70)
{
Info=#34:2) Принимаем запрос от сервера на |31:предоставление имени компьютера|42:чтобы он добавил клиента в список клиентов|
Transparent=1
Width=267
Height=46
}
Add(InfoTip,2703401,238,406)
{
Info=#11:Отправочная|
Transparent=1
Width=113
Height=25
}
Add(InfoTip,10125118,1015,196)
{
Info=#47:3) Сюда приходит запрос с идентификатором формы|43: Чтобы клиент знал куда отправлять ответы|
Transparent=1
Width=281
}
Add(InfoTip,5762652,700,308)
{
Info=#35:4) Принимаем команды для Powerwhell|31:и возвращаем результаты серверу|
Transparent=1
Width=281
}


Задумка в том чтобы подкинуть родственникам друзьям из списка "Почини компухтер тыжпрограмист" клиент программы
Подцепить их к VPN и по возможности закинуть в домен.

Будет еще дописаны поля на сервер для данных которые будут уходить клиенту

И осталась проблема как быть с NAT ( Ну думаю писать инсталяшку для всего этого дела которая будет просить права администратора, и пока будет распаковывать клиент и добавлять его в автозагрузки. подкинет запись в реестра для исправления проблемы с NAT)

Большое спасибо Gunta, за помощь со скриптами.
карма: 0

0
Ответов: 333
Рейтинг: 49
#17: 2022-05-05 05:10:02 ЛС | профиль | цитата
egorhay, Отдельное спасибо за понятливость схем.
На всякий случай напоминаю, что домашняя редакция Windows (Home) не может быть участником домена, так как в ней вырезан компонент клиента групповой политики и соответствующие службы.
карма: 9

0
Ответов: 240
Рейтинг: 0
#18: 2022-05-11 21:43:16 ЛС | профиль | цитата
Появилась проблема, если оба клиента сидят за одним роутером.
То у них один ip.
Сервер не понимает кому отправлять данные.
Фото


Как я понимаю отправляет всем клиентам с этим ip
карма: 0

0
Ответов: 333
Рейтинг: 49
#19: 2022-05-13 08:45:28 ЛС | профиль | цитата
egorhay писал(а):
Появилась проблема, если оба клиента сидят за одним роутером

Немного нудно, но очень подробно.
https://www.youtube.com/watch?v=L1JtmAiSaFQ
карма: 9

0
Ответов: 240
Рейтинг: 0
#20: 2022-05-14 11:45:56 ЛС | профиль | цитата
Спасибо, смысл понимаю. Решил эту проблему неким костылём.
Я подумал пусть лучше они сидят за NAT так безопасней.
А вот клиент немного исправил.

1) решил проблему с запросами повышения прав и т.ж (мб не совсем корректно так делать, но пока лучше не придумал)
Сделал клиент+контроллер обновлений.
Все это дело помещаю в архив SFX Задаю ему инструкции запуск с правами администратора и распаковку в Program Files + ярлык контроллера обновлений в автозагрузки, и после распаковки архив запускает контроллер обнов.
Кидаю архив пользователю, он его запускает. Так как запуск требует прав админа то и после распаковки и автоматического старта "Контроллера обновлений" он имеет права администратора.

2)А уже в контроллере обновлений заложена следующая функция.
он скриптами PS твори вот что
Скрипт PowerShell


echo 'Отключаем брандмаэр'
Set-NetFirewallProfile -All -Enabled False
echo 'Отключаем защиту'
Set-ItemProperty -Path "HKLM:Software\Microsoft\Windows\CurrentVersion\policies\system" -Name "EnableLUA" -Type DWORD -Value 0 –Force
echo 'Создаем запись для обхода NAT'
Set-ItemProperty -Path "HKLM:SYSTEM\CurrentControlSet\Services\PolicyAgent" -Name "AssumeUDPEncapsulationContextOnSendRule" -Type DWORD -Value 2 –Force
echo 'Проверяем обновления'

Таки образом мы отключаем запросы админа ну и по путно сразу всё что нам мешает.

Потом он проверяет обновления "Подключается к FTP, проверяет наличие файла на локальном компьютере и сравнивает с датой последнего создания"
Если всё хорошо, просто запускает Client


3)
Теперь самое интересное..
После того как пользователь перезагрузит компьютер, наш "Контроллер обновлений который в автозагрузках" вновь проверить обновления и запустить Client
И теперь мы имеем полные права и можем приступать к созданию VPN + подключиться к VPN + Добавить компьютер в домен..

А проблемы с одним внешним ip на двоих решил так, Клиент мониторит статус подключения к VPN пока он не активно, клиент стучится на удалённый ip(Домен), как только он подключается к VPN он начинает стучаться на локальный ip
карма: 0

0
20
Сообщение
...
Прикрепленные файлы
(файлы не залиты)