1 По безопасности : Можно использовать VPN ... (Упрятав простой но не безопасный сервис внутри защищенной сети )
Кстати а можно ли используя VPN параллельно иметь доступ к ресурсам обычного интернета или нужен некий специальный шлюз ?)
2
Задача сделать "интернет" без серверов
Мой пост "с картинками" смотрел ?
Именно это и делает мой гибрид сервера и браузера : Создает "виртуальный сервер" строит помощью системы встроенных скриптов веб-интерфейс для веб-приложения который "не отходя от кассы" используется во встроенном браузере.
Может показаться, что это "самоедский цикл" годный только для "локального" веб-приложения. Однако это не так!
Суть в том, что сервер при всей своей "виртуальности" может быть доступен глобально (При нормальном "внешнем" IP ).
То есть одно веб-приложение может управлять целым кластером серверов разбросанных по всему интернету, а те вовсю очередь слать запрос этот конкретный сервер .
(Кстати, простейшая защита все-же уже присутствует в виде возможности использовать нестандартный порт вместо 80-го)
"Дальше больше" поскольку сервер полностью "свой в доску" его можно заставить делать, что угодно (У меня он умеет выполнять внешние утилиты, рисовать графику, использовать БД и тд ... Разумеется все это должно быть описано в "сервером скрипте" ... а часть потенциально опасных действий вообще доступна только при описании их в "белом списке" редактирование, которого по замыслу доступно только оффлайн. Но прикол в том,, что сам северный скрипт вполне можно сделать загружаемым или редактируемым в он-лайн ! ).
Как пример вот мой старый скрипт генерации страницы "теста графики".
(То есть где-то есть простой файл конфигурации где есть вот такая сточка :
N :"Тест графики " ID:"pageGraph001" NBP :"gr001.htm" NFS :"gr001.pas" OP :"[REM]//Построить график //[OPTION]//A=1//B=PIC.JPG////"
и при обращении
http://<адрес сервера>/pageGraph001 выполняется скрипт Скрипт ''Тест графики '' )
Собственно скрипт ...
- Код: Выделить всё
(*SEdit*********************************
Генерация 2
Скрипт ''Тест графики ''
VN:"Ap_FIL" REM:"Запрос" NZ:"index.htm"
VN:"Ap_ZAP" REM:"Расширенный запрос " NZ:""
VN:"ADV_URL" REM:"Расширение адреса" NZ:""
VN:"BPage" REM:"Фон" NZ:"F.htm"
VN:"POpt" REM:"Опции" NZ:"Var_A=' FFF';"
//****************************************)
// Скрипт ''Тест графики ''
Var
REZ,FP:String;
Ap_FIL:String;
Ap_ZAP:String;
ADV_URL:String;
BPage:String;
SavZP:String;
Procedure WL(S:String);
begin
REZ:= REZ+S+#13+#10;
end;
Procedure HR(Tx,url:String);
begin
WL('<a href="'+URL+'">'+TX+'</a>');
end;
Procedure BT(Tx,url:String);
begin
WL('<input type="submit" value="'
+TX+'"onclick=' +#39+ 'document.location = "'
+ADV_URL+URL+'"'+#39+' >');
end;
Procedure BT2(Tx:String);
begin
WL('<input type="submit" value="'+TX+'" >');
end;
Procedure INP(ID,VL:String);
begin
WL( ID+' <input type="text" name="memo" value="'+VL+'" >');
end;
Procedure INP_PSW(ID,VL:String);
begin
WL(ID+' <input type="password" name="psw" value="'+VL+'" >');
end;
Procedure BR;
begin
WL( '<br>');
end;
Type
Real= Double;
//Const pI:Double=3.14;
Var
v11,v12,v13,v21,v22,v23,v32,v33,v43,
screen_dist:real;
C1:real;c2:Real;
///var p, i,j,k,iu,ju,ku, x,y,s,shag:Real;
procedure Persp(x,y,z:Real;var XX,YY:Real);
var
xe,ye,ze:real;
begin
xe:=v11*x+v21*y;
ye:=v12*x+v22*y+v32*z;
ze:=v13*x+v23*y+v33*z+v43;
XX:=Screen_dist*xe/Ze+c1;
YY:=Screen_dist*ye/Ze+c2;
end;
Var vx,vy,Color:Integer;
Procedure dw(x,y,z:real);
var xx,yy: Real;
x1,y1:Integer;
begin
persp(x,y,z,xx,yy);
{x1:=Round(XX*50);Y1:=Round(yy)*50;}
x1:=10+trunc(XX*50);Y1:=10+trunc(yy*50);
DrawOnIMG('W12','LINE',IntToStr(x1 div 2)+','+IntToStr(y1 div 2)+','+IntToStr(vx div 2)+','+IntToStr(vy div 2));
//msg(IntToStr(x1)+','+IntToStr(y1)+IntToStr(vx)+','+IntToStr(vy));
//line(X1,y1,vx,vy,Color);
vx:=x1;vy:=y1;
end;
Procedure Mw(x,y,z:real);
var xx,yy: Real;
x1,y1:Integer;
begin
persp(x,y,z,xx,yy);
vx:=10+trunc(XX*50);vY:=10+trunc(yy*50);
end;
procedure cof(Rho,theta,phi:real);
var
ph, th,costh,sinth,cosph,sinph,Factor:real;
begin
Factor:=pi/180;
th:=theta*factor; ph:=phi*factor;
Costh:=cos(th); sinth:=Sin(th);
Cosph:=cos(ph); sinph:=Sin(ph);
v11:= -sinth;v12:=-cosph*costh;v13:=-sinph*Costh;
v21:=costh; v22:=-cosph*Sinth; v23:=-sinph*sinth;
v32:=sinph; v33:=-Cosph;
v43:=rho;
end;
procedure drawKub( Rho,theta,phi:real);
//const h=20;
var
H:Integer;
begin
h:=50;
mw(h,-h,-h);dw(h,h,-h);
dw(-h,h,-h);
dw(-h,h,h);
dw(-h,-h,h);
dw(h,-h,h);
dw(h,-h,-h);
mw(h,h,-h);dw(h,h,h);
dw(-h,h,h);
mw(h,h,h);dw(h,-h,h);
mw(h,-h,-h);dw(-h,-h,-h);
dw(-h,h,-h);
mw(-h,-h,-h);dw(-h,-h,h);
end;
procedure draw3(XZ:integer);
var p, i,j,k,iu,ju,ku, x,y,s,shag:Real;
begin
screen_dist:=4;
J:=30;k:=70;
Ju:=30;ku:=70;
i:=100; iu:=200;
Shag:=4;
cof(i+xZ,j-xz,k+xz);
//cof(i+8,j,k);
mw(0,0,50);dw(0,0,0);
mw(50,50,50);dw(-50,-50,50);
mw(-50,50,50);dw(50,-50,50);
p:=0; S:=pi/(2+Rnd(6));
while P<2*pi do begin
mw(0,0,0);dw(20*Cos(p),20*Sin(p),-25+rnd(15));
p:=P+s;
end;
p:=0;x:=0; S:=pi/(2+Rnd(6));
mw((x+20)*Cos(p),(x+20)*Sin(p),-25+x/2);
while P<4*pi do
begin
Color:=Rnd(15);
X:=x+3;
dw((X+20)*Cos(p),(x+20)*Sin(p),-25+x/2);
p:=P+s;
end;
drawKub(i,j,k);
//drawKub(100,1,1);
end;
var
S:String;
X,y:Integer;
begin
C1:=4.5;c2:=3.5;
rez:='';
Ap_FIL:= GetParam('Ap_FIL');
Ap_ZAP:= GetParam('Ap_ZAP');
ADV_URL:= GetParam('ADV_URL');
SavZP:= GetParam('SavZP');
SetParam('SavZP',REZ);
//rez:=R_LoadText('f1.htm')+ REZ+ R_LoadText('f2.htm');
br;br;br;
//----------------------------
//Тут размещается основной код
WL('<html>');
WL('<script language="javascript">');
WL(' function timer11(_data_){');
WL(' document.location = "pageGraph001" ');
WL(' }</script>');
WL('<body onload='+#39+'setInterval("timer11()",1500);'+#39+'>');
//'+#39+'document.location = "'+ADV_URL+'pageLLL"'+#39+'
WL( ' Уже работает ... ');
If ExecUtil('Load_WC.ex') then
WL('<img src='+#39+'K.jpg'+#39+' alt='+#39+'Logo'+#39+' id='+#39+'logo'+#39+' style="width: 30%; height: 30%;"<br><br>')
else
WL('<img src='+#39+'http://91.237.244.6/files/image.jpg?dummy=1445094378184'+#39+' alt='+#39+'Logo'+#39+' id='+#39+'logo'+#39+' style="width: 30%; height: 30%;"<br><br>');
br;br;
WL('<center>');
WL('<B>Окно в мир графики ..</B>');br;
br;
WL('<img src='+#39+'K1.jpg'+#39+' alt='+#39+'Logo'+#39+' id='+#39+'logo'+#39+' style="width: 60%; height: 40%;"<br><br>')
WL('</center>');
WL(' </body>');
WL('</html>');
NewIMG('W12',320,200)
LoadIMG('W12','K0.JPG');
//DrawOnIMG('W12','CLEAR','');
//DrawOnIMG('W12','RectANGLE','1,1,50,50');
DrawOnIMG('W12','SetCOLoR','$F1010');
DrawOnIMG('W12','FRAME','1,1,50,50');
DrawOnIMG('W12','ELLIPSE','1,1,50,50');
DrawOnIMG('W12','SetBrCOLoR','$FF');
DrawOnIMG('W12','FillRect','1,1,20,20');
DrawOnIMG('W12','SetBrCOLoR','$ffffFF');
X:=25-RnD(50); Y:=25-RnD(50);
DrawOnIMG('W12','LINE','25,25,'+IntToStr(25+x)+','+IntToStr(25+x));
X:=StrToInt(GetParam('X')); If X>25 then X:=0;
DrawOnIMG('W12','LINE','25,25,'+IntToStr(25+x)+',0');
SetParam('X',IntToStr(X+3));
DrawOnIMG('W12','outText','25,25,'+IntToStr(25+x));
draw3(X);
SaveIMG('W12','K1.jpg',true,true);
DeleteIMG('W12');//!!!!
//-------------------------------
BPage:= R_LoadText(GetParam('BPage'));
BPage:=StrReplace(BPage,'PAGE_NAME','Тест 999');
rez:=StrReplace(BPage,'<ZZZ>',REZ);
SetParam('OUT',REZ);
end.
Что делает скрипт ?
Генерирует страничку для сервера в которой показывает кадр с веб-камеры + рисует на картинке что-то вроде кадра 3д-анимации
(В страничку встроен скрипт который тупо перезагружает ее по таймеру каждые полторы секунды )