【问题标题】:Proxy server in C#C#中的代理服务器
【发布时间】:2014-12-23 10:41:07
【问题描述】:

我是 C# 网络编程的新手,我想创建一个代理服务器,如果用户超过下载限制,我可以使用它来限制用户连接到互联网。

我当前的配置是 ---- 用户 -> 代理服务器 -> wifi 路由器 -> 互联网。

我到处搜索,发现可以创建 HTTP 代理,但是在 C# 中创建 HTTPS 代理非常困难

即使像 Trotinet 和 mentalis 这样的 c# 库也不支持 HTTPS 代理。

但是我发现JAVA中有很多库,比如支持HTTPS连接的小代理。

那么,是否可以在 C# 中创建功能齐全的代理?还是我应该尝试切换到 JAVA?

还有一个问题。我可以创建一个简单的 TCP 客户端读取它的 networkstearm 并将该流按原样转发到 wifi 路由器,而无需读取它的标头或任何东西,这种方法可以吗?只是一个猜测,对不起菜鸟问题。

谢谢

【问题讨论】:

  • 在回答您是否可以创建 TCP 客户端并读取其流的问题时,是的,您可以这样做,使用名为 TcpClient 的类及其关联的方法 GetStream()。只需创建一个侦听器 AcceptClient(),让一个单独的客户端连接到目标并将侦听流中接收到的所有内容转发到目标流。您仍然需要处理至少一个标头数据包,因此您知道目的地应该是什么。这里有TcpListener和TcpClient的教程tech.pro/tutorial/704/…
  • 我已经做到了,但我面临的问题是 TCPClient 需要一个端口号。 wifi路由器有端口号吗?我在谷歌上搜索,我仍然无法找到我的路由器的端口号。
  • 我认为您可能误解了网络和 TCP 的工作原理。您的网络将为您处理路由。您只需要在图表中描述为“互联网”的点连接到目的地。
  • 我读过那个教程。我现在面临的问题是。 IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3000); 我的路由器地址是 192.168.1.1,如果我给它任何端口号,我会收到一个错误“无法建立连接,因为目标机器主动拒绝它”。
  • 您应该检查 HTTP 请求并从中获取 Host 标头。

标签: java c# networking proxy


【解决方案1】:

回答您的第一个问题:是的,您可以使用 C#(类似于 Fiddler)创建功能齐全的 HTTPS 代理。无需更改为 Java。仅出于测试目的,您可以使用 Fiddler Core。 Fiddler 核心是一个用 C# 编写的完整的 HTTPS 代理。如果您有时间和知识,请通过在提琴手核心上使用反射器进行逆向工程,并对实现有所了解。

Trotinet 上的最后一次提交有一个害羞的 HTTPS pass thru 实现。所以除非你不想解密 https 数据,否则 Trotinet 会是一个不错的选择。

-库马尔

【讨论】: