V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
binbinyouliiii
V2EX  ›  问与答

请问哪里可以看到代理协议的说明文档

  •  
  •   binbinyouliiii · 2020-06-22 11:43:34 +08:00 · 659 次点击
    这是一个创建于 1652 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在学新的语言,想练练手,想用 55R 的协议练练手实现出来,但是 google 了半天,很少讲到协议相关的东西的文章,做一下伸手党。

    socks5 协议因为简单,所以已经实现出来了,主要是代理 client 和 server 之间的协议因为找不到文档和文章阻塞住了

    14 条回复    2020-06-22 16:34:15 +08:00
    binbinyouliiii
        1
    binbinyouliiii  
    OP
       2020-06-22 14:41:34 +08:00
    好冷清,木得人吗
    SakuraSa
        2
    SakuraSa  
       2020-06-22 14:51:55 +08:00
    搜索 rfc1928
    binbinyouliiii
        3
    binbinyouliiii  
    OP
       2020-06-22 14:56:27 +08:00
    @SakuraSa #2 Socks5 ?我已经实现出来了,但是 55/55R 还没有实现出来,找不到文档
    SakuraSa
        4
    SakuraSa  
       2020-06-22 14:56:49 +08:00
    传输可以参考 github 上的 v2ray-core
    SakuraSa
        5
    SakuraSa  
       2020-06-22 15:04:15 +08:00
    coolcoffee
        6
    coolcoffee  
       2020-06-22 15:09:50 +08:00
    我也没找到相关文档,但是参考过别人写的小玩具,然后自己也写过一个小玩具通网。

    client 和 server 之间主要就是负责原始 tcp 流的转发。server 上面其实是包含了两个服务的,一个是 socks5,一个是伪装 server 。

    假设 Chrome 浏览器需要访问某个网站,一开始的数据流向就是:
    chrome => client => server => socks5 server, 后面 socks5 server 处理完之后会把数据往回发,这时候数据流就是反向来的。

    你一开始在国内搭 server,简单的实现转发协议就好。等到 server 不在国内的时候,client <=> server 两端就要开始进行混淆了,例如模仿 http 请求,AES 加密等等。

    最后,我目前就简单的实现了混淆,性能肯定还比不上知名的项目的,等后面有时间我再去深入研究它们的源码。
    binbinyouliiii
        7
    binbinyouliiii  
    OP
       2020-06-22 15:11:15 +08:00
    @SakuraSa #5 thanks,看了一下好像没有关于如何混淆的文章
    binbinyouliiii
        8
    binbinyouliiii  
    OP
       2020-06-22 15:14:24 +08:00
    @coolcoffee #6 目前主要是卡在如何混淆和加密上,因为没见过样例,不知道传到 server 什么样子的
    coolcoffee
        9
    coolcoffee  
       2020-06-22 15:44:46 +08:00
    @binbinyouliiii 简单点的话,直接通过 chacha20-ietf-poly1305 算法和密钥加密,服务端拿到之后再用同样的密钥解开,反过来也一样。只要保证加解密之后的数据是一致的就行。

    你先把 tcp 不加密传递先实现出来吧。
    binbinyouliiii
        10
    binbinyouliiii  
    OP
       2020-06-22 16:04:22 +08:00
    @coolcoffee #9 不加密的话,这个实现没啥难点,大不了再来一个 socks5 。
    SakuraSa
        11
    SakuraSa  
       2020-06-22 16:09:30 +08:00
    混淆的部分我也不是很清楚,按我理解的话:混淆就是把数据套入别的看起来正常的协议中,让通过简单统计的检测算法识别成正常的协议
    例如,先发送一个假的 http 请求头,再 body 部分做正常的 io 。如果通过检测请求头的方式检查,就会把这次请求看作是一个 http 协议的请求。
    SakuraSa
        12
    SakuraSa  
       2020-06-22 16:11:59 +08:00
    如果仅仅是发送加密数据的话,虽然检查方不知道你发送的具体是什么数据,但是一看就是加密流,反而特征十分明显。
    coolcoffee
        13
    coolcoffee  
       2020-06-22 16:19:31 +08:00
    @SakuraSa 试下放到 http body 里面?把 content-type 改成影音格式。
    SakuraSa
        14
    SakuraSa  
       2020-06-22 16:34:15 +08:00
    主要不知道检测的具体特征是什么,所以混淆不好做。
    例如,如果检测的是字符频率,加密数据流和视频数据流肯定是不一样的。
    https 已经是加密数据流了,如果模拟 https 的过程,正文的数据特征应该是统计不出来的。
    (不过现在好像很多 https 站本身就被 X 地很厉害
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2332 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:57 · PVG 23:57 · LAX 07:57 · JFK 10:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.