SS5 windows移植

SS5 windows移植SS5 代理服务器 SS5 是一款 linux 下的代理工具 支持 SOCKSV4 和 SOCKSV5 官网介绍说 它支持 telnet ftp finger whois gohper 和 WWW Windows 下的纠结这么好的一个开源代理软件只有 linux 版 并没有 windows 版 可能出于某种方面的考虑吧 在面对 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 了,所以在代码界混的人,要有强大的动手能力,这样才能把自己的基本功练扎实。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229062.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午5:33
下一篇 2026年3月16日 下午5:33


相关推荐

  • LoRaWAN节点RTC定时器链表分析

    LoRaWAN节点RTC定时器链表分析LoRaWAN 节点 RTC 定时器链表分析

    2026年3月26日
    1
  • C 多线程编程实战(一)–线程基础

    C 多线程编程实战(一)–线程基础C 多线程编程实战 一 线程基础 1 1 简介多线程 英语 multithreadi 是指从软件或者硬件上实现多个线程并发执行的技术 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程 进而提升整体处理性能 具有这种能力的系统包括对称多处理机 多核心处理器以及芯片级多处理 Chip levelmultith 或同时多线程 Simultaneous

    2026年3月19日
    2
  • 列式数据库_开源列式数据库

    列式数据库_开源列式数据库列式数据库是相对于行式存储的数据库,Oracle、MySQL、SQLServer等数据库都是采用的行式存储(Row-based),而列式数据库是将数据按照列存储到数据库中,这样做的好处是可以大量降低系统的I/O,适合于分布式文件系统,不足在于功能相对有限。典型产品:HBase等。…

    2025年8月21日
    3
  • Address Sanitizer 用法

    Address Sanitizer 用法AddressSanit ASan 是一个快速的内存错误检测工具 这里说明它的用法 参考资料 AddressSanit github com google sanitizers wiki AddressSanit 简介 AddressSanit ASan 是一个快速的内存错误检测工具 它非常快 只拖慢程序两倍左右 比起 Valgrind 快多了 它包括一个编译器 instrumentat 模块和一个提供 malloc free 替代项的运

    2026年3月18日
    2
  • 【SSH学习】

    【SSH学习】什么是SSH?简单说,SSH是一种网络协议(安全外壳协议),用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。SSH之所以能够保证安全,原因在于它采用了公钥加密。整个过程是这样的:(1)远程主机收到用户的登录请求,把自己的公钥发给用户(2)用户使用这个公钥,将登录密码加密后,发送回来。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。SSH基本用法1.SSH远程登陆

    2022年6月24日
    32
  • 正确lua简单的扩展,可以加速相关C++数据。

    正确lua简单的扩展,可以加速相关C++数据。

    2022年1月6日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号