如何创建C#一个简单的代理?如何创建C#一个简单的代理?(How to create a simpl

2019-06-17 09:44发布

我已经下载Privoxy的几个星期前,为了好玩我很好奇,想知道如何它的一个简单的版本可以做到的。

我知道我需要配置浏览器(客户)发送请求到代理。 代理发送请求到web(让说这是一个HTTP代理)。 代理将获得答案...但如何才能代理发送回请求浏览器(客户端)?

我在网络上搜索C#和HTTP代理上,但还没有发现,让我明白它是如何工作的幕后正确的东西。 (我相信我不想一个反向代理,但我不知道)。

请问你们有一些解释或一些信息,这将让我继续这个小项目?

更新

这是我的理解(见下图)。

第1步我配置客户端(浏览器)的所有要求,在港口代理听被发送到127.0.0.1。 通过这种方式,请求将不会被发送到Internet直接,但会由代理进行处理。

第二步代理看到一个新的连接,读取HTTP头,看看他必须执行请求。 他执行请求。

第三步代理收到请求的应答。 现在,他必须把从网络到客户端,但怎么回答???

有用的链接

颏代理 :我发现这个项目是一个代理(但更多的,我想)。 我可能会检查源,但我真的想一些基本的东西,了解更多的概念。

ASP代理 :我也许能在这里也得到一些信息。

请求反射器 :这是一个简单的例子。

这里是一个Git的中心资源库和简单的HTTP代理 。

Answer 1:

你可以建立一个与HttpListener类侦听传入请求和HttpWebRequest类来中继请求。



Answer 2:

我不会使用HttpListener或类似的东西,那样你会遇到很多问题。

更重要的是这将是一个巨大的痛苦,以支持:

  • 代理保持活动
  • SSL是不行的(以正确的方式,你会得到弹出窗口)
  • .NET库严格遵循这会导致某些请求失败的RFC(即使IE,FF和世界上其他任何浏览器将工作)。

你需要做的是:

  • 监听TCP端口
  • 解析浏览器请求
  • 提取主机连接到TCP级别的主机
  • 转发一切来回,除非你想添加自定义页眉等。

我写了2个不同的HTTP代理服务器在.NET中有不同的要求,我可以告诉你,这是做到这一点的最好办法。

颏这样做,但他们的代码是“代表意大利面条”,除了转到更糟:)



Answer 3:

我最近写的轻量代理在使用C#.NET 的TcpListener和TcpClient的 。

https://github.com/titanium007/Titanium-Web-Proxy

它支持安全HTTP的正确方式,客户端机器需要信任由代理使用的根证书。 同时还支持WebSockets的继电器。 HTTP 1.1的所有功能,除了流水线的支持。 流水线是不被大多数现代浏览器反正。 也支持Windows认证(普通纸,消化)。

您可以通过引用项目挂钩您的应用程序,然后查看和修改的所有流量。 (请求和响应)。

至于表现,我已经测试它在我的机器和工作没有任何明显的延迟。



Answer 4:

代理可以通过以下方式工作。

第一步,配置客户端使用的ProxyHost:proxyPort。

代理服务器是在ProxyHost的监听TCP服务器:proxyPort。 打开浏览器使用代理连接并发送HTTP请求。 代理解析这一请求,并尝试检测“主机”头。 这头会告诉代理,这样打开连接。

步骤2:代理打开连接于“主机”报头中指定的地址。 然后将其发送HTTP请求发送到该远程服务器。 读取响应。

第3步:响应从远程HTTP服务器读出后,发送代理通过与浏览器的较早打开的TCP连接的响应。

它用图解的将是这样的:

Browser                            Proxy                     HTTP server
  Open TCP connection  
  Send HTTP request  ----------->                       
                                 Read HTTP header
                                 detect Host header
                                 Send request to HTTP ----------->
                                 Server
                                                      <-----------
                                 Read response and send
                   <-----------  it back to the browser
Render content


Answer 5:

如果你只是希望拦截流量,您可以使用小提琴手核心创建一个代理...

http://fiddler.wikidot.com/fiddlercore

与UI来看看它运行小提琴手第一,它是一个代理,允许你调试HTTP / HTTPS流量。 这是写在C#中,有哪些你可以建立到您自己的应用的核心。

请记住FiddlerCore是不是免费的商业应用。



Answer 6:

事情已经成为OWIN和的WebAPI真的很容易。 我在寻找一个C#代理服务器,我也遇到了这个职位http://blog.kloud.com.au/2013/11/24/do-it-yourself-web-api-proxy/ 。 这将是我走的道路。



Answer 7:

同意邪恶博士如果您使用HTTPListener你将有很多问题,你必须解析请求,并且将参与到页眉和...

  1. 使用TCP监听听浏览器请求
  2. 仅解析请求的第一行,并得到主机的域名和端口连接
  3. 发送确切的原始请求的发现主机上的浏览器请求的第一行
  4. 接收来自目标站点的数据(我有问题,在本节)
  5. 发送从主机接收到浏览器的精确数据

你看你不需要知道什么是浏览器请求并解析它,只能从第一行第一行的目标网站的地址通常喜欢这个GET http://google.com HTTP1.1或CONNECT facebook.com: 443(这是SSL请求)



Answer 8:

SOCKS4是一个非常简单的协议来实现。 你听初始连接,连接到客户端所请求的主机/端口,成功代码发送到客户端然后在插座传出和传入数据流进行转发。

如果你使用HTTP去你必须阅读和可能的设置/删除一些HTTP头,这样有点更多的工作。

如果我没有记错,SSL将通过HTTP和SOCKS代理工作。 对于HTTP代理,则执行CONNECT动词,如上所述,那么客户端打开整个代理TCP流中的SSL连接,其工作原理非常类似于SOCKS4。



Answer 9:

该浏览器连接到代理,以便代理从Web服务器获取数据通过浏览器发起的代理相同的连接刚刚发。



文章来源: How to create a simple proxy in C#?