发布日期:2024-10-06 04:01 点击次数:148
用于绵薄地产生各式合同接口。罢了为在正本的合同外衣一层编码妥协码接口快乐风男 勾引,不但可以伪装成其它合同流量,还可以把原合同调养为其它合同进行兼应允完善(但现在接口功能还莫得写完,现在还在测试完善中),需要就业端与客户端成就疏导的合同插件。插件共分为两类,包括欺侮插件和合同界说插件。
现存插件先容 1.欺侮插件此类型的插件用于界说加密后的通讯合同,不息用于合同伪装,部分插件能兼容原合同。
plain:暗意不欺侮,平直使用合同加密后的结果发送数据包
http_simple:并非全皆按照http1.1圭臬罢了,只是作念了一个头部的GET请乞降一个大约的回答,之后依然为原合同流。使用这个欺侮后,已在部分地区不雅察到似乎乱来了QoS的结果。关于这种欺侮,它并非为了减少特征,违犯的是提供一种强特征,试图乱来GFW的合同检测。要翔实的是应用规模变大以后因特征领会有可能会被闭塞。此插件可以兼容原合同(需要在就业端成就为http_simple_compatible),蔓延与原合同简直无异(在存在QoS的地区以致可能更快),除了头部数据包外莫得冗尾数据包,客户端支援自界说参数,参数为http肯求的host,举例缔造为cloudfront.com伪装为云就业器肯求,可以使用逗号分割多个host如a.com,b.net,c.org,这时会惟恐使用。翔实,乌有缔造此参数可能导致揣度被断开以致IP被闭塞,如不清爽若何缔造那么请留空。就业端也支援自界说参数,真理为客户端仅能填写的参数列表,以逗号分割。 本插件的高等缔造(C#版、python版及ssr-libev版均支援):本插件可以自界说简直完整的http header,其中前两行的GET和host不成修改,可自界说从第三步履手的内容。例子:baidu.com#User-Agent: abc\nAccept: text/html\nConnection: keep-alive 这是填于欺侮参数的内容,在#号前边的是上文所说的host,背面即为自界说header,扫数的换哄骗用\n暗意(写于成就文献时也可平直使用\n而不必写成\n,换行符亦会调养),如碰到需要使用单独的\号,可写为\\,最末尾不需要写\n,表率会自动加入一语气的两个换行。
http_post:与http_simple绝大部分疏导,分辨是使用POST姿色发送数据,得当http表率,乱来性更好,但惟有POST肯求这种步履容易被统计分析出很是。此插件可以兼容http_simple,同期也可兼容原合同(需要在就业端成就为http_post_compatible),参数缔造等内容参见http_simple,密切翔实要是使用自界说http header,请务必填写boundary。
random_head(不提倡使用):起先通讯前发送一个简直为惟恐的数据包(现在末尾4字节为CRC32,会成为特征,以后会有篡改版块),之后为原合同流。缱绻是让首个数据包压根不存在职何灵验信息,让统计学习机制见鬼去吧。此插件可以兼容原合同(需要在就业端成就为random_head_compatible),比原合同多一次捏手导致揣度手艺会长一些,除了捏手历程之后莫得冗尾数据包,不支援自界说参数。
tls1.2_ticket_auth(犀利保举):模拟TLS1.2在客户端有session ticket的情况下的捏手揣度。现在为完整模拟罢了,经抓包软件测试齐全伪装为TLS1.2。因为有ticket是以莫得发送文凭等复杂门径,因而防火墙无法凭证文凭作念判断。同期自带一定的抗重放挫折的能力,以及包长度欺侮能力。如碰到重放挫折则会在就业端log里搜索到,可以通过grep "replay attack"搜索,可以用此插件发现你地方地区清晰有莫得针对TLS的骚扰。防火墙对TLS相比窝囊为力,抗闭塞能力应该会较其它插件强,但碰到的骚扰也可能不少,不外合同自身会搜检出任何关扰,碰到骚扰便断开揣度,幸免长手艺恭候,让客户端或浏览器自行重连。此插件可以兼容原合同(需要在就业端成就为tls1.2_ticket_auth_compatible),比原合同多一次捏手导致揣度手艺会长一些,使用C#客户端开启自动重连时比其它插件发扬更好。客户端支援自界说参数,参数为SNI,即发送host称呼的字段,此功能与TOR的meek插件相当同样,举例缔造为cloudfront.net伪装为云就业器肯求,可以使用逗号分割多个host如a.com,b.net,c.org,这时会惟恐使用。翔实,乌有缔造此参数可能导致揣度被断开以致IP被闭塞,如不清爽若何缔造那么请留空。保举自界说参数缔造为cloudflare.com或cloudfront.net。就业端暂不支援自界说参数。
2.合同界说插件此类型的插件用于界说加密前的合同,不息用于长度欺侮及增强安全性和阴事性,部分插件能兼容原合同。
origin:暗意使用原始SS合同,此成就速率最快效劳最高,适用于遗弃少或审查宽松的环境。不然不提倡使用。
verify_deflate(不提倡):对每一个包皆进行deflate压缩,数据风光为:包长度(2字节)|压缩数据流|原数据流Adler-32,此风光不祥了0x78,0x9C两字节的头部。另外,关于依然压缩过或加密过的数据将难以压缩(可能加多1~20字节),而关于未加密的html文本会有可以的压缩结果。因为压缩及解压缩较占CPU,不提倡较多用户同期使用此欺侮插件。此插件不成兼容原合同,千万不要添加_compatible的后缀。
verify_sha1(即原版OTA合同,已烧毁):对每一个包皆进行SHA-1校验,具体合同态状参阅One Time Auth,捏手数据包加多10字节,其它数据包加多12字节。此插件能兼容原合同(需要在就业端成就为verify_sha1_compatible)。
auth_sha1(已烧毁):对首个包进行SHA-1校验,同期会发送由客户端生成的惟恐客户端id(4byte)、揣度id(4byte)、unix手艺戳(4byte),之后的通讯使用Adler-32行为效验码。此插件提供了能顽抗一般的重放挫折的认证,默许并吞端口最多支援64个客户端同期使用,可通过修改此值遗弃客户端数目,使用此插件的就业器与客户机的UTC手艺差不成起原1小时,不息只需要客户机校对腹地手艺并正确缔造时区就可以了。此插件与原合同捏手蔓延疏导,能兼容原合同(需要在就业端成就为auth_sha1_compatible),支援就业端自界说参数,参数为10进制整数,暗意最大客户端同期使用数。
auth_sha1_v2(已烧毁):与auth_sha1同样,去除手艺考据,以幸免部分斥地由于手艺导致无法揣度的问题,增长客户端ID为8字节,使用较大的长度欺侮。能兼容原合同(需要在就业端成就为auth_sha1_v2_compatible),支援就业端自界说参数,参数为10进制整数,暗意最大客户端同期使用数。
auth_sha1_v4(不提倡):与auth_sha1对首个包进行SHA-1校验,同期会发送由客户端生成的惟恐客户端id(4byte)、揣度id(4byte)、unix手艺戳(4byte),之后的通讯使用Adler-32行为效验码,对包长度单独校验,以顽抗抓包重放检测,使用较大的长度欺侮,使用此插件的就业器与客户机的UTC手艺差不成起原24小时,即只需要年份日历正确即可。能兼容原合同(需要在就业端成就为auth_sha1_v4_compatible),支援就业端自界说参数,参数为10进制整数,暗意最大客户端同期使用数。
auth_aes128_md5或auth_aes128_sha1(均保举):对首个包的认证部分进哄骗用Encrypt-then-MAC形式以真的免疫认证包的CCA挫折,珍藏各式探伤和重防挫折,同期此合同支援单端口多用户,具体缔造步履参见breakwa11的博客。使用此插件的就业器与客户机的UTC手艺差不成起原24小时,即只需要年份日历正确即可,针对UDP部分也有作念大约的校验。此插件不成兼容原合同,支援就业端自界说参数,参数为10进制整数,暗意最大客户端同期使用数。
auth_chain_a(犀利保举):对首个包的认证部分进哄骗用Encrypt-then-MAC形式以真的免疫认证包的CCA挫折,珍藏各式探伤和重防挫折,数据流自带RC4加密,同期此合同支援单端口多用户,不同用户之间无法解密数据,每次加密密钥均不疏导,具体缔造步履参见breakwa11的博客。使用此插件的就业器与客户机的UTC手艺差不成起原24小时,即只需要年份日历正确即可,针对UDP部分也有加密及长度欺侮。使用此插件提倡加密使用none。此插件不成兼容原合同,支援就业端自界说参数,参数为10进制整数,暗意最大客户端同期使用数,最小值支援平直缔造为1,此插件能及时反馈内容的客户端数目(你的客户端至少有一个揣度莫得断开才能保证你占用了一个客户端数,不然缔造为1时其它客户端一揣度别的就一定连不上)。
保举使用auth_chain_a插件,在以上插件里欺侮能力较高,而抗检测能力最高,即使多东谈主使用也难以识别闭塞。同期要是要发布公开代理,以上auth插件均可严格遗弃使用客户端数(要翔实的是若为auth_sha1_v4_compatible,那么用户只须使用原合同就莫得遗弃结果),而auth_chain_a合同的遗弃最为精准。
美腿玉足 欺侮特点 name RTT encode speed bandwidth anti replay attack cheat QoS anti analysis plain 0 100% 100% No 0 / http_simple 0 20%/100% 20%/100% No 90 70 http_post 0 20%/100% 20%/100% No 100 70 random_head (X) 1 100% 85%/100% No 0 10 tls1.2_ticket_auth 1 98% 75%/ 95% Yes 100 90讲明:快乐风男 勾引
20%/100%暗意首包为20%,其余为100%速率(或带宽),其它的 RTT 大于0的欺侮,前边的暗意在浏览等闲网页的情况下平均灵验利用带宽的揣摸值,后一个暗意去除捏手反馈以后的值,适用于大文献下载时。 RTT 暗意此欺侮是否会产生附加的蔓延,1个RTT暗意通讯数据一次往复所需要的手艺。 RTT 不为0且莫得 anti replay attack 能力的欺侮,不论合同是什么,皆存在被主动探伤的风险,即不提倡使用random_head。 RTT 为0的,只须合同不是 origin,就莫得被主动探伤的风险。天然由于原合同自身也存在被主动探伤的风险,在现在莫得不雅察到主动探伤步履的情况下,暂时不需要太归来。 cheat QoS 暗意乱来路由器 QoS 的能力,100暗意能齐全乱来,0暗意莫得任何作用,50分摆布暗意较为严格的路由能识别出来。 anti analysis 暗意抗合同分析能力,plain 的时候依赖于合同,其它的基于网友反馈而给出的分值。值为100暗意齐全伪装。 合同特点假定 method = “aes-256-cfb” 以下扫数合同与均 anti CPA
name RTT encode speed bandwidth anti CCA anti replay attack anti MITM detect anti packet length analysis origin 0 100% 99% No No No 0 verify_deflate 0 30% 97%~110% No No No 6 verify_sha1 (X) 0 85% 98%/99% No No No 0 auth_sha1 (X) 0 95% 97% No Yes No 4 auth_sha1_v2 (X) 0 94% 80%/97% No Yes No 10 auth_sha1_v4 0 90% 85%/98% No Yes No 10 auth_aes128_md5 0 80% 70%/98% Yes Yes Yes 10 auth_aes128_sha1 0 70% 70%/98% Yes Yes Yes 10 auth_chain_a 0 70% 75%/98% Yes Yes Yes 15讲明:
以上为浏览等闲网页(非下载非看视频)的平均测试结果,浏览不同的网页会有不同的偏差 encode speed仅用于提供相对速率的参考,不同环境下代码实践速率不同 verify_deflate的bandwidth(灵验带宽)上限110%仅为估值,若数据经过压缩或加密,那么压缩结果会很差 verify_sha1的bandwidth意为上传平均灵验带宽98%,下载99% auth_aes128_md5的bandwidth在浏览等闲网页时较低(为了较强的长度欺侮,但单个数据包尺寸会保持在 TCP MSS 以内,是以其实对网速影响很小),而看视频或下载时灵验数据比率比auth_sha1要高,可达97%,是以无须归来下载时的速率。auth_chain_a及auth_aes128_md5类似 要是同期使用了其它的欺侮插件,会令bandwidth的值裁减,具体由所使用的欺侮插件及所浏览的网页共同决定 关于抗包长度分析一列,满分为100,即0为全皆无结果,5以下为结果微小,具体分析步履可参阅方校长等东谈主论文 关于抗包时序分析一列,方校长的论文暗意天然可利用,但利用难度大(也即他们还没能达到实用级),现在对此也不作念处理 欺侮与合同成就提倡 合同保举:合同用auth_chain_a最好,此时保举不使用加密(缔造为none),欺侮纰漏 加密选拔:若合同用auth_chain_a,那加密用none(但不代表密码可以不写或双方不匹配),若合同不是auth_aes128_md5或auth_aes128_sha1,那么不成使用rc4加密(可用rc4-md5)。这时加密可以在rc4-md5、salsa20、chacha20-ietf三个内部选拔(rc4-md5可换为aes系列,salsa20可换为chacha20或bf-cfb),要是使用SSR还可稀奇选拔rc4-md5-6。 欺侮保举:要是QoS在你的地区领会,欺侮提倡在http_simple与tls1.2_ticket_auth中选拔,具体选拔可以通过我方的历练得出。要是选拔欺侮后反而变慢,那么欺侮请选拔plain。要是你不在乎QoS,但归来你的个东谈主vps能不成耐久使用,那么欺侮选拔plain或tls1.2_ticket_auth,合同选拔auth_chain_a或auth_aes128_md5或auth_aes128_sha1 要是你用于玩游戏,或对揣度蔓延有条款的情况下,提倡不要使用tls1.2_ticket_auth欺侮,用其它欺侮或plain 就业端里,http_simple与http_post是互相兼容的,莫得使用上的分辨 要是你在公司,或学校,或某些环境下,发现原版SS合同不可用,提倡你启用http_simple、http_post或tls1.2_ticket_auth欺侮,同期端口相应使用80或443,不息能科罚问题。同期能回避你地方环境下的网罗闭塞(如残害走访网盘残害上传等等) 要是使用tls1.2_ticket_auth欺侮或不开启欺侮,那么合同最好不要使用origin或verify_sha1 要是使用二重代理,一般你只需要计划越过防火墙的那一段使用欺侮或加强合同,除非为了匿名 要是你发现你的代理倏得不成用了,但换一个端口又能用了,或者等15分钟到半小时后又能用了,这种情况下请联系我 成就步履就业端成就:使用最新SSR的manyuser分支 user-config.json或config.json里有一个protocol的字段,现在的可能取值为:originverify_deflate (不提倡)verify_sha1 (已过期)verify_sha1_compatible (已过期)auth_sha1 (已过期)auth_sha1_compatible (已过期)auth_sha1_v2 (已过期)auth_sha1_v2_compatible (已过期)auth_sha1_v4 (不提倡)auth_sha1_v4_compatible (不提倡)auth_aes128_md5auth_aes128_sha1auth_chain_a
user-config.json或config.json里有一个obfs的字段,现在的可能取值为:plainhttp_simplehttp_simple_compatiblehttp_posthttp_post_compatiblerandom_head (已过期)random_head_compatible (已过期)tls1.2_ticket_authtls1.2_ticket_auth_compatible
默许为"protocol":"auth_aes128_md5","obfs":"tls1.2_ticket_auth_compatible", 相应的 合同插件参数默许为"protocol_param":"" 欺侮插件参数默许为"obfs_param":"" 关于protocol,必须就业端与客户端严格匹配 就业端成就为xxabc_compatible时(以compatible为后缀的),即就业端支援使用原版客户端,或使用成就插件为xxabc或plain的ssr客户端。
客户端成就:使用本ssr版块,在剪辑就业器成就里找到相应节点,临了在protocol选项和obfs选项的列内外选拔需要使用的插件,然后填写相应的参数即可
兼容性现在ssr-libev客户端、ssr-python及ssr-csharp支援一齐莫得标注为过期或不保举的合同和欺侮。
罢了接口以下以C#言语为例作念讲明
interface IObfs
成员函数
InitData() 参数:无 复返:一个自界说类型变量,不息用于保存此接口的全局信息,不应复返null,c言语中复返void* 讲明:第一次创建实例前调用,并吞就业端成就不会访佛调用,就业端在成立监听时调用,客户端在第一次揣度时调用。
SetServerInfo(ServerInfo serverInfo) 参数:ServerInfo结构,包含成员变量:
host: 字符串类型,就业端ip,客户端需要把域名调养为ip,如有前置代理,则平直使用成就时所用的域名也可,就业端需要赢得监听ip port: 整数类型,就业端监听端口 param: 用户缔造的参数,字符串类型 data: 由InitData复返的结果,为object类型(c言语中使用void*) iv: 客户端或就业端加密时使用的iv数组(c言语中需要添加额外字段以记载其长度,下同) recv_iv: 客户端或就业端接受到的iv数组 key: 加密时使用的key(不是原key,是通过BytesToKey生成的指定长度数组) tcp_mss: 整数类型,TCP分包大小,缔造为1460 overhead: 整数类型,合同头部大小,需要由调用方缔造复返:无 讲明:实例构造的时候(每个揣度成惟恐)调用,调用前iv和key必须依然运转动;而接受到数据后先运转动recv_iv再调用插件。
int GetOverhead() 参数:无 复返:此插件在通讯时的附加头部大小
Dispose() 参数:无 复返:无 讲明:实例析构时(每个揣度关闭时)调用
byte[] ClientPreEncrypt(byte[] plaindata, int datalength, out int outlength) 参数:需要处理的字节数组杰出长度 复返:处理后的字节数组杰出长度 讲明:客户端发送到就业端数据加密前调用此接口
byte[] ClientEncode(byte[] encryptdata, int datalength, out int outlength) 参数:需要编码的字节数组杰出长度 复返:编码后的字节数组杰出长度 讲明:客户端发送到就业端数据加密后调用此接口
byte[] ClientDecode(byte[] encryptdata, int datalength, out int outlength, out bool needsendback) 参数:需要解码的字节数组杰出长度 复返:解码后的字节数组杰出长度,以及needsendback符号是否立即回发就业端数据。如needsendback为true,则会立即调用ClientEncode,调用时参数是一个长度为0的字节数组 讲明:客户端收到就业端数据在解密前调用此接口
byte[] ClientPostDecrypt(byte[] plaindata, int datalength, out int outlength) 参数:需要处理的字节数组杰出长度 复返:处理后的字节数组杰出长度 讲明:客户端收到就业端数据在解密后调用此接口
byte[] ServerPreEncrypt(byte[] plaindata, int datalength, out int outlength) 参数:需要处理的字节数组杰出长度 复返:处理后的字节数组杰出长度 讲明:就业端发送到客户端数据加密前调用此接口
byte[] ServerEncode(byte[] encryptdata, int datalength, out int outlength) 参数:需要编码的字节数组杰出长度 复返:编码后的字节数组杰出长度 讲明:就业端发送到客户端数据加密后调用此接口
byte[] ServerDecode(byte[] encryptdata, int datalength, out int outlength, out bool needdecrypt, out bool needsendback) 参数:需要解码的字节数组杰出长度 复返:解码后的字节数组杰出长度,以及needdecrypt符号数据是否需要解密(一般皆应该为true),以及needsendback符号是否立即回发客户端数据。如needsendback为true,则会立即调用ServerEncode并发送其复返结果,调用时参数是一个长度为0的字节数组 讲明:就业端收到客户端数据在解密前调用此接口
byte[] ServerPostDecrypt(byte[] plaindata, int datalength, out int outlength) 参数:需要处理的字节数组杰出长度 复返:处理后的字节数组杰出长度 讲明:就业端收到客户端数据在解密后调用此接口
byte[] ClientUdpPreEncrypt(byte[] plaindata, int datalength, out int outlength) 参数:需要处理的字节数组杰出长度 复返:处理后的字节数组杰出长度 讲明:客户端发送到就业端UDP数据加密前调用此接口
byte[] ClientUdpPostDecrypt(byte[] plaindata, int datalength, out int outlength) 参数:需要处理的字节数组杰出长度 复返:处理后的字节数组杰出长度 讲明:客户端收到就业端UDP数据在解密后调用此接口
byte[] ServerUdpPreEncrypt(byte[] plaindata, int datalength, out int outlength) 参数:需要处理的字节数组杰出长度 复返:处理后的字节数组杰出长度 讲明:就业端发送到客户端UDP数据加密前调用此接口
byte[] ServerUdpPostDecrypt(byte[] plaindata, int datalength, out int outlength) 参数:需要处理的字节数组杰出长度 复返:处理后的字节数组杰出长度 讲明:就业端收到客户端UDP数据在解密后调用此接口
插件编写有两类插件,一类是合同插件,一类是欺侮插件
其中接口InitData, SetServerInfo, Dispose接口必须罢了,其它的接口为通讯接口
编写合同插件的话,需要重写ClientPreEncrypt, ClientPostDecrypt, ServerPreEncrypt, ServerPostDecrypt,其它的按原样复返,needdecrypt必须为true,needsendback必须为false
编写欺侮插件的话,需要重写ClientEncode, ClientDecode, ServerEncode, ServerDecode,其它的按原样复返。
要是编写的部分仅含客户端部分,那么只需要编写Client为前缀的两个接口,就业端同理。
现在支援此插件接口的快乐风男 勾引,有 ShadowsocksR C# 和 ShadowsocksR Python