Socks5代理客户端的C++实现

最近由于要在程序中使用到代理自动切换的功能,接触到了这一块。不过不知道是不是现在科学上网工具太多的原因,找了很久都没找到客户端的c++实现的库。

于是只好自己动手,对Socks5客户端一般性会用到的功能进行了实现。具体的代码可以到这里下载: http://pan.baidu.com/s/1eQBppfW 密码: scfg。

Socks5代理的工作原理是在客户端和代理端之间建立起链路之后,就可以直接使用原有的Socket来进行数据包的收发,整个过程是完全透明的。因此提供的代码的使用方式很简单,通过下面的方式对Socket进行初始化之后就可以像平常一样使用那个Socket了。

下面就是一些技术上的细节了。Socks5协议中需要客户端需要实现的最主要的部分就是连接建立的过程,这个过程以及其他的一些技术细节都是定义在[RFC1928]中的。这篇文档有很多中文翻译版,对细节部分感兴趣的童鞋可以仔细的看看。在制作的时候我则是直接参考的这篇问答,毕竟如果有别人做过的话就完全没有必要自己再去纠结了。

RFC1928中只对Socks5的协议实现部分进行了定义,而关于Socks5的连接建立方式中的验证部分则放到了别的文档中。两种有明确定义的连接建立方式是用户名密码验证[RFC1929]以及GSS-API验证[RFC1961]。其他的验证方式则是预留给将来添加和自定义的,详情可参考[RFC1928]。

GSS-API的验证是一套稍有复杂的密钥交换体系,在一般情况下不会被使用到,所以直接跳过。剩下的用户名密码的验证方式则直参照了文档和这篇文章进行实现。

关于具体某几个字节代表什么意思,在这里就不详细讨论了。代码里面和上面的部分都能看到,个人这段时间的感觉是应该把精力更多的放在程序本身的逻辑实现上,细节上的究竟是无止境的也是不必要的。

以上就是这篇的内容,代码的下载地址在文章前段。直接滚动到最后的童鞋就往前翻看下吧,毕竟文章很短:D

本博客所有内容遵循CC BY-NC-SA 4.0协议, 如有转载,请注明出处。
1条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">