如何为c#套接字连接添加代理支持?

时间:2009-09-28 07:03:32

标签: proxy sockets

我有一个套接字应用需要支持SOCKS 4和5代理连接,因为我的用户可能在防火墙后面。我正在使用WPF和C#3.5 SP1。我在代理的默认Socket类中看不到任何选项,我是否必须自己滚动?

如果可能,我宁愿不使用第三方库 - 使用标准C#套接字启用代理支持有多难?

3 个答案:

答案 0 :(得分:2)

这不是很难,但你必须阅读几个RFC。您需要阅读Socks v4,Socks v4a和Socks v5上的RFC规范。我写了一个库,可以为你做所有的工作,但如果你想写自己也很酷。我的图书馆在前一篇文章中提到过(Starksoft)。您可以使用标准TcpClient对象或Socket连接来实现Socks协议。 TcpClient更容易。您只需在连接到代理服务器后立即发送命令。这些命令将指示代理服务器您有兴趣连接到哪个最终端点。还有UDP Socks连接的规格,但听起来你不需要它。

您可以在维基百科上找到所有RFC和生成信息。我不能发布更多,因为这个疯狂的stackoverflow网站限制了我被允许1的超链接数量,因为我不是普通用户。非常烦人。

http://en.wikipedia.org/wiki/SOCKS

最后,如果您愿意,可以删掉我的代码,因为它是在MIT许可下,我让你做那样的事情。 :)看看我的类Socks4ProxyClient.cs,它实现了Socks v4协议。您最感兴趣的方法是位于第282行的SendCommand()。您可以在Google Code上找到我的代码。搜索Starksoft。或者您可以直接访问我的网站,并链接到Google中的源代码。

Socks5的实现有点棘手,有更多的选项需要指定,而且与服务器有点喋喋不休,但基本上与Socks4非常相似。

祝你好运,如果你想学习袜子,你应该自己实施一个解决方案。所以,感谢你!

  • 本顿

答案 1 :(得分:0)

您可以向google询问一些信息。第一个链接之一将引导您到Mentalis.org及其free proxy implementation。他们曾经因其免费网络和安全性而闻名,但项目似乎暂时没有维持。

但无论如何它可能值得一看。

答案 2 :(得分:0)

我知道您说如果可能,您不想使用第三方库,但我想推荐这个http://www.starksoft.com/prod_proxy.html