不论是程序员在编写基于C/S(客户端服务器)的程序时,还是网络工程师在处理RPC问题时,他们问的最多的就是RPC和Socket有什么区别 和联系?
RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的,出于一种类比的愿望,在一台机器上运行的主程序,可以调用另一台机器上准备好的子程序,就像 IPC(本地过程调用).RPC带来了开发C/S程序的简单可靠的手段,它通过一种叫XDR的数据表达方法描述数据,程序员书写伪代码,然后由 rpcgen程序翻译为真正的可编译的C语言源代码,再编译成真正的Client端和Server端程序。
RPC作为普遍的C/S开发方法,开发效率高效,可靠.但RPC方法的基本原则是--以模块调用的简单性忽略通讯的具体细节,以便程序员不用 关心C/S之间的通讯协议,集中精力对付实现过程.这就决定了 RPC生成的通讯包不可能对每种应用都有最恰当的处理办法,与Socket方法相比,传输相同的有效数据,RPC占用更多的网络带宽.
RPC是在Socket的基础上实现的,它比socket需要更多的网络和系统资源.另外,在对程序优化时,程序员虽然可以直接修改由 rpcgen产生的令人费解的源程序,但对于追求程序设计高效率的RPC而言,获得的简单性则被大大削弱.
RPC与是Socket的类比
两个老板手下各有一个负责接通MSN的秘书.这两个秘书就是基于RPC协议建立的会话层通信.老本不需要知道怎么使用MSN,只要告诉秘书,秘书 就会通过MSN与对方建立会话请求和响应.而基于Socket的通信,老板需要会使用MSN,这样尽管老板需要事先培训一下MSN的简单使用常识,但若与 对方通信时,无需经过秘书,效率更高.
--------------------------------------------------------------------------------------------
英文原义:Remote Procedure Call Protocol
中文释义:(RFC-1831)远过程调用协议
注解:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间 携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,调用进程发送一个有进程参数的调用信息到服务进程,然后等 待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调 用信息,最后,客户端调用过程接收答复信息,获得进程结果,然后调用执行继续进行。
目前,有多种RPC模式和执行。最初由Sun公司提出。IETF ONC宪章重新修订了Sun版本,使得ONC PRC协议成为IETF标准协议。现在使用最普遍的模式和执行是开放式软件基础的分布式计算环境(DCE)。
--------------------------------------------------------------------------------------------
Remote Procedure Call (RPC)
RPC是Windows操作系统使用的一个协议,它提供了一种进程间通信机制。通过这一机制,在一台计算机上运行的程序可以顺畅地执行某个远程系 统上的代码,该协议本身是从 OSF(开放式软件基础)RPC协议衍生出来的,只是增加了一些Microsoft特定的扩展。
--------------------------------------------------------------------------------------------
Microsoft RPC :Remote Procedure Call (RPC)调用是WINDOWS使用的一个协议,提供进程间交互通信,允许程序在远程机器上运行任意程序。
RPC在处理通过TCP/IP进行信息交换过程中存在漏洞,问题由于不正确处理畸形消息造成。主要此漏洞影响使用RPC的DCOM接口,监听 RPC使能的接口,这个接口处理DCOM对象激活请求。攻击者如果成功利用此漏洞,可以以系统用户权限执行任意代码。
要利用这个漏洞,可以发送畸形请求给远程服务器监听的特定RPC端口。如135、139、445等任何配置了RPC端口的机器。
MS WINDOWS 2000 RPC :WINDOWS的RPC服务(RPCSS)存在漏洞,当发送一个畸形包的时候,会导致RPC服务无提示的崩溃掉。由于RPC服务是一个特殊的系统服务, 许多应用和服务程序都依赖于他,因为可以造成这些程序与服务的拒绝服务。同时可以通过劫持epmapper管道和135端口的方法来提升权限和获取敏感信 息。
技术分析
问题主要发生在RPC服务为DCOM服务提供__RemoteGetClassObject接口上,当传送一个特定包导致解析一个结构的指针 参数为NULL的时候, __RemotoGetClassObject 未对此结构指针参数有有效性检查,在后续中就直接引用了此地址(此时为0)做读写操作,这样就导致了内存访问违例,RPC服务进程崩溃。
危害
攻击之后,许多基于RPC的应用无法使用,如使用网络与拨号连接拨号,配置本地连接等,一些基于RPC,DCOM的服务与应用将无法正常运 行。由于RPC服务是MS WINDOWS中一个重要的服务,他开放的135端口同时用于DCOM的认证,epmapper管道用于RPC端点的影射,并默认为系统信任,如果一个攻 击者能够以低权限在被攻击机器上运行一个程序,在RPC服务崩溃以后,就可以通过劫持epmapper管道和135端口的方法来提升权限或获得DCOM客 户端认证的信息。
解决方案
Microsoft RPC为:
采用防火墙过滤这些配置了RPC的端口。
分享到:
相关推荐
基于Socket的RPC是实现RPC的一种基础方式,它利用TCP/IP套接字进行通信,使得客户端和服务端能够进行高效的数据交换。 在本文中,我们将探讨基于Socket的RPC实现以及后续的改进计划,包括升级到Netty作为底层通信库...
本示例是基于Socket实现的RPC调用Demo,让我们深入探讨一下这个主题。 首先,我们要理解Socket。Socket是网络编程中的基本概念,它为应用程序提供了低级别的网络通信接口。在TCP/IP协议栈中,Socket是应用层与传输...
Java使用传统Socket手写的远程RPC(Remote Procedure Call)框架是一种实现分布式系统中不同节点间通信的技术。RPC允许一个程序在不关心远程系统具体实现的情况下,调用另一个远程系统的功能,就像是调用本地方法...
本项目提供了一个简易版的Java RPC框架实现,旨在模仿著名的Dubbo框架,但采用了更基础的Socket通信方式进行分布式服务的搭建。以下是这个项目的核心知识点: 1. **RPC原理**:RPC使得客户端可以像调用本地方法一样...
3. **建立连接**:RPC框架使用Socket创建一个到远程服务器的连接,Socket是TCP/IP协议族中的一个低级接口,用于实现客户端和服务器之间的通信。 4. **数据发送**:通过Socket将序列化后的请求数据发送到服务器。 5. ...
Jprotobuf-rpc-socket Build status Protobuf RPC是一种基于TCP协议的二进制高性能RPC通信协议实现。它以Protobuf作为基本的数据交换格式,支持完全基于POJO的发布方式,极大的简化了开发复杂性。 Features: 完全...
3. **网络层实现**:使用socket编程实现客户端和服务端的通信,包括连接建立、数据发送接收、异常处理等。 4. **服务注册与发现**:可以使用简单的配置文件,或者实现一个服务注册中心,如zookeeper、etcd等。 5. ...
本篇将详细讲解如何使用socket、反射和序列化等技术来实现一个简单的RPC框架。 首先,让我们了解RPC的基本原理。在RPC模型中,客户端(Client)发起一个函数调用请求,这个请求包含了目标函数的名称和参数。RPC框架...
简介 demo-rpc(标准maven工程) 使用纯Java socket及简单多线程技术,不依赖任何第三方库类,实现简单实现类似dubbo的rpc调用。仅用于学习了解rpc调用过程, 实现略显简单,只体现rpc调用的关键步骤,存在很多优化细节,...
Java RPC(Remote Procedure Call)调用是分布式系统中常见的通信方式,它允许一个程序在不关心远程系统具体实现的情况下调用另一个网络上的程序。在这个Java RPC调用示例中,我们将探讨RPC的基本概念、实现机制以及...
你可以在downloads/protobuf-socket-rpc-2.0.jar找到用Java 1.6编译的jar,或者你也可以下载源码直接使用。 您还需要在类路径中使用 google protobuf 库(版本 2.4.0)。 你可以从 Python Python egg 位于下载/...
RPC建立在Socket之上,为程序员提供了一种透明的方式来调用远程系统上的函数或方法,无需了解网络协议的细节。 RPC的核心思想是抽象出远程调用的过程,使得开发者可以像调用本地函数一样调用远程的函数。这种方式...
在C语言中,可以使用socket编程接口来实现这些网络协议。 3. **服务注册与发现**:在RPC系统中,客户端需要知道如何找到并连接到服务器。这可能涉及到服务注册、服务发现机制,例如通过DNS查询、配置文件或特定的...
在这个“手写RPC底层实现原理”的主题中,我们将深入探讨RPC的工作流程、关键组件以及如何通过Socket进行通信。 一、RPC基本概念 RPC使得分布式系统中的服务可以透明地调用,无需关心调用方与被调用方的实际位置。...
C++中的RPC实现通常是基于网络通信,如Socket,来完成跨进程或跨机器的数据交换。在此场景下,我们讨论的"Rpc远程计算"主要涉及以下知识点: 1. **Socket编程**:Socket是网络通信的基础,它提供了进程间的通信接口...
【标题】基于Netty实现Dubbo RPC 在分布式系统中,RPC(Remote Procedure Call)是一种常见且重要的通信机制,它允许一个程序调用另一个在不同进程中运行的程序,就像调用本地函数一样简单。Dubbo作为阿里巴巴开源...
### JSON-RPC 2.0 规范解析 #### 概述 JSON-RPC 2.0 是一种无状态、轻量级的远程过程调用(RPC)协议,旨在简化跨网络的...无论是对于新手还是有经验的开发者来说,该规范都能够有效地促进不同应用间的交互与集成。
本文档为Unity3D中使用RPC数据交互的使用方法: 介绍了什么是RPC、RPC与Socket的关系、RPC的优缺点、使用RPC前的准备、RPC的具体使用方法(包含定义和调用),详细介绍了参数的使用。
RPC的基本结构遵循客户端-服务器(C/S)模型,类似于基于Socket的C/S编程,但它提供了一个更高级别的抽象。在RPC中,客户端发起一个调用,参数通过RPC传输层(可以是TCP或UDP,即TI-RPC)传递到服务器,然后根据预设...
在RPC框架中,服务端通过ServerSocket监听请求,客户端使用Socket连接服务端并发送请求,服务端接收请求后执行业务逻辑,然后将结果返回给客户端。 3. **反射**: 反射是Java的一种强大特性,它允许程序在运行时...