SS5 代理服务器

SS5 是一款linux 下的代理工具,支持SOCKS V4SOCKS V5。官网 介绍说,它支持telnet、ftp、finger、 whois、gohper和 WWW。

Windows 下的纠结

这么好的一个开源代理软件只有linux版,并没有windows版,可能出于某种方面的考虑吧。在面对windows版的需求,我想到第一个就是拿它放到 cygwin 下去编译,发现总是编译不过去,SSL库不支持。对于只要其代理功能的我,看了一遍它的代码,发现其用很多宏,再往深的看发现对于核心代理功能模块并没有特殊的代码,决定自己来移植吧。

Windows 下的移植

对于要移植的代码,最好的就是大面积复用以前的代码,保证功能代码不变。对于此,首先我们就要自己写个入口,作为服务, 你当然也得写成 windows 服务的模式。

#if SERVICEMODE
void main()
{
SERVICE_TABLE_ENTRY ServiceTable[2];
ServiceTable[0].lpServiceName = "Socks Server 5";
ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain;
ServiceTable[1].lpServiceName = NULL;
ServiceTable[1].lpServiceProc = NULL;
StartServiceCtrlDispatcher(ServiceTable);
}
void ServiceMain(int argc, char** argv)
#else
int main(int argc, char **argv, char **envp)
#endif

这里我用一个宏来区分服务模式和调试模式,当然这里最好是用参数来代替,但当初时间紧就没加,不过思路是一样的。对于 windows 的service 程序必须得加些 Service要的东西。

下面就是socket 相关的,但这个不分平台的,只是包含的头文件路径不同而已。再往下就遇到了fork,这个linux 下特色函数,在windows 下也就只有线程来模拟。涉及到线程,如果使用 windows 下自带的线程,那移植的代码量就太多了。网上搜了下,发现 pthread有 windows 版,果断下下来就pthread,自己平时都是写 linux 下的程序,所以pthread 用起来还是蛮亲切的。

再添加核心功能代码,这个也是特别烦,就那么几个文件,看其代码量惊人,但因本人只需要其 Socks v5 的部分,剔掉好多代码,就会发现其代码量并不多。

核心代码理解

对于实现 socks协议的部分我就不多说了,这个可以直接看文档,我只说说ss5代理 是怎么实现的。主要部分一共三个 socket,一个socket 负责发 socks 协议指令的,一个负责与客户端传输数据,最后一个负责远端请求的。SS5ProxyData则是数据交换的中心,剩下的好像也没什么难的了,如果有不理解的地方,请发评论,我会及时解答。

发布

写好程序要发布,这里我使用的是Advanced Installer,把安装软件配置成服务类的程序,再简单的给安装包添加些信息。好了,一个 windows 版 ss5 就出炉了。

结束语

因为代码涉及些特殊业务,就不公布太多了,这里主要谈下思路。写代码最重要的是思路,你要是真编码起来,其实并不难。最后再啰嗦两句,一般说到移植,人们都会想到大量的代码工作,我也有过畏却,但最后狠下心来做的时候,发现也就so so 了,所以在代码界混的人,要有强大的动手能力,这样才能把自己的基本功练扎实。

SS5 windows移植相关推荐

  1. RE2正则表达式库的Windows移植

    RE2库的Windows移植过程如下: 1.从http://code.google.com/p/re2/downloads/list下载最新RE2库(re2-20130802.tgz). 2.解压到当 ...

  2. Socket程序从windows移植到linux下需要注意的

    )头文件 windows下winsock.h或winsock2.h linux下netinet/in.h(大部分都在这儿),unistd.h(close函数在这儿),sys/socket.h(在in. ...

  3. jquery程序 windows移植到linux显示不了,windows程序移植linux

    1,路径名统一用正斜杠"/".(windows下正反斜杠都识别,linux只认正斜杠.) 2,统一使用UTF-8格式编码. vim中无法保存汉字时,可输入下列命令: :set fi ...

  4. 如何在虚拟linux环境运行python_Conda(Python)虚拟环境不能从Windows移植到Linux

    在我的Windows 10计算机上,我使用以下命令创建了一个虚拟环境:>conda env export > environment.yml 我尝试在Windows系统上使用yml文件重新 ...

  5. Socket程序从Windows移植到Linux下的一些注意事项

    关于这个话题网上流传的是一个相同的版本,就是那个第一项是头文件的区别,但后面列出的头文件只有#include没有(估计是原版的在不断转载的过程中有人不小心忘了把尖括号转义,让浏览器当html标记解析没 ...

  6. python 从windows移植到linux后,ImportError:No module named xxxx

    在windows平台上可以正常运行,但是传到linux上运行,报错如下: ImportError: No module named xxxx 请先检查一下各个目录中是否有__init__.py文件,若 ...

  7. Socket 编程 windows到Linux代码移植遇到的问题

    Socket 编程 windows到Linux代码移植遇到的问题 1.一些常用函数的移植 http://www.vckbase.com/document/viewdoc/?id=1586 2.网络 - ...

  8. RethinkDB已经将其数据库移植到Windows

    RethinkDB已经推出了其数据库的Windows版本.该版本耗时一年开发,可以运行在64位Windows操作系统上,目前尚处于Beta测试阶段. \\ 考虑到此次移植所付出的巨大的时间成本,我们采 ...

  9. oracle10g数据库复制,windows 下oracle 10G 数据库移植到 linux平台 (通过文件直接复制方法)...

    windows 下oracle 10G  数据库移植到 linux平台 (通过文件直接复制方法) 最近学习了一下oracle数据库启动原理,于是,就把在windows创建起来做测试的数据库 移植到li ...

最新文章

  1. dropdownlist javascript 取得value text
  2. 2020-11-7( servlet)
  3. 数据结构线性表博客作业总结
  4. HAProxy的日志配置以及ACL规则实现负载均衡
  5. 参加 JSConf China 2019 是怎样的体验?VS Code 和 TypeScript 都很火
  6. LinearLayout和RelativeLayout
  7. 潮流色彩碰撞C4D几何空间!这样的艺术背景素材,设计师都喜欢
  8. android textview 添加阴影效果:Paint.setShadowLayer is not supported
  9. ubuntu搜狗拼音输入法选词框乱码
  10. const T vs. T const ——Dan Saks 【翻译】
  11. qq小程序绑定服务器,QQ小程序 用户信息
  12. mac 网络共享 wifi共享
  13. 【03】品优购电商项目:00-品优购项目代码规范
  14. 微端是什么意思?微端对服务器性能配置要求
  15. 解决JS中出现的兼容性问题
  16. 【Homebrew】Homebrew 介绍与安装
  17. 谷歌生物医学专用翻译_一个可以快速翻译浏览英文文献的工具,拿走不谢!
  18. [CORS:跨域资源共享] 同源策略与JSONP
  19. matlab中求虚数的模,matlab计算带有复数的函数,最后求复数函数的模,结果里面却有...
  20. 内存双通道时代已是大势所趋 双通道原理剖析

热门文章

  1. 特斯拉上海工厂整体工程建设基本完成 将于年底投产
  2. Oracle账号登录
  3. uni-app 获取android相册
  4. 单机版Solr的中文分词器solr IK下载和配置、拓展词典、停用词典
  5. 往数组对象中每一个对象添加一个字段
  6. php mpdf 设置字体,php 使用mpdf实现指定字段配置字体样式的方法,
  7. 生成 lua版本的proto 与使用
  8. 一篇文章了解html
  9. Livox MID-70连接及使用
  10. 【C语言数组】数组的创建和初始化 内存中的存储 冒泡排序 sizeof 数组名