咁大家要公道少少,人同自己背景相近嘅人共情好合理啫
當年爆武肺支那人咪一樣擺撐警共匪李文亮上神檯 :golden-agree:
https://webcache.googleusercontent.com/search?q=cache:https://pincong.rocks/question/20551
我想开发一个VPNapp,该从哪些编程语言入手?
我是某开源代理软件的开发者组成员,我说一点实际的吧,上面的评论基本上泛泛而谈
1.首先你需要一个开源的事件驱动的多线程网络库,这是高并发的关键,一般使用C/C++/go,现在可选的主要有libuv(最快),libev, libevent, ACE, Boost.asio,当然golang在语言层级就已经支持异步操作。
加密库,这个其实就两种,openssl,libsodium,golang标准库自带
序列化库,用于配置解析,例如protobuf,cjson,fastjson等
4.一些基础infra和算法:你应该熟悉分页内存池,动态数组,哈希表,红黑树,b+树,双端缓冲队列,因为有时候开源库里面或者语言自带这些容器和结构,但你得知道怎么用。路由算法方面(实现PAC机制)你应该会哈希表和trie树以及b+树,用来快速路由数据包里面的目的ip
5.协议,不建议自建协议,但是你需要自己实现现有的协议,因为现有代理软件的开发者据我所知没有把自己协议封装成库的
以上针对服务端,以下针对客户端:
最后, 不要觉得自己可以把上面全部掌握完,多多使用开源库。
具体细节,可以在回复里问题
我觉得你们吓到楼主了。。。
我给个思路,不说具体的
首先,我翻墙的主要用途是浏览器。那么浏览器如何翻墙呢?设置代理!
第二个问题,浏览器支持哪些代理方式?socks5 和 http代理!而且http代理优先,因为socks5代理很多软件不支持。而且windows默认只能http代理,不支持socks5.
既然浏览器默认不支持自定义的代理协议,为什么我们要去研发自己的协议呢?
第三个问题,为什么把代理地址为什么是127.0.0.1 这样的本地地址,而不是直接填写远程服务器地址?
关键来了:因为不论是http代理还是socks5代理,都是明文。。。
如果是http代理,每次都要发CONNECT请求【类似POST和GET】
socks5也是一样的,参考RFC文档
所以部署在本地,然后由客户端加密以后发给远程服务器。
第四个问题,客户端和服务端通信,为什么要走https?
实际上,我觉得不需要,因为协议其实跑在TLS上,对于第三方而言,它完全没法知道这个是https
https交互过程
客户端 和 服务端 建立 TCP连接
客户端 和 服务端 建立 TLS连接
客户端 和 服务端 开始HTTP报文
所以,对于第三方来讲只能看到这里在TLS通信,看不到TLS里的内容,自然也就没法知道是https协议了
第五个问题,既然为了保密一定要用TLS,我该学习什么呢?
不要学习这么多,为难你自己。你只要下载一个openssl或者boringssl,
学习ssl_connect,ssl_accept,ssl_write,ssl_read 四个api就可以了。。。
包教包会,别无聊去看源码。看下上面四个api的demo,足以学会TLS使用了!!!
第六个问题,说了这么多,翻墙软件怎么写呢?
翻墙过程如下
你的浏览器 ---socks代理---> 翻墙客户端---tls---> 翻墙服务端 ---> 你的目标网站
正常人应该发现我们要做的是什么了,对,实现 socks5 over TLS!
网上搜索 socks5 over TLS,刚好发现了一堆开源项目!随便学习,你想学什么语言都可以了。。。
翻墙客户端,功能就是把socks5协议转成TLS或基于TLS的协议【比如https】,做了一个协议中转的功能。【自己读了下,发现不严谨,但是大概意思没错了】
翻墙服务端,功能就是代理了。发收到的代理请求转发实现。
压根用不到libuv,libev这些。更加不可能去hook 系统的socket,写内核,写驱动。。。
写机场是另外一回事了
也不用学习红黑树,内存分页。。。纯无聊,我们是造轮子,不是造钉子!
第七个问题,PAC又是什么东西?
PAC是一个配置文件,告诉浏览器,那些需要走代理,哪些不需要走代理。。。
完全跑在浏览器或者客户端上,服务端是不需要走PAC的!
这个问题有点复杂,你就当不知道pac的存在吧。也就是都走代理模式。。。。
没有安全意识的人,不要不配置pac!
没有安全意识的人,不要不配置pac!
没有安全意识的人,不要不配置pac!
第八个问题,为什么我写的翻墙软件会被封掉?
浏览器访问一个网站,比如www.google.com,需要先向DNS询问IP地址
DNS查询是明文的!
封掉你的逻辑是这样的
1.你翻墙以后,浏览器浏览google,浏览器不认识google,所以向dns查ip地址
2.共产党截获了你的电脑的请求,给了一个不存在的ip,6.6.6.6
3.你的浏览器告诉 你的翻墙软件,说你要访问6.6.6.6
4.翻墙软件把你的请求,转发给了6.6.6.6,然后你就上不了网!
解决办法,你必须保证自己的DNS是安全的!
也就是DNS over TLS,或者DNS over HTTPS
第九个问题,如何配置DNS 为 DNS over TLS?
去https://developers.cloudflare.com/1.1.1.1/dns-over-https/cloudflared-proxy/
根据教程,配置cloudflared
然后把DNS地址设置成127.0.0.1,你就安全了!!!