2012-06-19 131 views
1

我正在開發HTTPS代理服務器。它應該是一個控制檯應用程序。我想找一本手冊或範例。我發現很多件或非工作樣品。我嘗試從MSND的SSLStream示例,但未成功。有沒有人有一些經驗或工作的例子?C中的HTTPS代理服務器#

+4

顯示你當前的代碼,而當前的問題,你會得到更好的答案 – BugFinder

+1

爲什麼那麼多那麼用戶私刑新手?這對我來說似乎是一個相關的問題,答案可以在50行左右給出,但很難找到,不需要downvoting。 –

+0

@StevendeSalas我同意你的意見。他們在世界上一直都在鼓勵改變錯誤的方向。 – Mukus

回答

-1

代碼:

using System; 
using System.Text; 
using System.Net.Sockets; 
using System.Net.Security; 

namespace SslTcpClient 
{ 
    public class SslTcpClient 
    { 
     public static void Main(string[] args) 
     { 
      string host = "encrypted.google.com"; 
      string proxy = "127.0.0.1";//host; 
      int proxyPort = 8888;//443; 

      byte[] buffer = new byte[2048]; 
      int bytes; 

      // Connect socket 
      TcpClient client = new TcpClient(proxy, proxyPort); 
      NetworkStream stream = client.GetStream(); 

      // Establish Tcp tunnel 
      byte[] tunnelRequest = Encoding.UTF8.GetBytes(String.Format("CONNECT {0}:443 HTTP/1.1\r\nHost: {0}\r\n\r\n", host)); 
      stream.Write(tunnelRequest , 0, tunnelRequest.Length); 
      stream.Flush(); 

      // Read response to CONNECT request 
      // There should be loop that reads multiple packets 
      bytes = stream.Read(buffer, 0, buffer.Length); 
      Console.Write(Encoding.UTF8.GetString(buffer, 0, bytes)); 

      // Wrap in SSL stream 
      SslStream sslStream = new SslStream(stream); 
      sslStream.AuthenticateAsClient(host); 

      // Send request 
      byte[] request = Encoding.UTF8.GetBytes(String.Format("GET https://{0}/ HTTP/1.1\r\nHost: {0}\r\n\r\n", host)); 
      sslStream.Write(request, 0, request.Length); 
      sslStream.Flush(); 

      // Read response 
      do 
      { 
       bytes = sslStream.Read(buffer, 0, buffer.Length); 
       Console.Write(Encoding.UTF8.GetString(buffer, 0, bytes)); 
      } while (bytes != 0); 

      client.Close(); 
      Console.ReadKey(); 
     } 
    } 
} 

;)

+4

這似乎不是一個服務器,是嗎? ;) –

3

假設你一個正常的HTTPS代理服務器(而不是MITM代理服務器)後的時候,你不需要任何的SSL/TLS代碼在所有。

它所需要的是能夠解釋HTTP CONNECT方法和中繼業務原樣向和從在CONNECT請求(例如CONNECT host.example.org:443)所使用的主機和端口。

相關問題