WinServer 2012R2 ನಲ್ಲಿ RDP ಬಳಕೆದಾರರ ಅವಧಿಗೆ ನಿರ್ವಾಹಕರಲ್ಲದವರ ಮಾನವ ನೆರಳು ಸಂಪರ್ಕಕ್ಕಾಗಿ ಉಪಯುಕ್ತತೆ

ಎಂಟರ್‌ಪ್ರೈಸ್‌ನ ಕ್ವಾರಂಟೈನ್ ಕಾರ್ಯಾಚರಣೆಯ ಸಮಯದಲ್ಲಿ ಸಮಸ್ಯೆ ಈ ಕೆಳಗಿನಂತಾಯಿತು: ಅಪ್ಲಿಕೇಶನ್ ಸಾಫ್ಟ್‌ವೇರ್‌ನಲ್ಲಿ ಸೇವೆ ಸಲ್ಲಿಸುವ ಮತ್ತು ಸಮಾಲೋಚಿಸುವ ತಜ್ಞರು ಕಚೇರಿಗಳಿಗೆ ಭೇಟಿ ನೀಡುವ ಸಂಖ್ಯೆಯನ್ನು ಕಡಿಮೆ ಮಾಡುವುದು ನಿಜವಾಗಿಯೂ ಅವಶ್ಯಕವಾಗಿದೆ ಮತ್ತು ಸ್ಪಷ್ಟವಾಗಿ ಹೇಳುವುದಾದರೆ, ಬಳಕೆದಾರರು ಆಗಾಗ್ಗೆ ತಜ್ಞರ ಸಹಾಯವನ್ನು ದುರುಪಯೋಗಪಡಿಸಿಕೊಳ್ಳುತ್ತಾರೆ, ಸಮಸ್ಯೆಯನ್ನು ಸ್ವತಃ ಪರಿಶೀಲಿಸಲು ಬಯಸುವುದಿಲ್ಲ, "ಅವರು ಬರುತ್ತಾರೆ - ಸಹಾಯ ಮಾಡುತ್ತಾರೆ - ಅದನ್ನು ಮಾಡುತ್ತಾರೆ, ಮತ್ತು ಈ ಮಧ್ಯೆ ನಾನು ಧೂಮಪಾನ ಮಾಡುತ್ತೇನೆ / ಕಾಫಿ ಕುಡಿಯುತ್ತೇನೆ, ಇತ್ಯಾದಿ." ನೀವು ರಿಮೋಟ್ ಪರದೆಯನ್ನು ವೀಕ್ಷಿಸಿದರೆ ಸರ್ವರ್‌ಗೆ ಹಂಚಿಕೆಯ ಪ್ರವೇಶದೊಂದಿಗೆ ಫೋನ್ ಮೂಲಕ ಸಮಾಲೋಚನೆ ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿಯಾಗಿದೆ.

WinServer 2012R2 ನಲ್ಲಿ RDP ಬಳಕೆದಾರರ ಅವಧಿಗೆ ನಿರ್ವಾಹಕರಲ್ಲದವರ ಮಾನವ ನೆರಳು ಸಂಪರ್ಕಕ್ಕಾಗಿ ಉಪಯುಕ್ತತೆ

ನಮ್ಮ ಬೈಸಿಕಲ್‌ನ "ಆವಿಷ್ಕಾರ"ದ ನಂತರ, ಲೇಖನದ ವಿಷಯದ ಕುರಿತು ಕೆಲವು ಸಮಂಜಸವಾದ ಮಾಹಿತಿಗಳು ಕಂಡುಬಂದವು: RDS ನೆರಳು - ಬಳಕೆದಾರರ RDP ಅವಧಿಗಳಿಗೆ ನೆರಳು ಸಂಪರ್ಕ Windows Server 2012 R2 ಅಥವಾ ಸವಲತ್ತು ಇಲ್ಲದ ಬಳಕೆದಾರರ ನೆರಳು ಮೋಡ್ windows server ಅಥವಾ RDP ಅವಧಿಗಳ ನಿರ್ವಹಣೆಯನ್ನು ನಿಯೋಜಿಸುವುದು. ಸರಳ ಸಂಭಾಷಣೆಯ ಅಂಶಗಳೊಂದಿಗೆ ಸಹ ಇವೆಲ್ಲವೂ ಕನ್ಸೋಲ್ ಬಳಕೆಯನ್ನು ಒಳಗೊಂಡಿರುತ್ತವೆ.

ಕೆಳಗಿನ ಎಲ್ಲಾ ಮಾಹಿತಿಯು ಯಾರಿಗಾಗಿ ಉದ್ದೇಶಿಸಲಾಗಿದೆ ಅಸಹಜ ವಿಕೃತಿಗಳನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಸಹಿಸಿಕೊಳ್ಳುತ್ತದೆ ಬಯಸಿದ ಫಲಿತಾಂಶವನ್ನು ಪಡೆಯಲು, ಅನಗತ್ಯ ವಿಧಾನಗಳನ್ನು ಆವಿಷ್ಕರಿಸುವುದು.
"ಬುಷ್ ಸುತ್ತಲೂ ಹೊಡೆಯದಿರಲು", ನಾನು ಕೊನೆಯ ವಿಷಯದಿಂದ ಪ್ರಾರಂಭಿಸುತ್ತೇನೆ: ಬೈಕು ಸಾಮಾನ್ಯ ಬಳಕೆದಾರರಿಗೆ ಉಪಯುಕ್ತತೆಯ ಸಹಾಯದಿಂದ ಕೆಲಸ ಮಾಡುತ್ತದೆ. ಅಡ್ಮಿಲಿಂಕ್, ಇದಕ್ಕಾಗಿ ನಾವು ಅದರ ಲೇಖಕರಿಗೆ ಧನ್ಯವಾದಗಳನ್ನು ಅರ್ಪಿಸುತ್ತೇವೆ.

I. ಕನ್ಸೋಲ್ ಮತ್ತು ನೆರಳು RDP.

ಇದರೊಂದಿಗೆ ಬಳಸಿದಾಗಿನಿಂದ ಸರ್ವರ್ ಮ್ಯಾನೇಜರ್ ಕನ್ಸೋಲ್‌ನ ನಿರ್ವಾಹಕ ಹಕ್ಕುಗಳು -> QuickSessionCollection -> ಆಸಕ್ತಿಯ ಬಳಕೆದಾರರ ಅಧಿವೇಶನದ ಮೇಲೆ ಕ್ಲಿಕ್ ಮಾಡುವ ಮೂಲಕ, ಸಂದರ್ಭ ಮೆನುವಿನಲ್ಲಿ ನೆರಳು ಆಯ್ಕೆ ಮಾಡುವ ಮೂಲಕ ಸಾಫ್ಟ್‌ವೇರ್ ಅನ್ನು ಹೇಗೆ ಬಳಸುವುದು ಎಂಬುದರ ಕುರಿತು ಸೂಚನೆ ನೀಡುವ ಸಿಬ್ಬಂದಿಗಾಗಿ, - ಒಂದು ಆಯ್ಕೆಯಾಗಿಲ್ಲ, ಮತ್ತೊಂದು "ಮರದ" ವಿಧಾನವನ್ನು ಪರಿಗಣಿಸಲಾಗಿದೆ, ಅವುಗಳೆಂದರೆ:

1. RDP ಸೆಷನ್ ID ಯನ್ನು ಕಂಡುಹಿಡಿಯಿರಿ:

query user | findstr Administrator

ಅಥವಾ:

qwinsta | findstr Administrator 

ಇದಲ್ಲದೆ, "| findstr ನಿರ್ವಾಹಕರು"ನಿಖರವಾಗಿ ಏನು ಎಂದು ನಿಮಗೆ ತಿಳಿದಾಗ ಮಾತ್ರ ಅದು ಅನುಕೂಲಕರವಾಗಿತ್ತು ನಿರ್ವಾಹಕ ನಿಮಗೆ ಅಗತ್ಯವಿದೆ, ಅಥವಾ ಸರ್ವರ್‌ಗೆ ಲಾಗಿನ್ ಆಗಿರುವ ಎಲ್ಲವನ್ನೂ ನೋಡಲು ಮೊದಲ ಭಾಗವನ್ನು ಮಾತ್ರ ಬಳಸಿ.

WinServer 2012R2 ನಲ್ಲಿ RDP ಬಳಕೆದಾರರ ಅವಧಿಗೆ ನಿರ್ವಾಹಕರಲ್ಲದವರ ಮಾನವ ನೆರಳು ಸಂಪರ್ಕಕ್ಕಾಗಿ ಉಪಯುಕ್ತತೆ

2. ಡೊಮೇನ್‌ನಲ್ಲಿ ಒದಗಿಸಲಾದ ಈ ಸೆಷನ್‌ಗೆ ನಾವು ಸಂಪರ್ಕಿಸುತ್ತೇವೆ ಗುಂಪು ನೀತಿಗಳು "ರಿಮೋಟ್ ಡೆಸ್ಕ್‌ಟಾಪ್ ಸೇವೆಗಳ ಬಳಕೆದಾರ ಸೆಷನ್‌ಗಳಿಗಾಗಿ ರಿಮೋಟ್ ಕಂಟ್ರೋಲ್ ನಿಯಮಗಳನ್ನು ಹೊಂದಿಸುತ್ತದೆ" ಆಯ್ಕೆಯನ್ನು ಕನಿಷ್ಠ "ಬಳಕೆದಾರರ ಅನುಮತಿಯೊಂದಿಗೆ ಸೆಷನ್ ಅನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಿ" ಗೆ ಹೊಂದಿಸಲಾಗಿದೆ (ಹೆಚ್ಚಿನ ಮಾಹಿತಿ):

mstsc /shadow:127

ಪಟ್ಟಿಯು ಬಳಕೆದಾರರ ಲಾಗಿನ್‌ಗಳನ್ನು ಮಾತ್ರ ಒಳಗೊಂಡಿರುತ್ತದೆ ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಮನಿಸಿ.

ನಿರ್ವಾಹಕ ಹಕ್ಕುಗಳಿಲ್ಲದೆ ನೀವು ಈ ಕೆಳಗಿನವುಗಳನ್ನು ಪಡೆಯುತ್ತೀರಿ ಎಂದು ನಾನು ಪುನರಾವರ್ತಿಸುತ್ತೇನೆ:

WinServer 2012R2 ನಲ್ಲಿ RDP ಬಳಕೆದಾರರ ಅವಧಿಗೆ ನಿರ್ವಾಹಕರಲ್ಲದವರ ಮಾನವ ನೆರಳು ಸಂಪರ್ಕಕ್ಕಾಗಿ ಉಪಯುಕ್ತತೆ

ಆದರೆ ಪ್ರಶ್ನೆಯಲ್ಲಿರುವ ಕಾರ್ಯಕ್ರಮದ ಪ್ರಾಥಮಿಕ ಡೀಬಗ್ ಮಾಡಲು, ನಾನು ನಿರ್ವಾಹಕ ಹಕ್ಕುಗಳನ್ನು ಹೊಂದಿರುವ ಖಾತೆಯನ್ನು ಬಳಸಿದ್ದೇನೆ.

II. ಕಾರ್ಯಕ್ರಮ

ಹಾಗಾಗಿ, ಕಾರ್ಯ ಹೇಳಿಕೆ: ಬಳಕೆದಾರರ ನೆರಳು ಸಂವೇದನೆಗೆ ಸಂಪರ್ಕಿಸಲು ಅವರ ಅನುಮತಿಯೊಂದಿಗೆ ಕೆಲವು ಸರಳ ಚಿತ್ರಾತ್ಮಕ ಇಂಟರ್ಫೇಸ್ ಅನ್ನು ರಚಿಸುವುದು, ಬಳಕೆದಾರರಿಗೆ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸುವುದು. ಆಯ್ಕೆಮಾಡಿದ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಪರಿಸರವು ಲಾಜರಸ್ ಆಗಿದೆ.

1. ನಾವು "ಲಾಗಿನ್" - "ಪೂರ್ಣ ಹೆಸರು" ಬಳಕೆದಾರರ ಪೂರ್ಣ ಡೊಮೇನ್ ಪಟ್ಟಿಯನ್ನು ನಿರ್ವಾಹಕರಿಂದ ಅಥವಾ ಮತ್ತೆ ಕನ್ಸೋಲ್ ಮೂಲಕ ಪಡೆಯುತ್ತೇವೆ:

wmic useraccount get Name,FullName 

ಯಾರೂ ಇದನ್ನು ನಿಷೇಧಿಸುವುದಿಲ್ಲ:

wmic useraccount get Name,FullName > c:testusername.txt

ಈ ಫೈಲ್ ಅನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವಲ್ಲಿ ಲಾಜರಸ್ ಸಮಸ್ಯೆ ಎದುರಿಸಿದ್ದಾನೆ ಎಂದು ನಾನು ಈಗಿನಿಂದಲೇ ಹೇಳುತ್ತೇನೆ, ಏಕೆಂದರೆ ಇದರ ಡೀಫಾಲ್ಟ್ ಎನ್‌ಕೋಡಿಂಗ್ UCS-2 ಆಗಿರುವುದರಿಂದ, ನಾನು ಅದನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ಸಾಮಾನ್ಯ UTF-8 ಗೆ ಪರಿವರ್ತಿಸಬೇಕಾಗಿತ್ತು. ಫೈಲ್ ರಚನೆಯು ಅನೇಕ ಟ್ಯಾಬ್‌ಗಳನ್ನು ಅಥವಾ ಬದಲಿಗೆ ಅನೇಕ ಸ್ಥಳಗಳನ್ನು ಹೊಂದಿದೆ, ಇದನ್ನು ಪ್ರೋಗ್ರಾಮ್ಯಾಟಿಕ್ ಆಗಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ನಿರ್ಧರಿಸಲಾಯಿತು, ಬೇಗ ಅಥವಾ ನಂತರ ಎನ್‌ಕೋಡಿಂಗ್ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಫೈಲ್ ಅನ್ನು ಪ್ರೋಗ್ರಾಮ್ಯಾಟಿಕ್ ಆಗಿ ನವೀಕರಿಸಲಾಗುತ್ತದೆ.

ಹಾಗಾಗಿ, ಪ್ರೋಗ್ರಾಂ ಬಳಕೆದಾರರಿಗೆ ಪ್ರವೇಶಿಸಬಹುದಾದ ಫೋಲ್ಡರ್ ಅನ್ನು ಹೊಂದಿರುವುದು ಇದರ ಉದ್ದೇಶವಾಗಿದೆ, ಉದಾಹರಣೆಗೆ c:test, ಇದು 2 ಫೈಲ್‌ಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ: ಮೊದಲನೆಯದು ಲಾಗಿನ್ ಮತ್ತು ಪೂರ್ಣ ಹೆಸರಿನೊಂದಿಗೆ, ಎರಡನೆಯದು id_rdp ಮತ್ತು ಬಳಕೆದಾರ ಲಾಗಿನ್‌ನೊಂದಿಗೆ. ನಂತರ ನಾವು ಈ ಡೇಟಾವನ್ನು ನಮಗೆ ಸಾಧ್ಯವಾದಷ್ಟು ಉತ್ತಮವಾಗಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತೇವೆ :).

ಈ ಮಧ್ಯೆ, ಸೆಷನ್‌ಗಳ ಪಟ್ಟಿಯೊಂದಿಗೆ ಸಂಯೋಜಿಸಲು, ನಾವು ಈ (ಲಾಗಿನ್ ಮತ್ತು ಪೂರ್ಣಹೆಸರು) ವಿಷಯವನ್ನು ಒಂದು ಶ್ರೇಣಿಗೆ ವರ್ಗಾಯಿಸುತ್ತೇವೆ:

procedure Tf_rdp.UserF2Array;
var 
  F:TextFile;   i:integer;   f1, line1:String;   fL: TStringList;
begin //f_d глобальный путь к размещению файлов 
f1:=f_d+'user_name.txt';     //задача считать в массив содержимое файла
fL := TStringList.Create; // строку подвергнем метамарфозам с разделителями
fL.Delimiter := '|'; fL.StrictDelimiter := True;
AssignFile(F,f1); 
try // Открыть файл для чтения
  reset(F); ReadLn(F,line1);
  i:=0;
while not eof(F) do // Считываем строки, пока не закончится файл
begin
ReadLn(F,line1);
line1:= StringReplace(line1, '  ', '|',[]); //заменяем первый попавш.2пробела разделителем |
// удаляем все двойные пробелы
while pos('  ',line1)>0 do line1:= StringReplace(line1, '  ', ' ', [rfReplaceAll]);
begin
if (pos('|',line1)>0) then
begin //если разделитель существует заносим его в массив
fL.DelimitedText :=line1; // разбиваем на столбцы
if (fL[0]<>'') then //если учетка имеет имя
begin //вносим ее в массив
 inc(i); // избавляемся от возможных одиночных пробелов в логине
 fam[0,i]:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]);
 fam[1,i]:=fL[0];
 end;end;end;end; // Готово. Закрываем файл.
 CloseFile(F);
 Fl.Free;
 except
 on E: EInOutError do  ShowMessage('Ошибка обработки файла. Детали: '+E.Message);
 end;end;

"ಸಾಕಷ್ಟು ಕೋಡ್" ಗಾಗಿ ಕ್ಷಮಿಸಿ, ಮುಂದಿನ ಅಂಶಗಳು ಹೆಚ್ಚು ಸಂಕ್ಷಿಪ್ತವಾಗಿರುತ್ತವೆ.

2. ಹಿಂದಿನ ಹಂತದಿಂದ ಬಂದ ವಿಧಾನದಂತೆಯೇ, ನಾವು ಪಟ್ಟಿ ಸಂಸ್ಕರಣೆಯ ಫಲಿತಾಂಶವನ್ನು StringGrid ಅಂಶಕ್ಕೆ ಓದುತ್ತೇವೆ ಮತ್ತು ನಾನು "ಮಹತ್ವದ" ಕೋಡ್ ತುಣುಕನ್ನು ಒದಗಿಸುತ್ತೇನೆ:

2.1 ನಾವು ಪ್ರಸ್ತುತ RDP ಅವಧಿಗಳ ಪಟ್ಟಿಯನ್ನು ಫೈಲ್‌ನಲ್ಲಿ ಸ್ವೀಕರಿಸುತ್ತೇವೆ:

f1:=f_d+'user.txt';
cmdline:='/c query user >'+ f1;
if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1)=0 then;
Sleep(500); // можно и подольше ждать пока файл для чтения создается

2.2 ಫೈಲ್ ಅನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಿ (ಕೋಡ್‌ನ ಗಮನಾರ್ಹ ಸಾಲುಗಳನ್ನು ಮಾತ್ರ ಸೂಚಿಸಲಾಗುತ್ತದೆ):

StringGrid1.Cells[0,i]:=fL[1]; StringGrid1.Cells[2,i]:=fL[3]; //кидаем в цикле в StringGrid1
login1:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]); //убираем из логина пробелы
if (SearchArr(login1)>=0) then //ищем в массиве из п1. логин и записываем в таблицу ФИО
StringGrid1.Cells[1,i]:=fam[1,SearchArr(login1)]
else StringGrid1.Cells[1,i]:='+'; // либо записываем плюсик:)
.... //в зависимости от выбора пользователя сортируем и форматируем по данным
if (b_id.Checked=true) then SortGrid(0) else SortGrid(1);
StringGrid1.AutoSizeColumn(0);StringGrid1.AutoSizeColumn(1); StringGrid1.AutoSizeColumn(2);  

3. ಬಳಕೆದಾರ ಮತ್ತು ಅವರ ಅಧಿವೇಶನ ಸಂಖ್ಯೆಯೊಂದಿಗಿನ ಸಾಲಿನ ಮೇಲೆ ಕ್ಲಿಕ್ ಮಾಡುವ ಮೂಲಕ ನೇರವಾಗಿ ಸಂಪರ್ಕಿಸುವುದು:

  id:=(StringGrid1.Row);// узнаем номер строки  IntToStr(StringGrid1.Row)
  ids:=StringGrid1.Cells[2,id]; //получаем идентификатор rdp
  cmdline:='/c mstsc /shadow:'+ ids; //и подключаемся....
 if (b_rdp.Checked=True) then  if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1) =0 then;       

4. ರೇಡಿಯೋ ಬಟನ್ ಕ್ಲಿಕ್ ಮಾಡುವ ಮೂಲಕ ವಿಂಗಡಿಸುವುದು ಮತ್ತು ಬಳಕೆದಾರರಿಗೆ ಅಥವಾ ಎಲ್ಲಾ ಬಳಕೆದಾರರಿಗೆ ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸುವಂತಹ ಒಂದೆರಡು ಹೆಚ್ಚಿನ ಅಲಂಕಾರಗಳನ್ನು ಮಾಡಲಾಯಿತು.

WinServer 2012R2 ನಲ್ಲಿ RDP ಬಳಕೆದಾರರ ಅವಧಿಗೆ ನಿರ್ವಾಹಕರಲ್ಲದವರ ಮಾನವ ನೆರಳು ಸಂಪರ್ಕಕ್ಕಾಗಿ ಉಪಯುಕ್ತತೆ

→ ಪೂರ್ಣ ಮೂಲ ಕೋಡ್ ಅನ್ನು ನೋಡಬಹುದು ಇಲ್ಲಿ

III. AdminLink ಬಳಸುವುದು - ನಾನು ಕಂಡದ್ದು:

AdminLink ಉಪಯುಕ್ತತೆಯ ಸ್ಥಳಕ್ಕೆ ಲಿಂಕ್ ಮಾಡುವ ಶಾರ್ಟ್‌ಕಟ್ ಅನ್ನು ರಚಿಸುತ್ತದೆ. ಅಡ್ಮಿಲಾಂಚ್.ಎಕ್ಸ್, ಮತ್ತು ಲಾಂಚರ್ ಉಪಯುಕ್ತತೆಯ ವೈಯಕ್ತಿಕ ಪ್ರತಿ ಅಡ್ಮಿರನ್.ಎಕ್ಸ್ ಇದು ಬಳಕೆದಾರ ಫೋಲ್ಡರ್‌ನಲ್ಲಿದೆ, ಉದಾಹರಣೆಗೆ ವಶ್ಯ, ಪ್ರಕಾರದ ಪ್ರಕಾರ ಸಿ: ಬಳಕೆದಾರರುವಾಸ್ಯವಿಂಡೋಸ್ಸಾಮಾನ್ಯವಾಗಿ, ಎಲ್ಲವೂ ಅಷ್ಟು ಕೆಟ್ಟದ್ದಲ್ಲ: ನಿಮ್ಮ ಸ್ವಂತ ನಿರ್ವಾಹಕರ ಮನಸ್ಸಾಕ್ಷಿಯನ್ನು ತೆರವುಗೊಳಿಸಲು ನೀವು ಶಾರ್ಟ್‌ಕಟ್ ಫೈಲ್ ಮತ್ತು ಇತರರಿಗೆ ಪ್ರವೇಶ ಹಕ್ಕುಗಳೊಂದಿಗೆ ಆಟವಾಡಬಹುದು.

ಮೂಲ: www.habr.com

DDoS ರಕ್ಷಣೆ, VPS VDS ಸರ್ವರ್‌ಗಳೊಂದಿಗೆ ಸೈಟ್‌ಗಳಿಗೆ ವಿಶ್ವಾಸಾರ್ಹ ಹೋಸ್ಟಿಂಗ್ ಅನ್ನು ಖರೀದಿಸಿ 🔥 DDoS ರಕ್ಷಣೆ, VPS VDS ಸರ್ವರ್‌ಗಳೊಂದಿಗೆ ವಿಶ್ವಾಸಾರ್ಹ ವೆಬ್‌ಸೈಟ್ ಹೋಸ್ಟಿಂಗ್ ಅನ್ನು ಖರೀದಿಸಿ | ProHoster