SS5 windows移植
SS5 代理服务器
SS5 是一款linux 下的代理工具,支持SOCKS V4
和 SOCKS 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移植相关推荐
- RE2正则表达式库的Windows移植
RE2库的Windows移植过程如下: 1.从http://code.google.com/p/re2/downloads/list下载最新RE2库(re2-20130802.tgz). 2.解压到当 ...
- Socket程序从windows移植到linux下需要注意的
)头文件 windows下winsock.h或winsock2.h linux下netinet/in.h(大部分都在这儿),unistd.h(close函数在这儿),sys/socket.h(在in. ...
- jquery程序 windows移植到linux显示不了,windows程序移植linux
1,路径名统一用正斜杠"/".(windows下正反斜杠都识别,linux只认正斜杠.) 2,统一使用UTF-8格式编码. vim中无法保存汉字时,可输入下列命令: :set fi ...
- 如何在虚拟linux环境运行python_Conda(Python)虚拟环境不能从Windows移植到Linux
在我的Windows 10计算机上,我使用以下命令创建了一个虚拟环境:>conda env export > environment.yml 我尝试在Windows系统上使用yml文件重新 ...
- Socket程序从Windows移植到Linux下的一些注意事项
关于这个话题网上流传的是一个相同的版本,就是那个第一项是头文件的区别,但后面列出的头文件只有#include没有(估计是原版的在不断转载的过程中有人不小心忘了把尖括号转义,让浏览器当html标记解析没 ...
- python 从windows移植到linux后,ImportError:No module named xxxx
在windows平台上可以正常运行,但是传到linux上运行,报错如下: ImportError: No module named xxxx 请先检查一下各个目录中是否有__init__.py文件,若 ...
- Socket 编程 windows到Linux代码移植遇到的问题
Socket 编程 windows到Linux代码移植遇到的问题 1.一些常用函数的移植 http://www.vckbase.com/document/viewdoc/?id=1586 2.网络 - ...
- RethinkDB已经将其数据库移植到Windows
RethinkDB已经推出了其数据库的Windows版本.该版本耗时一年开发,可以运行在64位Windows操作系统上,目前尚处于Beta测试阶段. \\ 考虑到此次移植所付出的巨大的时间成本,我们采 ...
- oracle10g数据库复制,windows 下oracle 10G 数据库移植到 linux平台 (通过文件直接复制方法)...
windows 下oracle 10G 数据库移植到 linux平台 (通过文件直接复制方法) 最近学习了一下oracle数据库启动原理,于是,就把在windows创建起来做测试的数据库 移植到li ...
最新文章
- dropdownlist javascript 取得value text
- 2020-11-7( servlet)
- 数据结构线性表博客作业总结
- HAProxy的日志配置以及ACL规则实现负载均衡
- 参加 JSConf China 2019 是怎样的体验?VS Code 和 TypeScript 都很火
- LinearLayout和RelativeLayout
- 潮流色彩碰撞C4D几何空间!这样的艺术背景素材,设计师都喜欢
- android textview 添加阴影效果:Paint.setShadowLayer is not supported
- ubuntu搜狗拼音输入法选词框乱码
- const T vs. T const ——Dan Saks 【翻译】
- qq小程序绑定服务器,QQ小程序 用户信息
- mac 网络共享 wifi共享
- 【03】品优购电商项目:00-品优购项目代码规范
- 微端是什么意思?微端对服务器性能配置要求
- 解决JS中出现的兼容性问题
- 【Homebrew】Homebrew 介绍与安装
- 谷歌生物医学专用翻译_一个可以快速翻译浏览英文文献的工具,拿走不谢!
- [CORS:跨域资源共享] 同源策略与JSONP
- matlab中求虚数的模,matlab计算带有复数的函数,最后求复数函数的模,结果里面却有...
- 内存双通道时代已是大势所趋 双通道原理剖析