Git Product home page Git Product logo

yint-tech / sekiro-open Goto Github PK

View Code? Open in Web Editor NEW
1.7K 47.0 510.0 369 KB

SEKIRO is a multi-language, distributed, network topology-independent service publishing platform. By writing handlers in their respective languages, functionalities can be published to the central API marketplace. Business systems utilize the capabilities of remote nodes through RPC.

Home Page: https://sekiro.iinti.cn/sekiro-doc/

Java 99.69% Shell 0.31%

sekiro-open's Introduction

Sekiro English

SEKIRO是一个多语言的、分布式、网络拓扑无关的服务发布平台,通过书写各自语言的handler将功能发布到中心API市场,业务系统通过RPC的方式使用远端节点的能力。

更多介绍,请参考详细文档: http://sekiro.iinti.cn/sekiro-doc/

各语言样例代码: https://github.com/yint-tech/sekiro-samples

安装包下载:iinti sekiro-demo https://oss.iinti.cn/sekiro/sekiro-demo

Sekiro是一个RPC框架

sekiro主要支持多节点的程序调用,所以他归属于RPC(Remote Procedure Call)框架:API管理、鉴权、分布式、负载均衡、跨语言

Sekiro不是常规意义的RPC框架

通常情况下,在后端微服务下RPC框架主要用于拆分复杂业务模块,以及多节点集群提升单机性能瓶颈的能力。他们一般是单个机房下业务机器组,调用其他业务机器组。 Dubbo、springCloud、grpc便是目前市面上具有代表性的RPC解决方案,并且他们都是世界顶级的项目。然而Sekiro并不是解决这种常规RPC能力场景的方案。

Sekiro主要提供的功能是: 受限上下文环境下的功能外放,服务提供者(provider)运行在一个受限环境中,导致这个服务不能作为一个普通的算法方便的转移到内部服务,而此时我们的业务又希望可以使用这种受限环境下的功能。

  • 一个加密算法,运行在客户端程序中,服务需要使用它但是没有完成这个算法的破译,可以通过sekiro注入代码到这个客户端,然后发布算法的API
  • 一份数据,由于权限限制,仅允许在机构内网使用(机构来源ip检查),但是我们希望在外部服务调用。可以在机构内网书写sekiro客户端,实现API发布
  • app(或者终端)程序,存在给C端客人使用的能力,但是我们希望在B端业务能够使用这个能力,那么通过Sekiro连接他,B端参数转发到app中,使用app代理调用能力:(这就是爬虫行业所谓的RPC爬虫)
  • 服务提供者有一个能力需要给其他人使用,但是不希望交付代码,以及不希望泄漏这个服务对应的机器(IP地址等),那么可以通过sekiro发布服务。其他人只能通过sekiro使用能力,而无法了解这个能力的任何细节。
  • 一个算法,需要复杂的计算环境,无法在外部服务轻松部署,那么可以使用Sekiro,将API寄身在可用环境上,然后export到外部

核心流程

  1. 存在一个中心服务器:sekiro中心服务,他需要服务器端,可以被consumer和provider连接
  2. 存在多种语言的客户端,java、js、python等,并且使用这些语言实现了和sekiro中心服务器的通信和API包装
  3. 用户在各自语言中,使用sekiro客户端API编写handler,用于接受参数并且完成到真实能力的转发调用,连接sekiro服务和本地环境服务
  4. 外部用户调用sekiro中心服务API,被sekiro服务转发到对应的客户端handler,获得调用结果后,原链路返回给用户

构建教程

  • 安装Java
  • 安装maven
  • Linux/mac下,执行脚本:build_demo_server.sh,得到文件target/sekiro-open-demo.zip极为产出文件
  • 运行脚本:bin/sekiro.shbin/sekiro.bat
  • 文档: http://127.0.0.1:5612/sekiro-doc 假设你的服务部署在本机:127.0.0.1

安装包

sekiro-open's People

Contributors

dependabot[bot] avatar iinti avatar liguobao avatar virjar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sekiro-open's Issues

当我在服务器部署完以后,需要备案?

背景:家庭的公网ip,阿里云的域名
操作:当使用阿里云的域名解析到家庭公网ip时,其他端口包括建站等一切正常,当运行sekiro并成功搭建好后,直接访问域名:5612,会显示要备案,和阿里的售后沟通后说是这个项目可能用了反向代理,去获取阿里云资源了,这个是我这边的问题嘛?要购买商业版吗?不太清楚。
image
image

sekiro: create connection failed,reconnect after 2s

请问下这个一直报这个错误的原因是什么,windows运行了sekiro.bat 之前没有问题,今天使用这个突然疯狂报这个错误,一直无法连接上wss,用的是最新的1109的包,加上官网最新下载的JAVA
微信图片_20231229233227

退出APP时,Sekiro没有及时退出。

退出APP后,Sekiro没有及时退出,导致再次打开APP的时候,会抛出action registered already。(几率发生)
是否应该有结束Sekiro的方法,来控制Sekiro的生命周期。

sekiro心跳显示连接成功,但是客户端却一直掉线(channel.isActive() == false)

最近在尝试使用最新版本的sekiro,发现一个现象:过了一段时间后,客户端显示掉线,但是日志上服务端与客户端的心跳连接正常。在这种情况下,有时候隔大约几个小时客户端会重连成功(channel.isActive=true),有时候就一直是【服务端显示心跳正常,但是对应的channel.isActive==false】除非重启服务端。大佬有遇到过这种情况么,有啥解决思路没?

调用时传参数自动排序

传参是这样的,因为是MD5,顺序不能变,但是发现传入参数之后自动给排序了,hash之后结果不对
image

image 直接调用加密函数是这样的 image

折磨好长时间, 怎么解决。

pool queue empty for group:test

failed to connect to localhost/127.0.0.1 (port 5600): isConnected failed: ECONNREFUSED (Connection refused): localhost

请问怎么解决

设备无限重连

设备型号:Redmi 6,连接相同服务器 XiaoMi 8没问题,连接官方测试地址也没问题https://sekiro.virjar.com

2021-11-24 16:13:32.515 25525-25797/? I/Sekiro: [sekiroGroup:test][clientId:1][KEY_SERVER_HOST:example.com] connect to sekiro server success
2021-11-24 16:13:32.781 25525-25826/? I/Sekiro: [sekiroGroup:test][clientId:1][KEY_SERVER_HOST:example.com] begin to connect to upstream
2021-11-24 16:13:32.839 25525-25830/? I/Sekiro: [sekiroGroup:test][clientId:1][KEY_SERVER_HOST:example.com] connect to sekiro server success
2021-11-24 16:13:33.068 25525-25858/? I/Sekiro: [sekiroGroup:test][clientId:1][KEY_SERVER_HOST:example.com] begin to connect to upstream
2021-11-24 16:13:33.122 25525-25859/? I/Sekiro: [sekiroGroup:test][clientId:1][KEY_SERVER_HOST:example.com] connect to sekiro server success
2021-11-24 16:13:33.498 25525-25888/? I/Sekiro: [sekiroGroup:test][clientId:1][KEY_SERVER_HOST:example.com] begin to connect to upstream
2021-11-24 16:13:34.030 25525-25895/? I/Sekiro: [sekiroGroup:test][clientId:1][KEY_SERVER_HOST:example.com] connect to sekiro server success
2021-11-24 16:13:34.463 25525-25931/? I/Sekiro: [sekiroGroup:test][clientId:1][KEY_SERVER_HOST:example.com] begin to connect to upstream
2021-11-24 16:13:35.552 25525-25932/? I/Sekiro: [sekiroGroup:test][clientId:1][KEY_SERVER_HOST:example.com] connect to sekiro server success
2021-11-24 16:13:35.774 25525-25636/? I/Sekiro: [sekiroGroup:test][clientId:1][KEY_SERVER_HOST:example.com] begin to connect to upstream
2021-11-24 16:13:35.835 25525-25638/? I/Sekiro: [sekiroGroup:test][clientId:1][KEY_SERVER_HOST:example.com] connect to sekiro server success
2021-11-24 16:13:36.045 25525-25736/? I/Sekiro: [sekiroGroup:test][clientId:1][KEY_SERVER_HOST:example.com] begin to connect to upstream
2021-11-24 16:13:36.119 25525-25737/? I/Sekiro: [sekiroGroup:test][clientId:1][KEY_SERVER_HOST:example.com] connect to sekiro server success
2021-11-24 16:13:36.268 25525-25759/? I/Sekiro: [sekiroGroup:test][clientId:1][KEY_SERVER_HOST:example.com] begin to connect to upstream
2021-11-24 16:13:36.306 25525-25760/? I/Sekiro: [sekiroGroup:test][clientId:1][KEY_SERVER_HOST:example.com] connect to sekiro server success
2021-11-24 16:13:36.459 25525-25794/? I/Sekiro: [sekiroGroup:test][clientId:1][KEY_SERVER_HOST:example.com] begin to connect to upstream
2021-11-24 16:13:36.540 25525-25797/? I/Sekiro: [sekiroGroup:test][clientId:1][KEY_SERVER_HOST:example.com] connect to sekiro server success

如何设置超时时间

你好 请问如何能够设置超时时间,我想在执行sekiroResponse.success()之前,多一些时间去处理

Frida配合sekiro 参数params是否有长度限制

我这边采用Frida配和sekiro使用的 使用get请求 但是我的params过长4000多,调用时会直接报错,如果我采用post的话 Frida的js文件 如何修改去支持post接受参数

params过长的错误:

<title>未找到页面 – 成都因体信息技术有限公司</title>

Uncaught TypeError: this.socket.onmessage is not a function

在服务器运行完build_demo_server.sh后,将生成的.zip解压,在服务器运行sekiro.sh,可以成功运行,但是当连接的时候会报这个错误。
image

当我在本地运行sekiro.bat时,可以正常连接
QQ截图20230217095642

是因为我用的网站要求https,但我用了ws嘛?

Failed to execute goal on project sekiro-open-demo

Could not resolve dependencies for project cn.iinti.sekiro.business:sekiro-open-demo:jar:0.0.1: The following artifacts could not be resolved: cn.iinti.sekiro3.business:sekiro-business-api:jar:1.0, cn.iinti.sekiro3.business:sekiro-netty-codec-http:jar:1.0: cn.iinti.sekiro3.business:sekiro-business-api:jar:1.0 was not found in http://maven.aliyun.com/nexus/content/groups/public during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of ali has elapsed or updates are forced
在Mac上面出现这样的问题 需要怎么解决

参数中的clientId没起作用

请求的时候还是会显示不同手机的数据,好像是轮循手机数据,参数中的clientId完全不起作用,

注:自己部署的服务器端,未做任何修改

封号问题

和Xposed框架一起使用,不会导致微信封号吗?

日志:java.lang.NoSuchMethodError: java.nio.ByteBuffer.clear()Ljava/nio/ByteBuffer;

java.lang.NoSuchMethodError: java.nio.ByteBuffer.clear()Ljava/nio/ByteBuffer;
[2024-07-14 09:28:13,176 [eventRecorder]  INFO EventTrace:147]  sessionId:f61bfb8f-f91d-4eb9-9337-daa74bf7fb0e -> 	at cn.iinti.sekiro3.business.netty.buffer.UnpooledUnsafeDirectByteBuf.setBytes(UnpooledUnsafeDirectByteBuf.java:360)
[2024-07-14 09:28:13,177 [eventRecorder]  INFO EventTrace:147]  sessionId:f61bfb8f-f91d-4eb9-9337-daa74bf7fb0e -> 	at cn.iinti.sekiro3.business.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:899)
[2024-07-14 09:28:13,177 [eventRecorder]  INFO EventTrace:147]  sessionId:f61bfb8f-f91d-4eb9-9337-daa74bf7fb0e -> 	at cn.iinti.sekiro3.business.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:276)
[2024-07-14 09:28:13,177 [eventRecorder]  INFO EventTrace:147]  sessionId:f61bfb8f-f91d-4eb9-9337-daa74bf7fb0e -> 	at cn.iinti.sekiro3.business.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:119)
[2024-07-14 09:28:13,178 [eventRecorder]  INFO EventTrace:147]  sessionId:f61bfb8f-f91d-4eb9-9337-daa74bf7fb0e -> 	at cn.iinti.sekiro3.business.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:643)
[2024-07-14 09:28:13,178 [eventRecorder]  INFO EventTrace:147]  sessionId:f61bfb8f-f91d-4eb9-9337-daa74bf7fb0e -> 	at cn.iinti.sekiro3.business.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:566)
[2024-07-14 09:28:13,178 [eventRecorder]  INFO EventTrace:147]  sessionId:f61bfb8f-f91d-4eb9-9337-daa74bf7fb0e -> 	at cn.iinti.sekiro3.business.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:480)
[2024-07-14 09:28:13,178 [eventRecorder]  INFO EventTrace:147]  sessionId:f61bfb8f-f91d-4eb9-9337-daa74bf7fb0e -> 	at cn.iinti.sekiro3.business.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:442)
[2024-07-14 09:28:13,178 [eventRecorder]  INFO EventTrace:147]  sessionId:f61bfb8f-f91d-4eb9-9337-daa74bf7fb0e -> 	at cn.iinti.sekiro3.business.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:131)
[2024-07-14 09:28:13,179 [eventRecorder]  INFO EventTrace:147]  sessionId:f61bfb8f-f91d-4eb9-9337-daa74bf7fb0e -> 	at cn.iinti.sekiro3.business.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144)
[2024-07-14 09:28:13,179 [eventRecorder]  INFO EventTrace:147]  sessionId:f61bfb8f-f91d-4eb9-9337-daa74bf7fb0e -> 	at java.lang.Thread.run(Thread.java:748)

下载open版本2024的20240313在centos上运行,jdk版本1.8,然后访问http://ip:5612/business-demo/groupList显示ERR_CONNECTION_RESET,再发现日志就有这个错误,一直在刷
image
image

偶发502错误,xposed的afterHookedMethod方法里有时候获取不到sekiroResponse

sekiro由于异步的关系,afterHookedMethod里出发hook,有时候获取不到sekiroResponse,web发送请求的时候偶发502错误。是代码结构的问题吗?

谢谢

代码如下

`sekiroClient = SekiroClient.start("11.11.11.11", "client-2", "hello-sekiro");

sekiroClient.registerHandler("my_action",new SekiroRequestHandler() {
@OverRide
public void handleRequest(SekiroRequest sekiroRequest, SekiroResponse sekiroResponse) {

    Model myModel= Model.newInstance();
    Store.requestTaskMapResponse.put(myModel, sekiroResponse);

    findAndHookMethod("com.sun.test", loadPackageParam.classLoader, "a", String.class, Map.class, new XC_MethodHook() {

        @Override
        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {

            Model myModel= Model.newInstance();

            if (myModel.getPointer() == null) {

                myModel.setPointer(param.thisObject);
            } else {

                SekiroRequest sekiroRequest = Store.requestTaskMapRequest.remove(myModel);
                if (sekiroRequest != null) {

                    String doAction = sekiroRequest.getString("do_action");
                    Logcat.i("sekiro_doAction", doAction);

                }

            }

        }

        @Override
        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
            Logcat.i("tt_afterHookedMethod");

            JSONObject jsonObject = new JSONObject();

            Model myModel= Model.newInstance();

            if (myModel.getPointer() == null) {

                myModel.setPointer(param.thisObject);
            } else {

                SekiroResponse sekiroResponse = Store.requestTaskMapResponse.remove(myModel);
                if (sekiroResponse != null) {
                    sekiroResponse.send(jsonObject.toString());
                }
            }

        }
    });

}

});`

处理io.netty的问题

我使用这个框架,注入到某手app中。遇到和它本身的io.netty包相关的类名冲突问题,导致无法进行解析初始化

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.