2011-01-19 2 views
4

Цели проекта:

Создать локальный прокси-Judge с помощью консоли или приложения для Windows Form для отладки и тестирования соединений.
C# с использованием HttpListener и Request.ServerVariables на Windows Forms или Консоли

  1. Проект должен запрашивать и получать прокси-серверные переменные для отображения на стороне клиента.
  2. Parse IPAddress и вернуть состояние анонимности.
  3. Внедрение базовой схемы аэфирования.
  4. проект не должен использовать скрипты для функциональности (например) PHP, Perl, Asp и т.д.
  5. Мультиплатформной Совместимость (possibilty)

alt text


Вопросов:

  1. Можно ли использовать Request.ServerVariables в локальном приложении Windows или Console или он специфичен для ASP?

  2. Если этот метод специфичен для ASP, существует ли другой способ запроса ServerVariables из сеанса браузера?

  3. Если возможен способ выше, то какой подход подходит для достижения этой функциональности?

  4. Что является хорошим примером для проверки/установки базовой схемы аутентификации здесь? Как установка пароля и пользователя для использования и так далее.


Список литературы используется:

http://msdn.microsoft.com/en-us/library/system.web.httpapplication.aspx http://www.java2s.com/Code/CSharpAPI/System.Net/HttpListenerContextResponseStatusCode.htm http://en.cship.org/wiki/ProxyJudge

Пример кода:

using System.IO; 
using System.Net; 
using System.Web; 
using System.Collections.Specialized; 

namespace IPJudge 
{ 
    public class IPJudgeClass : IHttpModule 
    { 
     public static void Main() 
     { 
      using (HttpListener listener = new HttpListener()) 
      { 
       listener.AuthenticationSchemes = AuthenticationSchemes.None; 
       listener.Prefixes.Add("http://localhost:8080/"); 
       //listener.Prefixes.Add("https://localhost/"); 
       listener.Start(); 

       HttpListenerContext ctx = listener.GetContext(); 
       ctx.Response.StatusCode = 200; 
       string name = ctx.Request.QueryString["name"]; 

       StreamWriter writer = new StreamWriter(ctx.Response.OutputStream); 
       writer.WriteLine("<P>Hello, {0}</P>", name); 
       writer.WriteLine("<ul>"); 
       foreach (string header in ctx.Request.Headers.Keys) 
       { 
        writer.WriteLine("<li><b>{0}:</b> {1}</li>", header, ctx.Request.Headers[header]); 
       } 
       writer.WriteLine("</ul>"); 

       writer.Close(); 
       ctx.Response.Close(); 
       listener.Stop(); 
      } 
     } 

     public void Init(HttpApplication app) 
     { 

      app.AcquireRequestState += new System.EventHandler(app_AcquireRequestState); 
      app.PostAcquireRequestState += new System.EventHandler(app_PostAcquireRequestState); 
     } 

     public void app_AcquireRequestState(object o, System.EventArgs e) 
     { 
      HttpApplication httpApp = (HttpApplication)o; 
      HttpContext ctx = HttpContext.Current; 
      ctx.Response.Write(" Executing AcquireRequestState "); 
      ctx.Response.Close(); 
     } 

     public void Dispose() 
     { 
      // TODO: 
      // Add code to clean up the 
      // instance variables of a module. 
     } 

     public void app_PostAcquireRequestState(object o, System.EventArgs e) 
     { 
      HttpApplication httpApp = (HttpApplication)o; 
      HttpContext ctx = HttpContext.Current; 

      string remotehost = ctx.Request.ServerVariables["REMOTE_ADDR"]; 
      string httpuseragent = ctx.Request.ServerVariables["HTTP_USER_AGENT"]; 
      string requstmethod = ctx.Request.ServerVariables["REQUEST_METHOD"]; 
      string httpreferer = ctx.Request.ServerVariables["HTTP_REFERER"]; 
      string HTTPXFORWARDEDFOR = ctx.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 
      string HTTPFORWARDEDFOR = ctx.Request.ServerVariables["HTTP_FORWARDED_FOR"]; 
      string HTTPXFORWARDED = ctx.Request.ServerVariables["HTTP_X_FORWARDED"]; 


      ctx.Response.Write("<P>REMOTE_ADDR: " + remotehost + "</P>"); 
      ctx.Response.Write("<P>HTTP_USER_AGENT: " + httpuseragent + "</P>"); 
      ctx.Response.Write("<P>REQUEST_METHOD: " + httpuseragent + "</P>"); 
      ctx.Response.Write("<P>HTTP_REFERER: " + httpreferer + "</P>"); 
      ctx.Response.Write("<P>HTTP_X_FORWARDED_FOR: " + httpreferer + "</P>"); 
      ctx.Response.Write("<P>HTTP_FORWARDED_FOR: " + httpreferer + "</P>"); 
      ctx.Response.Write("<P>HTTP_X_FORWARDED: " + httpreferer + "</P>"); 
      ctx.Response.Close(); 
     } 
    } 
} 

ответ

1

Ваш код объединяет логику ASP.NET и логику приложения, которая не может/не должна выполняться.

IHttpModule управляет IIS в веб-приложение ASP.NET

Main метод запускается с помощью консольного приложения

Вопросы:

  1. запрос.ServerVariables может быть доступен только на веб-сервере

  2. Метод, который у вас есть (app_PostAcquireRequestState), где вы выводите переменные в поток ответов, - это то, как я это делаю. Но обычно не в HttpModule или в этом конкретном методе. Попробуйте вывести переменные в конец конвейера ASP.NET.

  3. Вы можете включить трассировку в web.config <trace>, которая должна выводить некоторые требуемые переменные.

http://msdn.microsoft.com/en-us/library/6915t83k.aspx

  1. Не уверен, что вы говорите здесь, у вас есть пример кода.
+0

Извините, вы неправильно поняли?. Это ProxyJudge. Таким образом, действия этого приложения состоят в том, чтобы действовать как сервер самостоятельно без специального приложения для веб-сервера и ждать подключения по префиксовому адресу: порт. После установления соединения он отправляет запрос для переменных сервера и возвращает ответ обратно в браузер для проверки. Причина, по которой я использую IhttpModule, - наследовать функциональность извлечения переменных сервера. Также я уже знаю, как работают точки входа в консоль, это класс;) и Web.config не может быть и речи, поскольку IIS не используется. – Nightforce2

+0

Умм единственный пример рабочего кода: Пример кода: http://en.cship.org/wiki/ProxyJudge Надеюсь, что поможет вам понять. :) – Nightforce2

+0

HttpListener - это простой слой над соединением сокета. Вы требуете, чтобы IIS запускал HttpModules. – djeeg

 Смежные вопросы

  • Нет связанных вопросов^_^