Azureред рдкреЛрд░реНрдЯ 80 рдкрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди

рд╡рд┐рдВрдбреЛрдЬ рдПрдЬрд╝реНрдпреЛрд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреЛрд░реНрдЯ рдкрд░ рдбрд┐рдмрдЧ рдЕрд╕реЗрдВрдмрд▓реА рдЪрд▓рд╛рдиреЗ рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЬрдм рд╣рдордиреЗ рдХреНрд░реЙрд╕-рдбреЛрдореЗрди AJAX рдХреЛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдбрд┐рдмрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддреАрд╡реНрд░ рд╣реЛ рдЧрдИред рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ js рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкрд╛рда рдореЗрдВ рдПрдХ рдирд┐рд░рдкреЗрдХреНрд╖ URL рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рдореЗрдВ URL рдореЗрдВ рдкреЛрд░реНрдЯ рдирдВрдмрд░ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛: http://127.0.0.1:81/bla-bla-blaред рдЬрдм рдЖрдк рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдкреЛрд░реНрдЯ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдбреЗрдлрд╝рдмреНрд░рд┐рдХреЗрдЯ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЕрд╕реЗрдВрдмрд▓реА рдкреЛрд░реНрдЯ 81 рдкрд░ рд╢реБрд░реВ рд╣реЛред рд╕рдВрдпрдо рд╕реЗ рдХреАрдорддреА рд╕рдордп рд▓рдЧрд╛, рдЬрд▓рди рдмрдврд╝ рдЧрдИред

рдПрдХ рдмрд┐рдВрджреБ рдкрд░, рдзреИрд░реНрдп рднрд╛рдЧ рдЧрдпрд╛ рдФрд░ рд╣рдордиреЗ рдПрдХ рдкреЛрд░реНрдЯ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдпрд╣ рдПрдХ ASPX рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЪрд▓ рд░рд╣реЗ рдПрдЬрд╝реНрдпреЛрд░ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдЗрд╕ рдмрд╛рдд рдХреА рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЕрдм рдХреМрди рд╕рд╛ рдкреЛрд░реНрдЯ рдЕрдЬрд╝реВрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИред



рдкреНрд░реАрд╕реЗрдЯ



рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЬрдиреНрдо рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА рдЬреИрд╕реЗ рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдЖ рдерд╛ рддрд╛рдХрд┐ Azure рдЙрджрд╛рд╣рд░рдг azureproxy.com рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо IIS 7.5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрднреА рднреА рдорд╢реАрди рдкрд░ рдЪрд▓рддрд╛ рд╣реИред

IIS рдкреНрд░рдмрдВрдзрдХ рдореЗрдВ, AzureProxy рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреВрд▓ рдЬреЛрдбрд╝реЗрдВ

рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреВрд▓ рдЬреЛрдбрд╝рдирд╛

рд╣рдо .Net рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдЪреМрдереЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВред

рдФрд░ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЛ рдЬреЛрдбрд╝реЗ

рд╕рд╛рдЗрдЯ рдЬреЛрдбрд╝рдирд╛

рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рд╕рд╛рдЗрдЯ "AzureProxy", рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреВрд▓ "AzureProxy" рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рднреМрддрд┐рдХ рдкрде рдХреЛрдИ рднреА рд╣реИ (рдпрд╣рд╛рдВ D: \ AzureProxy \)ред рдЖрдкрдХреЛ рдмрд╛рдзреНрдпрдХрд╛рд░реА рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛: рдЖрдИрдкреА рдкрддрд╛ - 127.0.0.1, рдкреЛрд░реНрдЯ - 80, рд╣реЛрд╕реНрдЯрдирд╛рдо - azureproxy.com ред

рд╣рдореЗрдВ IIS рдХреЗ рд▓рд┐рдП Url Rewrite рдореЙрдбреНрдпреВрд▓ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ www.iis.net/download/URLRewrite рдкрд░ рдЬрд╛рдХрд░ рдЗрд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрдЧрд▓рд╛ рдХрджрдо рдореЗрдЬрдмрд╛рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ azureproxy.com рдЬреЛрдбрд╝рдирд╛ рд╣реИред

рд╕рдВрдкрд╛рджрдХ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓реЗрдВ: C: \ Windows \ System32 \ driver \ etc \ рдореЗрдЬрдмрд╛рди рдФрд░ рдЗрд╕рдореЗрдВ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ

127.0.0.1 azureproxy.com





рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдкреНрд░реЛрдЧреНрд░рд╛рдо



рдпрд╣ рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ 2010 рдЦреЛрд▓рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред

рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ

рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ - ASP .NET рд░рд┐рдХреНрдд рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рд╢реЗрд╖ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред

Web.Config рдлрд╝рд╛рдЗрд▓ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ

<? xml version ="1.0" ? >

< configuration >

< system.web >

< compilation debug ="true" targetFramework ="4.0" />

< pages enableViewStateMac ="false" />

</ system.web >

< system.webServer >

< modules runAllManagedModulesForAllRequests ="true" >

< add name ="AzureProxyModule" type ="AzureProxy.AzureProxyModule, AzureProxy" />

</ modules >

< rewrite >

< rules >

< rule name ="All" stopProcessing ="true" >

< match url ="^(.*)$" />

< action type ="Rewrite" url ="/Default.aspx?url={HtmlEncode:{R:0}}" />

</ rule >

</ rules >

</ rewrite >

</ system.webServer >

</ configuration >



* This source code was highlighted with Source Code Highlighter .








рдПрдХ рдирдпрд╛ рд╡реЗрдм рдлрд╝реЙрд░реНрдо рдЬреЛрдбрд╝реЗрдВ

рдирдпрд╛ рд╡реЗрдм рдлрд╝реЙрд░реНрдо

Default.aspx рдирд╛рдо

рдФрд░ рд╣рдо рдЙрд╕рдореЗрдВ рд╣реА рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AzureProxy.Default" %>









рдЖрдЧреЗ рд╣рдо рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ

рдирдпрд╛ рд╡рд░реНрдЧ

рдирд╛рдо AzureProxyModule.cs рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ



using System;

using System.Net;

using System.IO;

using System.Configuration;

using System.Collections. Generic ;

using System.Linq;

using System.Web;

using System.Threading;



namespace AzureProxy

{

public class AzureProxyModule : IHttpModule

{



const string Domain = "127.0.0.1" ;

const int MaxPort = 110;



public static string Port = "" ;

public Queue< int > ports = new Queue< int >();

public List <Thread> threads = new List <Thread>();

public bool ThreadsLive = false ;



public AzureProxyModule()

{

}



public String ModuleName

{

get { return "AzureProxyModule" ; }

}



public void Init(HttpApplication httpApp)

{



httpApp.BeginRequest +=

new EventHandler( this .OnBeginRequest);



httpApp.EndRequest +=

new EventHandler( this .OnEndRequest);

}



public void OnBeginRequest( object o, EventArgs ea)

{

}



public void OnEndRequest( object o, EventArgs ea)

{

HttpApplication httpApp = (HttpApplication)o;

if (Port.Length == 0)

{

SearchPort();

}



DoRequest();



}



public void DoRequest()

{



byte [] buffer = new byte [4096];

HttpContext ctx;

ctx = HttpContext .Current;

if (ctx.Request.QueryString[ "url" ] == null ) return ;



HttpWebRequest myHttp = (HttpWebRequest)HttpWebRequest.Create( "http://" + Domain + ":" + Port + ctx.Request.RawUrl.ToString());

myHttp.AllowAutoRedirect = false ;

myHttp.KeepAlive = true ;

myHttp.CookieContainer = new CookieContainer();

myHttp.UserAgent = ctx.Request.UserAgent;

foreach ( string CookieName in ctx.Request.Cookies.AllKeys)

{

if (ctx.Request.Cookies[CookieName].Domain != null )

{

myHttp.CookieContainer.Add( new Cookie(ctx.Request.Cookies[CookieName].Name, ctx.Request.Cookies[CookieName].Value, ctx.Request.Cookies[CookieName].Path, ctx.Request.Cookies[CookieName].Domain));

}

else

{

myHttp.CookieContainer.Add( new Cookie(ctx.Request.Cookies[CookieName].Name, ctx.Request.Cookies[CookieName].Value, ctx.Request.Cookies[CookieName].Path, Domain));

}

}

myHttp.ContentType = ctx.Request.ContentType;



if (ctx.Request.HttpMethod == "POST" )

{

myHttp.Method = "POST" ;

myHttp.AllowWriteStreamBuffering = true ;

myHttp.ContentLength = ctx.Request.InputStream.Length;

Stream requestStream = myHttp.GetRequestStream();

int length = 0;

while ((length = ctx.Request.InputStream.Read(buffer, 0, buffer.Length)) > 0)

{

requestStream.Write(buffer, 0, length);

}

}



try

{

WebResponse response = myHttp.GetResponse();



if (response.Headers[ "Location" ] != null )

{

ctx.Response.Redirect(response.Headers[ "Location" ]);

}



using ( Stream stream = response.GetResponseStream())

{

using (MemoryStream memoryStream = new MemoryStream())

{

int count = 0;

do

{

count = stream.Read(buffer, 0, buffer.Length);

memoryStream.Write(buffer, 0, count);



} while (count != 0);



ctx.Response.ContentType = response.ContentType;

foreach ( string HeaderKey in response.Headers.Keys)

{

ctx.Response.AddHeader(HeaderKey, response.Headers[HeaderKey]);

}



ctx.Response.BinaryWrite(memoryStream.ToArray());



}

}

}

catch (WebException code)

{

switch (code.Message)

{

case "Unable to connect to the remote server" :

SearchPort();

DoRequest();

break ;

case "The remote server returned an error: (404) Not Found." :

ctx.Response.Status = "404 File Not Found" ;

break ;

}

return ;

}

}



public void SearchPort()

{

Port = "" ;

for ( int port = 81; port < MaxPort; port++)

{

ports.Enqueue(port);

threads.Add( new Thread( new ThreadStart(PortTest)));

}

threads.ForEach( new Action<Thread>(ThreadStart));



while (TreadsIsLive() && (Port.Length == 0))

{

//

}



//

threads.ForEach( new Action<Thread>(ThreadAbort));

}



public void Dispose() { }



public bool TreadsIsLive()

{

ThreadsLive = false ;

threads.ForEach( new Action<Thread>(ThreadTest));

return true ;

}



public void ThreadTest(Thread t)

{

ThreadsLive = ThreadsLive || t.IsAlive;

}



protected void ThreadStart(Thread t)

{

try

{

ThreadsLive = true ;

if (!t.IsAlive) t.Start();

}

catch { }

}



protected void ThreadAbort(Thread t)

{

t.Abort();

}



protected void PortTest()

{

int port;

try

{

port = ports.Dequeue();



HttpWebRequest myHttpWebRequest =

(HttpWebRequest)HttpWebRequest.Create( "http://" + Domain + ":" + port.ToString());

try

{

HttpWebResponse myHttpWebResponse =

(HttpWebResponse)myHttpWebRequest.GetResponse();

Port = port.ToString();

return ;

}

catch { }

}

catch { }

}

}

}



* This source code was highlighted with Source Code Highlighter .








рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдБ рдФрд░ рдЗрд╕реЗ IIS рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ

рдкреНрд░рдХрд╛рд╢рди



Azure рдЕрдм azureproxy.com рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред



рдирд┐рд╖реНрдХрд░реНрд╖



рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рддрдХрдиреАрдХ рдЖрдкрдХреЛ рдПрдХ рд╣реА рдкрддреЗ рд╕реЗ рдПрдЬрд╝реНрдпреЛрд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдПрдХ рдЙрдкрд▓рдмреНрдз рдкреЛрд░реНрдЯ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдмрд╛рд▓ рдЯреНрд░реЗрдбреЛрдВ рдореЗрдВ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдкреЛрд░реНрдЯ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдвреВрдВрдврдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред GET рдФрд░ POST рджреЛрдиреЛрдВ рдЕрдиреБрд░реЛрдз рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИрдВ, рдЖрдиреЗ рд╡рд╛рд▓реА рдзрд╛рд░рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдЬрд╝реНрдпреЛрд░ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред



PS рдпрд╣ рд▓реЗрдЦ AzureProxy рдмрдирд╛рдиреЗ рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдкреВрд░реНрд╡рд╛рднреНрдпрд╛рд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╣рдо рдЖрд╡реЗрджрди рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рдорд╕реНрдпрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред



All Articles