:golden-agree: 屠華滅漢
学习哪些编程语言才能开发VPN的app?
-
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.协议,不建议自建协议,但是你需要自己实现现有的协议,因为现有代理软件的开发者据我所知没有把自己协议封装成库的
以上针对服务端,以下针对客户端:- 首先确立一个观点,客户端只是一个用户交互的界面,所以正确做法是把服务端跨编嵌入你的客户端,作为一个独立进程建立一个本地server,客户端只用管理配置和启停。或者你可以直接把v2ray或shadowsocks-libev编译到你的平台作为core。
- 界面开发,如果你不想一个平台一套代码,可以使用xamarin,如果你想原生,那就原生(建议)
- 分应用代理实现:
android 似乎系统提供了API(我不开发安卓,此条不可信)
IOS, Darwin 没可能
Linux 直接hook系统socket函数,或者写一个内核驱动去filter pid
Windows 最麻烦,win hook现在很容易崩溃,你需要写WFP或者NDIS驱动,并自己买张EV证书签名
最后, 不要觉得自己可以把上面全部掌握完,多多使用开源库。
具体细节,可以在回复里问题
我觉得你们吓到楼主了。。。
我给个思路,不说具体的
首先,我翻墙的主要用途是浏览器。那么浏览器如何翻墙呢?设置代理!
第二个问题,浏览器支持哪些代理方式?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,你就安全了!!!
-
-
清共驅蝗 屠華滅漢 誘導秋海棠賤畜主動協助支那
SeVen • 匿名者 • 0 1 583 -
支持Turkistan Islamic Party在華一切行動,徹底驅逐新疆殖民兵團
SeVen • 匿名者 • • 匿名者 • • 0 2 1118 -
捉鬼時間:支那共產黨用語「一夜回到解放前」有邊D所謂香港民主人士用過?
SeVen • 匿名者 • • 匿名者 • • 0 4 1077 -
支持台灣獨立,肢解中華民國,終結大中華種族主義
SeVen • 匿名者 • 0 1 2549 -
轉載 抵抗「匪語」係文化獵巫?我哋先係俾人獵緊嗰個巫!
SeVen • 匿名者 • 0 1 5167 -
六七暴動->中文法定語文運動->民主回歸->建設民主中國 收容大量支那假難民最終導致英屬香港淪陷
SeVen • 匿名者 • 0 1 5128 -
從文革批鬥到北京坦克轆豬,支那人長期關注事件嘅共同點:死得共產黨多
SeVen • 匿名者 • • 匿名者 • • 0 2 5254 -
討論:一個人被指出使用「quality」嘅蝗語「質量」後,會改口用「品質」,但唯獨唔用香港本土寫法「質素」係咩心態?
SeVen • 匿名者 • • 匿名者 • • 0 2 5271 -
召喚起底組 粵切字發起人係支那仔?
SeVen • 匿名者 • • 匿名者 • • 0 7 6342 -
武漢算唔算係繼北京上海後最應該食核彈嘅支那城市
SeVen • 匿名者 • • 匿名者 • • 0 2 6359