RPC llamado Remote Procedure Call es un protocolo mas bien orientado para la implementación de programas para redes, El RPC fue inventado por SUN junto con la implementación que este mismo usa el XDR , el RPC puede ser usado por medio del TCP/IP o el UDP/IP . Este protocolo fue ya algo famoso en Solaris.
El RPC se distribuye en cuatro partes: Caller, Callee, Client y Server. El Caller se ejecuta en el cliente y es el encargado de enviar las llamadas al Server y el localhost las devuelve al Client. Esto viene por que al ser para sistemas distribuidos se encargan de que las dos maquinas que estén conectando sean arquitecturas totalmente distintas aunque de esto se encarga el XDR. EL XDR fue implementando debido a que los tipos de variables: integer, etc. Tienen diferentes representaciones dependiendo de la arquitectura , muchas arquitecturas ponen los bytes de menos valor al principio y otras en cambio ponen los bytes de menos valor los últimos, de ahí proviene el XDR un sistema de intercambio de datos para que los programas de distribución no diesen errores . Por lo que el procesos de comunicación pasa a ser que cuando el Client envíe algo le tenga que codificar los datos con el XDR y una vez que al Server le llega la información la tiene que descodificar con el XDR lógico no.
El portmap es el encargado de mapear en el puerto que esta corriendo un daemon estos puertos no se describen como los de "/etc/services" si no que usa otro fichero llamado "/etc/rpc".
Esto seria un ejemplo del contenido del "/etc/rpc":
portmapper 100000 portmap sunrpc
rstatd 100001 rstat rstat_svc rup perfmeter
rusersd 100002 rusers
nfs 100003 nfsprog
ypserv 100004 ypprog
mountd 100005 mount showmount
Por lo que cuando un programa quiere contactar con un daemon del RPC primero le pregunta al portmap en que puerto esta. Para saber en que puerto esta un programa usaremos :
localhost@lepton:~ > rpcinfo -p localhost
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 954 status
100024 1 tcp 956 status
100003 2 udp 2049 nfs
100021 1 udp 1122 nlockmgr
100021 3 udp 1122 nlockmgr
Esto seria usando rpcinfo otra forma es usando algun scaner por ejemp el nmap.
localhost @lepton:~ > nmap -sR -sT localhost
Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )
Interesting ports on localhost (127.0.0.1):
(The 1537 ports scanned but not shown below are in state: closed)
Port State Service (RPC)
21/tcp open ftp
22/tcp open ssh
80/tcp open http
111/tcp open sunrpc (rpcbind V2)
956/tcp open (status V1)
De esta forma espero haber puesto la marca, para que alguien se lance a la investigación de esta técnica muy útil para la ejecución remota de aplicaciones. No quisiera pasar por alto el recordatorio de siempre todos somos iguales.
No hay comentarios:
Publicar un comentario