首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

内存马的攻防博弈之旅之gRPC内存马

双向流和集成身份验证 双向流和完全集成的插拔身份验证与基于 HTTP/2 的传输。 gRPC以其高效的性能,现在微服务架构中越来越流行。...完整代码: https://github.com/snailll/gRPCDemo 创建一个简单User服务,gRPC基于 ProtoBuf(Protocol Buffers) [2] 序列化协议开发...启动时创建services列表,添加所有的gRPC的接口的定义,并设置为unmodifiable; 2. 请求时判断调用的接口是否接口列表列表中就调用对应的实现类。...通过java的反射机制,就可以获取到此属性。 图2 请求的services对象 对于已经设置为unmodifiable的services对象,往里面直接put元素会抛出异常。...4.3 利用构造 通过java序列化等漏洞我们可以利用java的反射机制实现动态注入接口,修改services对象注入内存马接口,因为PoC包含攻击性暂不提供。

94420

06-gRPC收发请求过程解析

Maven 工程用Maven 插件也生成同样代码。...这对gRPC 使用者完全透明,我们只需关注是怎么创建出 stub 对象。 只有二进制才能在网络传输,但若调用端代码入参是个字符对象gRPC怎么把对象转成二进制数据?...即MethodDescriptor存储一些 RPC 调用过程的元数据,MethodDescriptor 里面 requestMarshaller 是绑定请求的候,用来序列化方式对象,所以调用 method.streamRequest...; import io.grpc.Server; import io.grpc.ServerBuilder; import io.grpc.stub.StreamObserver; import java.io.IOException...总的来说,其实我们可以简单地认为gRPC 就是采用 HTTP/2 协议,并且默认采用 PB 序列化方式的一种 RPC,它充分利用了 HTTP/2 的多路复用特性,使得我们可以同一条链路上双向发送不同的

66840
您找到你想要的搜索结果了吗?
是的
没有找到

分布式链路追踪 SkyWalking 源码分析 —— DataCarrier 异步处理库

通过 workerId ,可以查找 Graph 对象的 Worker 对象,从而 Graph 的流式处理。...在上文中,我们可以看到发送给 Collector 是 Data 对象,而 Data 是数据的抽象类,具体反序列化 Data 对象之前,程序是无法得知它是 Data 的哪个实现对象。...这个时候,我们可以给 Data 对象的每个实现类,生成一个对应的数据协议编号。 发送数据之前,序列化 Data 对象时,增加该 Data 对应的协议编号,一起发送。...接收数据之后,反序列化数据时,根据协议编号,创建 Data 对应的实现类对象。...,定义了 #serialize(Data) 接口方法,序列化数据,生成 Builder 对象

1K20

干货 | 携程 SOA 的 Service Mesh 架构落地

而 Envoy 最新版才提供了类似的功能:Slow start mode。 那如何在现有的版本实现这个功能?...【方案一】 依然用原来的序列化器将数据处理成二进制, gRPC 调用时 wrap 一个 protobuf 对象,用一个字段传递原来数据的二进制数据流,再用另外一些字段描述它的序列化方式。...,基于如下理由: 1)查看 gRPC 插件生成的 Java 类,其中存在可以定制序列化器的部分的代码,使用 json 改写序列化器是可能的。...【Java 字节码编译技术动态编译】 有了上述去契约化的实现,后续我们基于 Java 字节码编译技术,直接在内存中生成对应的 gRPC 协议依赖的对象。...); 【服务端自动选择序列化器】 Java 既然可以替换默认的序列化器,那么也可以实现根据 Content Type 自动选择序列化器。

95320

分布式链路追踪 SkyWalking 源码分析 —— Collector Remote 远程通信服务

通过 workerId ,可以查找 Graph 对象的 Worker 对象,从而 Graph 的流式处理。...在上文中,我们可以看到发送给 Collector 是 Data 对象,而 Data 是数据的抽象类,具体反序列化 Data 对象之前,程序是无法得知它是 Data 的哪个实现对象。...这个时候,我们可以给 Data 对象的每个实现类,生成一个对应的数据协议编号。 发送数据之前,序列化 Data 对象时,增加该 Data 对应的协议编号,一起发送。...接收数据之后,反序列化数据时,根据协议编号,创建 Data 对应的实现类对象。...,定义了 #serialize(Data) 接口方法,序列化数据,生成 Builder 对象

66020

javagRPC实战之四:客户端流

一旦客户端完成写入消息,它等待服务器完成读取返回它的响应; 本文由以下几部分组成: 提前小结几个重要的知识点,稍后开发过程要重点关注这几个地方; proto文件定义客户端流类型的gRPC接口,再通过...,客户端要传给服务端的数据和gRPC方法的入参没有关系,而是和方法的返回对象有关(执行返回对象的onNext方法可以将数据传给服务端); 客户端A线程上传完数据后,服务端的响应是另一个线程B执行的,...目录下,客户端代码client-stream-client-side目录下,如下图: proto文件定义客户端流类型的gRPC接口 首先要做的就是定义gRPC接口,打开mall.proto,在里面新增方法和相关的数据结构...task即可生成java代码: 生成下图红框的文件: 接下来开发服务端; 开发服务端应用 父工程grpc-turtorials下面新建名为client-stream-server-side的模块...String getExtra(); } 重头戏来了,看看如何远程调用客户端流类型的gRPC接口,前面小结提到的2、3、4点都会涉及到,代码已经添加详细注释: package com.bolingcavalry.grpctutorials

1.2K20

javagRPC实战之五:双向流

,即客户端提交多个商品和数量,服务端返回每个商品减扣库存成功和失败的情况; 咱们尽快进入编码环节吧,具体内容如下: proto文件定义双向流类型的gRPC接口,再通过proto生成java代码 开发服务端应用...目录下,客户端代码double-stream-client-side目录下,如下图: [在这里插入图片描述] proto文件定义双向流类型的gRPC接口 首先要做的就是定义gRPC接口,打开mall.proto...task即可生成java代码: [在这里插入图片描述] 生成下图红框的文件,即服务端定义和返回值数据结构: [在这里插入图片描述] 接下来开发服务端; 开发服务端应用 父工程grpc-turtorials...String getExtra(); } 重头戏来了,看看如何远程调用双向流类型的gRPC接口,代码已经添加详细注释: package grpctutorials; import com.bolingcavalry.grpctutorials.lib.DeductReply...,从getExtra方法可以取得 return responseObserver.getExtra(); } /** * 创建ProductOrder对象

1.3K00

javagRPC实战之四:客户端流

一旦客户端完成写入消息,它等待服务器完成读取返回它的响应; 本文由以下几部分组成: 提前小结几个重要的知识点,稍后开发过程要重点关注这几个地方; proto文件定义客户端流类型的gRPC接口,再通过...,客户端要传给服务端的数据和gRPC方法的入参没有关系,而是和方法的返回对象有关(执行返回对象的onNext方法可以将数据传给服务端); 客户端A线程上传完数据后,服务端的响应是另一个线程B执行的,...目录下,客户端代码client-stream-client-side目录下,如下图: [在这里插入图片描述] proto文件定义客户端流类型的gRPC接口 首先要做的就是定义gRPC接口,打开mall.proto...task即可生成java代码: [在这里插入图片描述] 生成下图红框的文件: [在这里插入图片描述] 接下来开发服务端; 开发服务端应用 父工程grpc-turtorials下面新建名为client-stream-server-side...String getExtra(); } 重头戏来了,看看如何远程调用客户端流类型的gRPC接口,前面小结提到的2、3、4点都会涉及到,代码已经添加详细注释: package com.bolingcavalry.grpctutorials

1.3K51

构建你的第一个gRPC服务(part 2)

构建你的第一个gRPC服务(part 2) 在前一篇文章,我介绍了如何使用skemaloop来创建协议(schema contract),本文中,我将继续介绍如何使用skemaloop来创建服务框架代码...我自己的github账户下,我创建了一个sandbox的仓库用来保存我已经发布的协议和对应的代码。 点击创建协议按钮后,你的协议就会被推送到你的github仓库。如下图所示。...[image.png] 桩代码(stub)可以被客户端和服务器端代码用来实现通信,完成消息体的序列化和反序列化,实现主调和被调的业务封装。...[image.png] 本文中,我将以java为例来完成说明。下载服务器端代码后,你可以看到代码结构如下。...com.example.server; import com.skemaloop.test.SayHiGrpc; import com.skemaloop.test.SayHiOuterClass; import io.grpc.stub.StreamObserver

40270

javagRPC实战之五:双向流

,即客户端提交多个商品和数量,服务端返回每个商品减扣库存成功和失败的情况; 咱们尽快进入编码环节吧,具体内容如下: proto文件定义双向流类型的gRPC接口,再通过proto生成java代码 开发服务端应用...目录下,客户端代码double-stream-client-side目录下,如下图: proto文件定义双向流类型的gRPC接口 首先要做的就是定义gRPC接口,打开mall.proto,在里面新增方法和相关的数据结构...task即可生成java代码: 生成下图红框的文件,即服务端定义和返回值数据结构: 接下来开发服务端; 开发服务端应用 父工程grpc-turtorials下面新建名为double-stream-server-side...String getExtra(); } 重头戏来了,看看如何远程调用双向流类型的gRPC接口,代码已经添加详细注释: package grpctutorials; import com.bolingcavalry.grpctutorials.lib.DeductReply...,从getExtra方法可以取得 return responseObserver.getExtra(); } /** * 创建ProductOrder对象

1.1K31

gRPC的使用

gRPC里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。...目前已提供了C版本grpcJava版本grpc-java 和 Go版本grpc-go,其它语言的版本正在积极开发,其中,grpc支持C、C++、Node.js、Python、Ruby、Objective-C...的Client与Server,均通过Netty Channel作为数据通信,序列化、反序列化则使用Protobuf,每个请求都将被封装成HTTP2的Stream,整个生命周期中,客户端Channel应该保持长连接...{service}),value就是上述bindService生成的对象。 那么究竟Server端是如何解析RPC过程的?...Client调用时会将调用的service名称 + method信息保存在一个GRPC“保留”的header,那么Server端即可通过获取这个特定的header信息,就可以得知此stream需要请求的

2K20

开始食用grpc(之一)

-- 由于我的工程是多模块的,若不作为jar包引入,也可以将preview-grpc-libjava文件拷贝到当前工程内也 -->   yml配置文件参数: 1 grpc: 2 client:...组件的注解,注解必须声明所使用的grpc(生成的类的)服务类,同时还可以声明所使用的拦截器(可选)   OK,现在添加一个控制器(preview-grpc-client编写一个控制器),试试看:...复杂grpc proto服务文件编写:    首先,我先推荐两个官方网站,若能理解官网内容,绕过本节      grpc java平台api及样例> https://grpc.io/docs/quickstart...也可不在,若不在需要定义:option java_multiple_files = true;),不管是请求对象还是响应对象,都需要单独声明这个对象以及对象的变量类型及所处的位置,就像这样: 1 message...另外,请注意,如果某个字段是个列表(java的List),需要在字段或者对象前添加关键字 repeated ,这样: //返回体数据定义 message GrpcResp { string

1K20

开始食用grpc(之二)

(MultiStream.proto) 1 syntax = "proto3"; 2 3 option java_multiple_files = true; 4 option java_package...这个对象,这是与之前编写的grpc客户端(阻塞)所不一样的地方,同时构造stub的时候是newStub而不是newBlockingStub ,当然这两者是有区别的,前者仅适用于http2二进制流的方式...LOG.info("onCompleted()"); 28 } 29 }; 30 31 32 } 整体的构造方法和逻辑代码和客户端代码相似,同时服务端的逻辑代码基本上全StreamObserver...这个异步对象处理,同时这个构造方法也提供了错误和完成所对的重载方法,要进行业务处理也必须在重载的onNext方法编写。    ...grpc安全问题及拦截器: 对于grpc安全问题,grpc服务端提供了 服务端证书验证 的方式,具体就是在在客户端请求的时候验证客户地址是否是有效而已,默认不使用的时候服务端证书的开关是关闭着的,

1.8K40
领券