Lede: luci-app-ssr-plus 彻底解决更新订阅慢的问题,顺便兼容SSD节点

Created on 8 Jan 2020  ·  57Comments  ·  Source: coolsnowwolf/lede

重要

由于各家机场不一样,如果需要更多的支持,给我发邮件告诉我订阅地址我帮你适配,当然非常小众或者魔改的不适配,只适配大众的,或者在下面自己更新这个代码,在下面给出更新后的版本,这个脚本过几天就提交 pull request,

使用方式

直接scp到你的路由器中 lua xxx.lua 即可

已知问题

  • 和 shell 脚本的md5算法有点出入,使用此脚本会自动删除所有 shell 建立的节点,
  • 其他无问题 已合并 欢迎测试

改善的问题

对比 shell 脚本加了很多智能判断。
并且针对 shell 脚本有 io 上更彻底的优化,shell的 io 太重了,处理这种字符串的东西会很累。
可读性和可扩展性也比shell好很多。
使用脚本除了网络 io 时间外,基本本身处理时间非常之快,几乎可以无视。

说明

有BUG下面跟帖直接反馈即可

#!/usr/bin/lua
------------------------------------------------
-- This file is part of the luci-app-ssr-plus subscribe.lua
-- @author William Chan <[email protected]>
------------------------------------------------
require 'nixio'
require 'luci.util'
require 'luci.jsonc'
require 'luci.sys'

-- these global functions are accessed all the time by the event handler
-- so caching them is worth the effort
local tinsert = table.insert
local ssub, slen, schar, srep, sbyte, sformat, sgsub =
      string.sub, string.len, string.char, string.rep, string.byte, string.format, string.gsub
local cache = {}
local nodeResult = setmetatable({}, { __index = cache })  -- update result
local name = 'shadowsocksr'
local uciType = 'servers'
local ucic = luci.model.uci.cursor()
local proxy = ucic:get_first(name, 'server_subscribe', 'proxy', '0')
local subscribe_url = ucic:get_first(name, 'server_subscribe', 'subscribe_url', {})

local log = function(...)
    print(os.date("%Y-%m-%d %H:%M:%S ") .. table.concat({ ... }, " "))
end
-- 分割字符串
local function split(full, sep)
    full = full:gsub("%z", "")  -- 这里不是很清楚 有时候结尾带个\0
    local off, result = 1, {}
    while true do
        local nEnd = full:find(sep, off)
        if not nEnd then
            local res = ssub(full, off, slen(full))
            if #res > 0 then -- 过滤掉 \0
                tinsert(result, res)
            end
            break
        else
            tinsert(result, ssub(full, off, nEnd - 1))
            off = nEnd + slen(sep)
        end
    end
    return result
end
-- urlencode
local function get_urlencode(c)
    return sformat("%%%02X", sbyte(c))
end

local function urlEncode(szText)
    local str = szText:gsub("([^0-9a-zA-Z ])", get_urlencode)
    str = str:gsub(" ", "+")
    return str
end

local function get_urldecode(h)
    return schar(tonumber(h, 16))
end
local function UrlDecode(szText)
    return szText:gsub("+", " "):gsub("%%(%x%x)", get_urldecode)
end

-- trim
local function trim(text)
    if not text or text == "" then
        return ""
    end
    return (sgsub(text, "^%s*(.-)%s*$", "%1"))
end
-- md5
local function md5(content)
    local stdout = luci.sys.exec('echo \"' .. urlEncode(content) .. '\" | md5sum | cut -d \" \"  -f1')
    -- assert(nixio.errno() == 0)
    return trim(stdout)
end
-- base64
local function base64Decode(text, safe)
    local raw = text
    if not text then return '' end
    text = text:gsub("%z", "")
    if safe then
        text = text:gsub("_", "/")
        text = text:gsub("-", "+")
        local mod4 = #text % 4
        text = text .. string.sub('====', mod4 + 1)
    end
    local result = nixio.bin.b64decode(text)
    if result then
        return result:gsub("%z", "")
    else
        return raw
    end
end
-- 处理数据
local function processData(szType, content)
    local result = {
        auth_enable = '0',
        switch_enable = '1',
        type = szType,
        local_port = 1234,
        timeout = 60, -- 不太确定 好像是死的
        fast_open = 0,
        kcp_enable = 0,
        kcp_port = 0,
        kcp_param = '--nocomp'
    }
    local hash
    if type(content) == 'string' then
        hash = md5(content)
    else
        hash = md5(luci.jsonc.stringify(content))
    end
    result.hashkey = hash
    if szType == 'ssr' then
        local dat = split(content, "/\\?")
        local hostInfo = split(dat[1], ':')
        result.server = hostInfo[1]
        result.server_port = hostInfo[2]
        result.protocol = hostInfo[3]
        result.encrypt_method = hostInfo[4]
        result.obfs = hostInfo[5]
        result.password = base64Decode(hostInfo[6], true)
        local params = {}
        for k, v in pairs(split(dat[2], '&')) do
            local t = split(v, '=')
            params[t[1]] = t[2]
        end
        result.obfs_param = base64Decode(params.bfsparam, true)
        result.protocol_param = base64Decode(params.protoparam, true)
        local group = base64Decode(params.group, true)
        if group then
            result.alias = "["  .. group .. "] "
        end
        result.alias = result.alias .. base64Decode(params.remarks, true)
    elseif szType == 'vmess' then
        local info = luci.jsonc.parse(content)
        result.type = 'v2ray'
        result.server = info.add
        result.server_port = info.port
        result.tcp_guise = "none"
        result.transport = info.net
        result.alter_id = info.aid
        result.vmess_id = info.id
        result.alias = info.ps
        result.ws_host = info.host
        result.ws_path = info.path
        result.h2_host = info.host
        result.h2_path = info.path
        if not info.security then
            result.security = "auto"
        end
        if info.tls == "tls" or info.tls == "1" then
            result.tls = "1"
        else
            result.tls = "0"
        end
    elseif szType == "ss" then
        local info = content:sub(1, content:find("#") - 1)
        local alias = content:sub(content:find("#") + 1, #content)
        local hostInfo = split(base64Decode(info, true), "@")
        local host = split(hostInfo[2], ":")
        local userinfo = base64Decode(hostInfo[1], true)
        local method = userinfo:sub(1, userinfo:find(":") - 1)
        local password = userinfo:sub(userinfo:find(":") + 1, #userinfo)
        result.alias = UrlDecode(alias)
        result.type = "ss"
        result.server = host[1]
        if host[2]:find("/\\?") then
            local query = split(host[2], "/\\?")
            result.server_port = query[1]
            -- local params = {}
            -- for k, v in pairs(split(query[2], '&')) do
            --     local t = split(v, '=')
            --     params[t[1]] = t[2]
            -- end
            -- 这里似乎没什么用 我看数据结构没有写插件的支持 先抛弃
        else
            result.server_port = host[2]
        end
        result.encrypt_method_ss = method
        result.password = password
    elseif szType == "ssd" then
        result.type = "ss"
        result.server = content.server
        result.server_port = content.port
        result.password = content.password
        result.encrypt_method_ss = content.encryption
        result.alias = "[" .. content.airport .. "] " .. content.remarks
    end
    return result, hash
end
-- wget
local function wget(url)
    local stdout = luci.sys.exec('wget-ssl --user-agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36" --no-check-certificate -t 3 -T 10 -O- "' .. url .. '"')
    return trim(stdout)
end

local execute = function()
    -- exec
    do
        -- subscribe_url = {'https://www.google.comc'}
        if proxy == '0' then -- 不使用代理更新的话先暂停
            log('服务正在暂停')
            luci.sys.init.stop(name)
        end
        for k, url in ipairs(subscribe_url) do
            local raw = wget(url)
            if #raw > 0 then
                local node, szType
                local groupHash = md5(url)
                cache[groupHash] = {}
                tinsert(nodeResult, {})
                local index = #nodeResult
                -- SSD 似乎是这种格式 ssd:// 开头的
                if raw:find('ssd://') then
                    szType = 'ssd'
                    local nEnd = select(2, raw:find('ssd://'))
                    node = base64Decode(raw:sub(nEnd + 1, #raw), true)
                    node = luci.jsonc.parse(node)
                    local extra = {
                        airport = node.airport,
                        port = node.port,
                        encryption = node.encryption,
                        password = node.password
                    }
                    local servers = {}
                    -- SS里面包着 干脆直接这样
                    for _, server in ipairs(node.servers) do
                        tinsert(servers, setmetatable(server, { __index = extra }))
                    end
                    node = servers
                else
                    -- ssd 外的格式
                    node = split(base64Decode(raw, true), "\n")
                end
                for _, v in ipairs(node) do
                    if v then
                        local result, hash
                        if szType == 'ssd' then
                            result, hash = processData(szType, v)
                        elseif not szType then
                            local dat = split(v, "://")
                            if dat and dat[1] and dat[2] then
                                if dat[1] == 'ss' then
                                    result, hash = processData(dat[1], dat[2])
                                else
                                    result, hash = processData(dat[1], base64Decode(dat[2], true))
                                end
                            end
                        else
                            log('跳过未知类型: ' .. szType)
                        end
                        -- log(hash, result)
                        if hash and result then
                            if result.alias:find("过期时间") or
                                result.alias:find("剩余流量") or
                                result.alias:find("QQ群") or
                                result.alias:find("官网") or
                                result.server == ''
                            then
                                log('丢弃无效节点: ' .. result.type ..' 节点, ' .. result.alias)
                            else
                                log('成功解析: ' .. result.type ..' 节点, ' .. result.alias)
                                result.grouphashkey = groupHash
                                tinsert(nodeResult[index], result)
                                cache[groupHash][hash] = nodeResult[index][#nodeResult[index]]
                            end
                        end
                    end
                end
                log('成功解析节点数量: ' ..#node)
            end
        end
    end
    -- diff
    do
        assert(next(nodeResult), "node result is empty")
        local add, del = 0, 0
        ucic:foreach(name, uciType, function(old)
            if old.grouphashkey or old.hashkey then -- 没有 hash 的不参与删除
                if not nodeResult[old.grouphashkey] or not nodeResult[old.grouphashkey][old.hashkey] then
                    ucic:delete(name, old['.name'])
                    del = del + 1
                else
                    local dat = nodeResult[old.grouphashkey][old.hashkey]
                    ucic:tset(name, old['.name'], dat)
                    -- 标记一下
                    setmetatable(nodeResult[old.grouphashkey][old.hashkey], { __index =  { _ignore = true } })
                end
            else
                log('忽略手动添加的节点: ' .. old.alias)
            end
        end)
        for k, v in ipairs(nodeResult) do
            for kk, vv in ipairs(v) do
                if not vv._ignore then
                    local section = ucic:add(name, uciType)
                    ucic:tset(name, section, vv)
                    add = add + 1
                end

            end
        end
        ucic:commit(name)
        -- 如果服务器已经不见了把帮换一个
        local globalServer = ucic:get_first(name, 'global', 'global_server', '')
        local firstServer = ucic:get_first(name, uciType)
        if not ucic:get(name, globalServer) then
            if firstServer then
                ucic:set(name, ucic:get_first(name, 'global'), 'global_server', firstServer)
                ucic:commit(name)
                log('当前主服务器已更新,正在自动更换。')
            end
        end
        if firstServer then
            luci.sys.call("/etc/init.d/" .. name .." restart > /dev/null 2>&1 &") -- 不加&的话日志会出现的更早
        else
            luci.sys.call("/etc/init.d/" .. name .." stop > /dev/null 2>&1 &") -- 不加&的话日志会出现的更早
        end
        log('新增节点数量: ' ..add, '删除节点数量: ' .. del)
        log('更新成功服务正在启动')
    end
end

if subscribe_url and #subscribe_url > 0 then
    xpcall(execute, function(e)
        log(e)
        log(debug.traceback())
        log('发生错误, 正在恢复服务')
        local firstServer = ucic:get_first(name, uciType)
        if firstServer then
            luci.sys.call("/etc/init.d/" .. name .." restart > /dev/null 2>&1 &") -- 不加&的话日志会出现的更早
        else
            luci.sys.call("/etc/init.d/" .. name .." stop > /dev/null 2>&1 &") -- 不加&的话日志会出现的更早
        end
    end)
end

Most helpful comment

可以加入对obfs插件的支援么?

All 57 comments

@coolsnowwolf

是个很好的建议,目前的 shell 虽然已经很成熟,但是订阅超过 100 个节点在低性能设备上很容易超时(7620 单核之类),但重新造轮子也可能有新的bug,大家可以帮助提交下意见

小白路过,进来学习一番

不如还是整合到界面操作里,每次都用命令行去更新不够用户友好

不如还是整合到界面操作里,每次都用命令行去更新不够用户友好

只是测试的 整合的话看这个 #2726
因为要确保支持各大机场 很多机场搞事情 各种奇奇怪怪的订阅链接

今天测试了一下订阅,好像出现解析错误

2020-01-11 21:24:55 Shadowsocks/ShadowsocksR 1 Threads Started!
[C]: ?
/usr/share/shadowsocksr/subscribe.lua:284: in main chunk
[C]: in function 'xpcall'
/usr/share/shadowsocksr/subscribe.lua:206: in function
/usr/share/shadowsocksr/subscribe.lua:79: in function 'base64Decode'
/usr/share/shadowsocksr/subscribe.lua:293: in function
2020-01-11 21:24:53 stack traceback:
2020-01-11 21:24:53 更新失败服务正在恢复
2020-01-11 21:24:53 发生错误, 正在恢复服务

image

好像是解析节点有问题,测试节点:

ss://[email protected]:1111#%E6%B5%8B%E8%AF%95%E6%9C%8D%E5%8A%A1

今天测试了一下订阅,好像出现解析错误

2020-01-11 21:24:55 Shadowsocks/ShadowsocksR 1 Threads Started!
[C]: ?
/usr/share/shadowsocksr/subscribe.lua:284: in main chunk
[C]: in function 'xpcall'
/usr/share/shadowsocksr/subscribe.lua:206: in function
/usr/share/shadowsocksr/subscribe.lua:79: in function 'base64Decode'
/usr/share/shadowsocksr/subscribe.lua:293: in function
2020-01-11 21:24:53 stack traceback:
2020-01-11 21:24:53 更新失败服务正在恢复
2020-01-11 21:24:53 发生错误, 正在恢复服务

image

好像是解析节点有问题,测试节点:

ss://[email protected]:1111#%E6%B5%8B%E8%AF%95%E6%9C%8D%E5%8A%A1

方便把订阅链接发给我吗?
邮件 我帮你改一下
这个不是解析错误 是没支持 ss的我不知道什么格式 这看起来 有urlencode 和base64 不知是否所有ss都这样

今天测试了一下订阅,好像出现解析错误

2020-01-11 21:24:55 Shadowsocks/ShadowsocksR 1 Threads Started!
[C]: ?
/usr/share/shadowsocksr/subscribe.lua:284: in main chunk
[C]: in function 'xpcall'
/usr/share/shadowsocksr/subscribe.lua:206: in function
/usr/share/shadowsocksr/subscribe.lua:79: in function 'base64Decode'
/usr/share/shadowsocksr/subscribe.lua:293: in function
2020-01-11 21:24:53 stack traceback:
2020-01-11 21:24:53 更新失败服务正在恢复
2020-01-11 21:24:53 发生错误, 正在恢复服务

image
好像是解析节点有问题,测试节点:
ss://[email protected]:1111#%E6%B5%8B%E8%AF%95%E6%9C%8D%E5%8A%A1

方便把订阅链接发给我吗?
邮件 我帮你改一下
这个不是解析错误 是没支持 ss的我不知道什么格式 这看起来 有urlencode 和base64 不知是否所有ss都这样

订阅连接内容有涉及到某些信息,所以不是很方便分享
循环是正常的,只是按你说的,不支持这个格式的
单条内容大致是ss://base64编码的加密方式和密码(例如:aes-128-gcm:12345678)@服务器地址:端口号#urlencode的节点备注

你发几个例子给我即可 我明天处理 

发自我的iPhone

------------------ 原始邮件 ------------------
发件人: caicaicai21 <[email protected]>
发送时间: 2020年1月12日 00:44
收件人: coolsnowwolf/lede <[email protected]>
抄送: William Chan <[email protected]>, Author <[email protected]>
主题: 回复:[coolsnowwolf/lede] luci-app-ssr-plus 彻底解决更新订阅慢的问题,顺便兼容SSD节点 (#2721)

今天测试了一下订阅,好像出现解析错误

2020-01-11 21:24:55 Shadowsocks/ShadowsocksR 1 Threads Started!
[C]: ?
/usr/share/shadowsocksr/subscribe.lua:284: in main chunk
[C]: in function 'xpcall'
/usr/share/shadowsocksr/subscribe.lua:206: in function
/usr/share/shadowsocksr/subscribe.lua:79: in function 'base64Decode'
/usr/share/shadowsocksr/subscribe.lua:293: in function
2020-01-11 21:24:53 stack traceback:
2020-01-11 21:24:53 更新失败服务正在恢复
2020-01-11 21:24:53 发生错误, 正在恢复服务

image
好像是解析节点有问题,测试节点:
ss://[email protected]:1111#%E6%B5%8B%E8%AF%95%E6%9C%8D%E5%8A%A1

方便把订阅链接发给我吗?
邮件 我帮你改一下
这个不是解析错误 是没支持 ss的我不知道什么格式 这看起来 有urlencode 和base64 不知是否所有ss都这样

这是ss协议sip002格式的链接,关于sip002格式的相关信息可以查看这里:https://shadowsocks.org/en/spec/SIP002-URI-Scheme.html

太好了,谢谢大家

今天测试了一下订阅,好像出现解析错误

2020-01-11 21:24:55 Shadowsocks/ShadowsocksR 1 Threads Started!
[C]: ?
/usr/share/shadowsocksr/subscribe.lua:284: in main chunk
[C]: in function 'xpcall'
/usr/share/shadowsocksr/subscribe.lua:206: in function
/usr/share/shadowsocksr/subscribe.lua:79: in function 'base64Decode'
/usr/share/shadowsocksr/subscribe.lua:293: in function
2020-01-11 21:24:53 stack traceback:
2020-01-11 21:24:53 更新失败服务正在恢复
2020-01-11 21:24:53 发生错误, 正在恢复服务

image
好像是解析节点有问题,测试节点:
ss://[email protected]:1111#%E6%B5%8B%E8%AF%95%E6%9C%8D%E5%8A%A1

方便把订阅链接发给我吗?
邮件 我帮你改一下
这个不是解析错误 是没支持 ss的我不知道什么格式 这看起来 有urlencode 和base64 不知是否所有ss都这样

这是ss协议sip002格式的链接,关于sip002格式的相关信息可以查看这里:https://shadowsocks.org/en/spec/SIP002-URI-Scheme.html

谢谢 这样就知道了 不是很麻烦 我下午回来改

我编译的这个订阅功能没有问题。就是隔一段时间 出现err /usr/bin/ssr-redir[22369]: server recv:
Connection reset peer,从定向链接被节点重置。那位大侠知道怎么回事吗?

在 2020年1月12日星期日,hzjnet notifications@github.com 写道:

太好了,谢谢大家


You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/coolsnowwolf/lede/issues/2721?email_source=notifications&email_token=AOFZAKV2U7E2KZHQBWEYZQ3Q5JJE3A5CNFSM4KEKLNBKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEIWNOWI#issuecomment-573364057,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AOFZAKSYTXWSBN2B6C6G6HLQ5JJE3ANCNFSM4KEKLNBA
.

昨天晚上用的好好的 今天早上起来就发现一大堆错误日志,前面的已经被覆盖了 看不到了,
Sun Jan 12 08:31:28 2020 user.notice shadowsocksr: ssr local error.restart!
Sun Jan 12 08:31:40 2020 user.notice shadowsocksr: ssr local error.restart!
Sun Jan 12 08:31:58 2020 user.notice shadowsocksr: ssr local error.restart!
Sun Jan 12 08:32:10 2020 user.notice shadowsocksr: ssr local error.restart!
Sun Jan 12 08:32:28 2020 user.notice shadowsocksr: ssr local error.restart!
Sun Jan 12 08:32:40 2020 user.notice shadowsocksr: ssr local error.restart!
......

我编译的这个订阅功能没有问题。就是隔一段时间 出现err /usr/bin/ssr-redir[22369]: server recv: Connection reset peer,从定向链接被节点重置。那位大侠知道怎么回事吗? 在 2020年1月12日星期日,hzjnet notifications@github.com 写道:

昨天晚上用的好好的 今天早上起来就发现一大堆错误日志,前面的已经被覆盖了 看不到了,
Sun Jan 12 08:31:28 2020 user.notice shadowsocksr: ssr local error.restart!
Sun Jan 12 08:31:40 2020 user.notice shadowsocksr: ssr local error.restart!
Sun Jan 12 08:31:58 2020 user.notice shadowsocksr: ssr local error.restart!
Sun Jan 12 08:32:10 2020 user.notice shadowsocksr: ssr local error.restart!
Sun Jan 12 08:32:28 2020 user.notice shadowsocksr: ssr local error.restart!
Sun Jan 12 08:32:40 2020 user.notice shadowsocksr: ssr local error.restart!
......

手动点击下更新订阅 如果依然这个错误 可以把订阅链接发给我看一下

我编译的这个订阅功能没有问题。就是隔一段时间 出现err /usr/bin/ssr-redir[22369]: server recv: Connection reset peer,从定向链接被节点重置。那位大侠知道怎么回事吗? 在 2020年1月12日星期日,hzjnet notifications@github.com 写道:

你这个 。。嗯 你懂的

我编译的这个订阅功能没有问题。就是隔一段时间 出现err /usr/bin/ssr-redir[22369]: server recv: Connection reset peer,从定向链接被节点重置。那位大侠知道怎么回事吗? 在 2020年1月12日星期日,hzjnet notifications@github.com 写道:

太好了,谢谢大家 — You are receiving this because you commented. Reply to this email directly, view it on GitHub <#2721?email_source=notifications&email_token=AOFZAKV2U7E2KZHQBWEYZQ3Q5JJE3A5CNFSM4KEKLNBKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEIWNOWI#issuecomment-573364057>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AOFZAKSYTXWSBN2B6C6G6HLQ5JJE3ANCNFSM4KEKLNBA .

被强制断开了,它会自动重新连接,可能是机场的问题,也有可能是GFW的问题,反正是正常的,不需要理会。

我编译的这个订阅功能没有问题。就是隔一段时间 出现err /usr/bin/ssr-redir[22369]: server recv: Connection reset peer,从定向链接被节点重置。那位大侠知道怎么回事吗? 在 2020年1月12日星期日,hzjnet [email protected] 写道:

昨天晚上用的好好的 今天早上起来就发现一大堆错误日志,前面的已经被覆盖了 看不到了,
Sun Jan 12 08:31:28 2020 user.notice shadowsocksr: ssr local error.restart!
Sun Jan 12 08:31:40 2020 user.notice shadowsocksr: ssr local error.restart!
Sun Jan 12 08:31:58 2020 user.notice shadowsocksr: ssr local error.restart!
Sun Jan 12 08:32:10 2020 user.notice shadowsocksr: ssr local error.restart!
Sun Jan 12 08:32:28 2020 user.notice shadowsocksr: ssr local error.restart!
Sun Jan 12 08:32:40 2020 user.notice shadowsocksr: ssr local error.restart!
......

手动点击下更新订阅 如果依然这个错误 可以把订阅链接发给我看一下

问题找到了,不是订阅的锅,是我socks5代理设置的问题

好的

发自我的iPhone

------------------ 原始邮件 ------------------
发件人: EnnawYang <[email protected]>
发送时间: 2020年1月12日 09:08
收件人: coolsnowwolf/lede <[email protected]>
抄送: William Chan <[email protected]>, Author <[email protected]>
主题: 回复:[coolsnowwolf/lede] luci-app-ssr-plus 彻底解决更新订阅慢的问题,顺便兼容SSD节点 (#2721)

我编译的这个订阅功能没有问题。就是隔一段时间 出现err /usr/bin/ssr-redir[22369]: server recv: Connection reset peer,从定向链接被节点重置。那位大侠知道怎么回事吗? 在 2020年1月12日星期日,hzjnet [email protected] 写道:

昨天晚上用的好好的 今天早上起来就发现一大堆错误日志,前面的已经被覆盖了 看不到了,
Sun Jan 12 08:31:28 2020 user.notice shadowsocksr: ssr local error.restart!
Sun Jan 12 08:31:40 2020 user.notice shadowsocksr: ssr local error.restart!
Sun Jan 12 08:31:58 2020 user.notice shadowsocksr: ssr local error.restart!
Sun Jan 12 08:32:10 2020 user.notice shadowsocksr: ssr local error.restart!
Sun Jan 12 08:32:28 2020 user.notice shadowsocksr: ssr local error.restart!
Sun Jan 12 08:32:40 2020 user.notice shadowsocksr: ssr local error.restart!
......

手动点击下更新订阅 如果依然这个错误 可以把订阅链接发给我看一下

问题找到了,不是订阅的锅,是我socks5代理设置的问题


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or unsubscribe.

今天测试了一下订阅,好像出现解析错误

2020-01-11 21:24:55 Shadowsocks/ShadowsocksR 1 Threads Started!
[C]: ?
/usr/share/shadowsocksr/subscribe.lua:284: in main chunk
[C]: in function 'xpcall'
/usr/share/shadowsocksr/subscribe.lua:206: in function
/usr/share/shadowsocksr/subscribe.lua:79: in function 'base64Decode'
/usr/share/shadowsocksr/subscribe.lua:293: in function
2020-01-11 21:24:53 stack traceback:
2020-01-11 21:24:53 更新失败服务正在恢复
2020-01-11 21:24:53 发生错误, 正在恢复服务

image

好像是解析节点有问题,测试节点:

ss://[email protected]:1111#%E6%B5%8B%E8%AF%95%E6%9C%8D%E5%8A%A1

已经更新 看是否可以

2755

今天测试了一下订阅,好像出现解析错误

2020-01-11 21:24:55 Shadowsocks/ShadowsocksR 1 Threads Started!
[C]: ?
/usr/share/shadowsocksr/subscribe.lua:284: in main chunk
[C]: in function 'xpcall'
/usr/share/shadowsocksr/subscribe.lua:206: in function
/usr/share/shadowsocksr/subscribe.lua:79: in function 'base64Decode'
/usr/share/shadowsocksr/subscribe.lua:293: in function
2020-01-11 21:24:53 stack traceback:
2020-01-11 21:24:53 更新失败服务正在恢复
2020-01-11 21:24:53 发生错误, 正在恢复服务

image
好像是解析节点有问题,测试节点:
ss://[email protected]:1111#%E6%B5%8B%E8%AF%95%E6%9C%8D%E5%8A%A1

已经更新 看是否可以

image
不行,算了,我把订阅连接发给你吧,邮箱是[email protected]

今天测试了一下订阅,好像出现解析错误

2020-01-11 21:24:55 Shadowsocks/ShadowsocksR 1 Threads Started!
[C]: ?
/usr/share/shadowsocksr/subscribe.lua:284: in main chunk
[C]: in function 'xpcall'
/usr/share/shadowsocksr/subscribe.lua:206: in function
/usr/share/shadowsocksr/subscribe.lua:79: in function 'base64Decode'
/usr/share/shadowsocksr/subscribe.lua:293: in function
2020-01-11 21:24:53 stack traceback:
2020-01-11 21:24:53 更新失败服务正在恢复
2020-01-11 21:24:53 发生错误, 正在恢复服务

image
好像是解析节点有问题,测试节点:
ss://[email protected]:1111#%E6%B5%8B%E8%AF%95%E6%9C%8D%E5%8A%A1

已经更新 看是否可以

image
不行,算了,我把订阅连接发给你吧,邮箱是[email protected]

对的 因为我测试你上面发的那两条是通了

今天测试了一下订阅,好像出现解析错误

2020-01-11 21:24:55 Shadowsocks/ShadowsocksR 1 Threads Started!
[C]: ?
/usr/share/shadowsocksr/subscribe.lua:284: in main chunk
[C]: in function 'xpcall'
/usr/share/shadowsocksr/subscribe.lua:206: in function
/usr/share/shadowsocksr/subscribe.lua:79: in function 'base64Decode'
/usr/share/shadowsocksr/subscribe.lua:293: in function
2020-01-11 21:24:53 stack traceback:
2020-01-11 21:24:53 更新失败服务正在恢复
2020-01-11 21:24:53 发生错误, 正在恢复服务

image
好像是解析节点有问题,测试节点:
ss://[email protected]:1111#%E6%B5%8B%E8%AF%95%E6%9C%8D%E5%8A%A1

已经更新 看是否可以

image
不行,算了,我把订阅连接发给你吧,邮箱是[email protected]

对的 因为我测试你上面发的那两条是通了

我怀疑里面夹杂了一些奇怪的东西,base64解码是用网页上的,可能少了一些。
邮件已经发送,注意查收。

@caicaicai21 改是改好了 但是你提供给我的 格式很奇怪我不清楚哪一种才是正确的格式

因为的连接中 包含两种 我先提交上来 你试一下

@caicaicai21 改是改好了 但是你提供给我的 格式很奇怪我不清楚哪一种才是正确的格式

因为的连接中 包含两种 我先提交上来 你试一下

image
测试通过。有两种格式的话,有一种应该就是其他的信息,例如:剩余流量xxx。

我帮你测过时没问题的

ss的连接太奇怪了 password部分 有些base64有些没有
有些整个连接base64 有些部分字段base64 搞不明白

我帮你测过时没问题的

ss的连接太奇怪了 password部分 有些base64有些没有
有些整个连接base64 有些部分字段base64 搞不明白

每个机场都瞎搞呗,有些又不遵循规则。

我帮你测过时没问题的

ss的连接太奇怪了 password部分 有些base64有些没有
有些整个连接base64 有些部分字段base64 搞不明白

是这样的,ss的链接有两种格式。
一种是最开始就支持的,格式如下:

BASE64 encoded URI format configs:

ss://BASE64-ENCODED-STRING-WITHOUT-PADDING#TAG

也就是对method:password@ip:port部分整体进行一次base64,你可以看这个页面 https://shadowsocks.org/en/config/quick-guide.html

另一种就是新增的sip002格式,只对userinfo部分进行base64。

目前国内机场提供的订阅链接通常都是sip002格式的。
然而因为ss官方客户端都不支持sip002格式,于是机场们单个节点提供链接的时候就又是第一种格式了(目前sspanel的似乎都是这样)…

我发现我进了个坑啊,之前shell处理的应该也没有那么全。

发自我的iPhone

------------------ 原始邮件 ------------------
发件人: adamw92 <[email protected]>
发送时间: 2020年1月12日 16:15
收件人: coolsnowwolf/lede <[email protected]>
抄送: William Chan <[email protected]>, Author <[email protected]>
主题: 回复:[coolsnowwolf/lede] luci-app-ssr-plus 彻底解决更新订阅慢的问题,顺便兼容SSD节点 (#2721)

我帮你测过时没问题的

ss的连接太奇怪了 password部分 有些base64有些没有
有些整个连接base64 有些部分字段base64 搞不明白

是这样的,ss的链接有两种格式。
一种是最开始就支持的,格式如下:

BASE64 encoded URI format configs:

ss://BASE64-ENCODED-STRING-WITHOUT-PADDING#TAG

也就是对method:password@ip:port部分整体进行一次base64,你可以看这个页面 https://shadowsocks.org/en/config/quick-guide.html

另一种就是新增的sip002格式,只对userinfo部分进行base64。

目前国内机场提供的订阅链接通常都是sip002格式的。
然而因为ss官方客户端都不支持sip002格式,于是机场们单个节点提供链接的时候就又是第一种格式了(目前sspanel的似乎都是这样)…


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or unsubscribe.

@adamw92 看样子SS是最麻烦的 其他的都还好 怪不得我以前用SS客户端的时候 有些很乱

我发现我进了个坑啊,之前shell处理的应该也没有那么全。 发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: adamw92 <[email protected]> 发送时间: 2020年1月12日 16:15 收件人: coolsnowwolf/lede <[email protected]> 抄送: William Chan <[email protected]>, Author <[email protected]> 主题: 回复:[coolsnowwolf/lede] luci-app-ssr-plus 彻底解决更新订阅慢的问题,顺便兼容SSD节点 (#2721) 我帮你测过时没问题的 ss的连接太奇怪了 password部分 有些base64有些没有 有些整个连接base64 有些部分字段base64 搞不明白 是这样的,ss的链接有两种格式。 一种是最开始就支持的,格式如下: BASE64 encoded URI format configs: ss://BASE64-ENCODED-STRING-WITHOUT-PADDING#TAG 也就是对method:password@ip:port部分整体进行一次base64,你可以看这个页面 https://shadowsocks.org/en/config/quick-guide.html 另一种就是新增的sip002格式,只对userinfo部分进行base64。 目前国内机场提供的订阅链接通常都是sip002格式的。 然而因为ss官方客户端都不支持sip002格式,于是机场们单个节点提供链接的时候就又是第一种格式了(目前sspanel的似乎都是这样)… — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

之前的shell处理的是sip002格式的,机场们提供的订阅也是sip002。
ssr+插件单独添加节点信息的那里的导入节点链接支持的是普通的ss链接,订阅不需要再支持了…
订阅支持sip002格式就好了,验证的时候也用sip002去验证。
需要sip002格式的订阅用于验证我可以发给你

这个我已经支持了,两种都做了容错处理。

发自我的iPhone

------------------ 原始邮件 ------------------
发件人: adamw92 <[email protected]>
发送时间: 2020年1月12日 21:59
收件人: coolsnowwolf/lede <[email protected]>
抄送: William Chan <[email protected]>, Author <[email protected]>
主题: 回复:[coolsnowwolf/lede] luci-app-ssr-plus 彻底解决更新订阅慢的问题,顺便兼容SSD节点 (#2721)

我发现我进了个坑啊,之前shell处理的应该也没有那么全。 发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: adamw92 <[email protected]> 发送时间: 2020年1月12日 16:15 收件人: coolsnowwolf/lede <[email protected]> 抄送: William Chan <[email protected]>, Author <[email protected]> 主题: 回复:[coolsnowwolf/lede] luci-app-ssr-plus 彻底解决更新订阅慢的问题,顺便兼容SSD节点 (#2721) 我帮你测过时没问题的 ss的连接太奇怪了 password部分 有些base64有些没有 有些整个连接base64 有些部分字段base64 搞不明白 是这样的,ss的链接有两种格式。 一种是最开始就支持的,格式如下: BASE64 encoded URI format configs: ss://BASE64-ENCODED-STRING-WITHOUT-PADDING#TAG 也就是对method:password@ip:port部分整体进行一次base64,你可以看这个页面 https://shadowsocks.org/en/config/quick-guide.html 另一种就是新增的sip002格式,只对userinfo部分进行base64。 目前国内机场提供的订阅链接通常都是sip002格式的。 然而因为ss官方客户端都不支持sip002格式,于是机场们单个节点提供链接的时候就又是第一种格式了(目前sspanel的似乎都是这样)… — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

之前的shell处理的是sip002格式的,机场们提供的订阅也是sip002。
ssr+插件单独添加节点信息的那里的导入节点链接处理的就是这个格式。
订阅支持sip002格式就好了,验证的时候也用sip002去验证。
需要sip002格式的订阅用于验证我可以发给你


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or unsubscribe.

用v2rayN客户端导出的服务器订阅内容不能被解析,报错:

2020-01-13 00:33:57 发生错误, 正在恢复服务

    [C]: ?
    /usr/share/shadowsocksr/subscribe.lua:284: in main chunk
    [C]: in function 'xpcall'
    /usr/share/shadowsocksr/subscribe.lua:206: in function 
 </usr/share/shadowsocksr/subscribe.lua:160>
    /usr/share/shadowsocksr/subscribe.lua:79: in function 'base64Decode'
    /usr/share/shadowsocksr/subscribe.lua:286: in function
</usr/share/shadowsocksr/subscribe.lua:284>
 2020-01-13 00:33:57 stack traceback:
 2020-01-13 00:33:57 /usr/share/shadowsocksr/subscribe.lua:79: attempt to index a nil value

 2020-01-13 00:33:57 (2.99 MB/s) - written to stdout [441/441]

      0K                                                       100% 2.99M=0s

 Saving to: 'STDOUT'
 Length: 441 [application/octet-stream]
 HTTP request sent, awaiting response... 200 OK

之前的shell版本可以识别的虽然也报有一个错误提示 base64: invalid input,但是至少能用

v2rayN客户端导出的服务器订阅内容是这样的:

dm1lc3M6Ly9ldzBLSUNBaWRpSTZJQ0l5SWl3TkNpQWdJbkJ6SWpvZ0luUmxjM1FpTEEwS0lDQWlZV1JrSWpvZ0luZDNkeTVtY21WbE5qWTJOaTV1WlhRaUxBMEtJQ0FpY0c5eWRDSTZJQ0kwTkRNaUxBMEtJQ0FpYVdRaU9pQWlNVE00TW1WbFpHSXRaR0UzWlMwMFpqUm1MVGczWkRRdE1qbGhaREF3WlRneE9EZGlJaXdOQ2lBZ0ltRnBaQ0k2SUNJMk5DSXNEUW9nSUNKdVpYUWlPaUFpZDNNaUxBMEtJQ0FpZEhsd1pTSTZJQ0p1YjI1bElpd05DaUFnSW1odmMzUWlPaUFpSWl3TkNpQWdJbkJoZEdnaU9pQWlMekU0TkRJMU56TTVMeUlzRFFvZ0lDSjBiSE1pT2lBaWRHeHpJZzBLZlE9PQ0K

根据最新的pr修改看是否可以

发自我的iPhone

------------------ 原始邮件 ------------------
发件人: QING LIU <[email protected]>
发送时间: 2020年1月13日 00:44
收件人: coolsnowwolf/lede <[email protected]>
抄送: William Chan <[email protected]>, Author <[email protected]>
主题: 回复:[coolsnowwolf/lede] luci-app-ssr-plus 彻底解决更新订阅慢的问题,顺便兼容SSD节点 (#2721)

用v2rayN客户端导出的服务器订阅内容不能被解析,报错:
2020-01-13 00:33:57 发生错误, 正在恢复服务 [C]: ? /usr/share/shadowsocksr/subscribe.lua:284: in main chunk [C]: in function 'xpcall' /usr/share/shadowsocksr/subscribe.lua:206: in function lua:160> /usr/share/shadowsocksr/subscribe.lua:79: in function 'base64Decode' /usr/share/shadowsocksr/subscribe.lua:286: in function lua:284> 2020-01-13 00:33:57 stack traceback: 2020-01-13 00:33:57 /usr/share/shadowsocksr/subscribe.lua:79: attempt to index a nil value 2020-01-13 00:33:57 (2.99 MB/s) - written to stdout [441/441] 0K 100% 2.99M=0s Saving to: 'STDOUT' Length: 441 [application/octet-stream] HTTP request sent, awaiting response... 200 OK
之前的shell版本可以识别的虽然也报有一个错误提示 base64: invalid input,但是至少能用

v2rayN客户端导出的服务器订阅内容是这样的:

dm1lc3M6Ly9ldzBLSUNBaWRpSTZJQ0l5SWl3TkNpQWdJbkJ6SWpvZ0luUmxjM1FpTEEwS0lDQWlZV1JrSWpvZ0luZDNkeTVtY21WbE5qWTJOaTV1WlhRaUxBMEtJQ0FpY0c5eWRDSTZJQ0kwTkRNaUxBMEtJQ0FpYVdRaU9pQWlNVE00TW1WbFpHSXRaR0UzWlMwMFpqUm1MVGczWkRRdE1qbGhaREF3WlRneE9EZGlJaXdOQ2lBZ0ltRnBaQ0k2SUNJMk5DSXNEUW9nSUNKdVpYUWlPaUFpZDNNaUxBMEtJQ0FpZEhsd1pTSTZJQ0p1YjI1bElpd05DaUFnSW1odmMzUWlPaUFpSWl3TkNpQWdJbkJoZEdnaU9pQWlMekU0TkRJMU56TTVMeUlzRFFvZ0lDSjBiSE1pT2lBaWRHeHpJZzBLZlE9PQ0K


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or unsubscribe.

根据最新的pr修改看是否可以 发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: QING LIU <[email protected]> 发送时间: 2020年1月13日 00:44 收件人: coolsnowwolf/lede <[email protected]> 抄送: William Chan <[email protected]>, Author <[email protected]> 主题: 回复:[coolsnowwolf/lede] luci-app-ssr-plus 彻底解决更新订阅慢的问题,顺便兼容SSD节点 (#2721) 用v2rayN客户端导出的服务器订阅内容不能被解析,报错: 2020-01-13 00:33:57 发生错误, 正在恢复服务 [C]: ? /usr/share/shadowsocksr/subscribe.lua:284: in main chunk [C]: in function 'xpcall' /usr/share/shadowsocksr/subscribe.lua:206: in function lua:160> /usr/share/shadowsocksr/subscribe.lua:79: in function 'base64Decode' /usr/share/shadowsocksr/subscribe.lua:286: in function lua:284> 2020-01-13 00:33:57 stack traceback: 2020-01-13 00:33:57 /usr/share/shadowsocksr/subscribe.lua:79: attempt to index a nil value 2020-01-13 00:33:57 (2.99 MB/s) - written to stdout [441/441] 0K 100% 2.99M=0s Saving to: 'STDOUT' Length: 441 [application/octet-stream] HTTP request sent, awaiting response... 200 OK 之前的shell版本可以识别的虽然也报有一个错误提示 base64: invalid input,但是至少能用 v2rayN客户端导出的服务器订阅内容是这样的: dm1lc3M6Ly9ldzBLSUNBaWRpSTZJQ0l5SWl3TkNpQWdJbkJ6SWpvZ0luUmxjM1FpTEEwS0lDQWlZV1JrSWpvZ0luZDNkeTVtY21WbE5qWTJOaTV1WlhRaUxBMEtJQ0FpY0c5eWRDSTZJQ0kwTkRNaUxBMEtJQ0FpYVdRaU9pQWlNVE00TW1WbFpHSXRaR0UzWlMwMFpqUm1MVGczWkRRdE1qbGhaREF3WlRneE9EZGlJaXdOQ2lBZ0ltRnBaQ0k2SUNJMk5DSXNEUW9nSUNKdVpYUWlPaUFpZDNNaUxBMEtJQ0FpZEhsd1pTSTZJQ0p1YjI1bElpd05DaUFnSW1odmMzUWlPaUFpSWl3TkNpQWdJbkJoZEdnaU9pQWlMekU0TkRJMU56TTVMeUlzRFFvZ0lDSjBiSE1pT2lBaWRHeHpJZzBLZlE9PQ0K — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

试了一下你新pr的,可以解析订阅服务器了,谢谢

好东东 👍

楼主厉害,订阅更新非常快

  1. 有一种可能需要处理一下,将非标准的Base64中_-替换为+/后再进行encode
    因为编码后的+/=字符,标准的Base64并不适合直接放在URL里传输,有一些Base64的变种,它们将+/等符号转换为其他符号(如_-),这样就能安全的在URL中传输(Url Safe)了
    摘自 https://1024tools.com/base64
  2. 节点的分割还有一种情况是按空格分隔,可能也需要处理一下,代码中好像只处理了按\n分割的节点信息

第一个处理了 第二个不是很清楚现在

发自我的iPhone

------------------ 原始邮件 ------------------
发件人: Max Zhao <[email protected]>
发送时间: 2020年1月13日 17:01
收件人: coolsnowwolf/lede <[email protected]>
抄送: William Chan <[email protected]>, Author <[email protected]>
主题: 回复:[coolsnowwolf/lede] luci-app-ssr-plus 彻底解决更新订阅慢的问题,顺便兼容SSD节点 (#2721)

第一个处理了 第二个不是很清楚现在 发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: Max Zhao <[email protected]> 发送时间: 2020年1月13日 17:01 收件人: coolsnowwolf/lede <[email protected]> 抄送: William Chan <[email protected]>, Author <[email protected]> 主题: 回复:[coolsnowwolf/lede] luci-app-ssr-plus 彻底解决更新订阅慢的问题,顺便兼容SSD节点 (#2721)

我的错,看到代码了,第一个处理了,
第二种应该是没处理的,我这触发了个错误

2020-01-13 16:20:29 发生错误, 正在恢复服务
    [C]: ?
    /usr/share/shadowsocksr/subscribe.lua:328: in main chunk
    [C]: in function 'xpcall'
    /usr/share/shadowsocksr/subscribe.lua:249: in function </usr/share/shadowsocksr/subscribe.lua:199>
    /usr/share/shadowsocksr/subscribe.lua:125: in function 'processData'
    /usr/share/shadowsocksr/subscribe.lua:29: in function 'split'
    /usr/share/shadowsocksr/subscribe.lua:330: in function </usr/share/shadowsocksr/subscribe.lua:328>
2020-01-13 16:20:29 stack traceback:
2020-01-13 16:20:29 /usr/share/shadowsocksr/subscribe.lua:29: attempt to index local 'full' (a nil value)

我手动修改了一下subscribe.lua这行代码node = split(base64Decode(raw, true):gsub(" ", "\n"), "\n")后可以正确处理了

ps: 不会lua 现查的lua的文档,可能处理的不好

没什么大问题 就这样改吧 你提pr

发自我的iPhone

------------------ 原始邮件 ------------------
发件人: Max Zhao <[email protected]>
发送时间: 2020年1月13日 17:45
收件人: coolsnowwolf/lede <[email protected]>
抄送: William Chan <[email protected]>, Author <[email protected]>
主题: 回复:[coolsnowwolf/lede] luci-app-ssr-plus 彻底解决更新订阅慢的问题,顺便兼容SSD节点 (#2721)

我手动修改了一下subscribe.lua这行代码node = split(base64Decode(raw, true):gsub(" ", "\n"), "\n")后可以正确处理了

image
俺也一样,但是略有不同,这样改还是不行

我手动修改了一下subscribe.lua这行代码node = split(base64Decode(raw, true):gsub(" ", "\n"), "\n")后可以正确处理了

image
俺也一样,但是略有不同,这样改还是不行

你的情况可能和我的不一样,看错误,你应该使用的是v2ray的订阅链接,其返回内容的json格式可能不对,你可以检查一下

我手动修改了一下subscribe.lua这行代码node = split(base64Decode(raw, true):gsub(" ", "\n"), "\n")后可以正确处理了

image
俺也一样,但是略有不同,这样改还是不行

你的情况可能和我的不一样,看错误,你应该使用的是v2ray的订阅链接,其返回内容的json格式可能不对,你可以检查一下

v2ray 订阅

我手动修改了一下subscribe.lua这行代码node = split(base64Decode(raw, true):gsub(" ", "\n"), "\n")后可以正确处理了

image
俺也一样,但是略有不同,这样改还是不行

v2ray 订阅 json解析失败了 又是什么独特的格式吗?

可以加入对obfs插件的支援么?

v2ray 订阅 json解析失败了 又是什么独特的格式吗?

不知道,报错虽稍微不同但仍然是这个Bug#2748

v2ray 订阅 json解析失败了 又是什么独特的格式吗?

不知道,报错虽稍微不同但仍然是这个Bug#2748

擦,两个换行,我好像发现问题了

嗯空字符串转换json的问题

各位 剩下的靠你们解决一下 我写好了 trim 函数的 我最近会有些忙

v2ray 订阅 json解析失败了 又是什么独特的格式吗?

不知道,报错虽稍微不同但仍然是这个Bug#2748

已处理
PR #2770

节点为空 应该和trim还有0有关 lua的行为和c是一致的 可以从这个方面排查下

发自我的iPhone

------------------ 原始邮件 ------------------
发件人: Max Zhao <[email protected]>
发送时间: 2020年1月15日 00:16
收件人: coolsnowwolf/lede <[email protected]>
抄送: William Chan <[email protected]>, Author <[email protected]>
主题: 回复:[coolsnowwolf/lede] luci-app-ssr-plus 彻底解决更新订阅慢的问题,顺便兼容SSD节点 (#2721)

v2ray的订阅格式有两个版本了,之前的version 1已经找不到说明了,只有version 2版本的(分享链接格式说明(ver-2)
是否还要继续支持version1的订阅格式

v2ray的订阅格式有两个版本了,之前的version 1已经找不到说明了,只有version 2版本的(分享链接格式说明(ver-2)
是否还要继续支持version1的订阅格式

哈哈 太复杂了 v2ray 我看了之前的 shell 脚本支持的也不全 我看PR有人改了一点

所以为啥机场用 SSR 这么多明白了吧? 因为 SSR 的标准很明确

v2ray的订阅格式有两个版本了,之前的version 1已经找不到说明了,只有version 2版本的([分享链接格式说明(ver-2)]

我找到了这个,不知有没有帮助 添加v2ray订阅ver1格式的支持

@SimonsQiu ssr+本身不支持obfs插件,订阅支持了有啥用?

@SimonsQiu ssr+本身不支持obfs插件,订阅支持了有啥用?

是的,SSR不支持呀。订阅支持没有任何的意义,SS才支持。

Was this page helpful?
0 / 5 - 0 ratings

Related issues

nonicknamelala picture nonicknamelala  ·  5Comments

9000000 picture 9000000  ·  4Comments

dysl357085918 picture dysl357085918  ·  3Comments

Fr33raNg3r picture Fr33raNg3r  ·  5Comments

KangKai1982 picture KangKai1982  ·  3Comments