RPC, acronimo di Remote Procedure Call è un meccanismo generale per la gestione di applicazioni client-server. Il sistema si basa su un portmapper daemon e un file che elenca i servizi disponibili associati al relativo daemon. Il portmapper è un classico esempio di un programma che gestisce un servizio di rete in modo standalone, cioè senza essere controllato da inetd
Semplificando in modo estremo il funzionamento delle RPC, si può dire che si tratti di un meccanismo attraverso cui si possono eseguire delle elaborazioni remote.
Dal lato server si trova il portmapper in ascolto sulla porta 111 (portmapper), dal lato client ci sono una serie di programmi, che per un qualunque servizio RPC devono prima interpellare il portmapper remoto che quindi fornisce loro le informazioni necessarie a stabilire una connessione con il daemon competente.
Per questo motivo, le chiamate RPC contengono l'indicazione di un numero di ``programma'', attraverso il quale, il portmapper remoto è in grado ri rispondere informando il client sul numero di porta da utilizzare per quel programma.
I servizi RPC possono essere interrogati attraverso il programma rpcinfo. Per esempio, per chiedere al portmapper del computer paperone.zagozigo.dg quali servizi siano disponibili e conoscere le loro caratteristiche si può agire come nell'esempio seguente.
$
rpcinfo -
p paperone.zagozigo.dg
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100005 1 udp 844 mountd
100005 1 tcp 846 mountd
100003 2 udp 2049 nfs
100003 2 tcp 2049 nfs
100004 2 udp 880 ypserv
100004 1 udp 880 ypserv
100004 2 tcp 883 ypserv
100009 1 udp 889 yppasswdd
Una cosa che è interessante osservare è che alcuni dei programmi elencati tra i servizi RPC, non appaiono necessariamente anche nell'elenco del file /etc/services.
portmap [<opzioni>]
È il daemon che si occupa di attivare i servizi RPC. Potrebbe anche chiamarsi rpc.portmap. Viene avviato di norma durante la procedura di inizializzazione del sistema, in modo indipendente dal controllo di inetd.
/etc/rpc è il file contenente l'elenco dei servizi RPC disponibili, abbinati al numero di programma usato come riferimento standard. Il suo scopo è quindi quello di tradurre i nomi in numeri di programma e viceversa.
#
# rpc 88/08/01 4.0 RPCSRC; from 1.12 88/02/07 SMI
#
portmapper 100000 portmap sunrpc
rstatd 100001 rstat rstat_svc rup perfmeter
rusersd 100002 rusers
nfs 100003 nfsprog
ypserv 100004 ypprog
mountd 100005 mount showmount
ypbind 100007
walld 100008 rwall shutdown
yppasswdd 100009 yppasswd
etherstatd 100010 etherstat
rquotad 100011 rquotaprog quota rquota
sprayd 100012 spray
3270_mapper 100013
rje_mapper 100014
selection_svc 100015 selnsvc
database_svc 100016
rexd 100017 rex
alis 100018
sched 100019
llockmgr 100020
nlockmgr 100021
x25.inr 100022
statmon 100023
status 100024
bootparam 100026
ypupdated 100028 ypupdate
keyserv 100029 keyserver
tfsd 100037
nsed 100038
nsemntd 100039
pcnfsd 150001
bwnfsd 545580417
rpcinfo
-
p [<host>]
rpcinfo [
-
n <numero-di-porta>] {-
u|-
t} <host> <programma> [<versione>]
rpcinfo {
-
b|-
d} <programma> <versione>
rpcinfo permette di interrogare un portmapper. L'utilità di questo programma sta quindi nella possibilità di conoscere quali servizi RPC sono disponibili all'interno di un certo host, e nella possibilità di verificare che questi siano effettivamente in funzione.
-
p [<host>]
Interroga il portmapper nel computer indicato, oppure in quello locale, ed elenca tutti i programmi RPC registrati presso lo stesso.
-
u <host> <programma> [<versione>]
Utilizza il protocollo UDP per eseguire una chiamata RPC alla procedura 0 (NULLPROC) del programma nel computer host specificato. Il risultato viene emesso attraverso lo standard output.
-
t <host> <programma> [<versione>]
Utilizza il protocollo TCP per eseguire una chiamata RPC alla procedura 0 (NULLPROC) del programma nel computer host specificato. Il risultato viene emesso attraverso lo standard output.
-
n <numero-di-porta>
Permette di specificare una porta diversa rispetto a quella che viene indicata dal
portmapper, per eseguire una chiamata RPC attraverso le opzioni
-
u e -
t.
-
b <programma> <versione>
Permette di eseguire una chiamata RPC circolare (broadcast) a tutti gli host in grado di riceverla, utilizzando il protocollo UDP, per l'esecuzione della procedura 0 (NULLPROC) del programma e della versione specificati. Il risultato viene emesso attraverso lo standard output.
-
d <programma> <versione>
L'utente root può utilizzare questa opzione per eliminare la registrazione del servizio RPC del programma e versione specificati.
$
rpcinfo -
p
Elenca tutti i servizi RPC registrati nel computer locale.
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100005 1 udp 844 mountd
100005 1 tcp 846 mountd
100003 2 udp 2049 nfs
100003 2 tcp 2049 nfs
100004 2 udp 880 ypserv
100004 1 udp 880 ypserv
100004 2 tcp 883 ypserv
100009 1 udp 889 yppasswdd
---------
$
rpcinfo -
p paperone.zagozigo.dg
Elenca tutti i servizi RPC registrati nel computer paperone.zagozigo.dg.
$
rpcinfo -
d mountd 1
Elenca tutti i computer host in grado di fornire il servizio mountd.
127.0.0.1 localhost.localdomain
192.168.1.1 topolino.zigozago.dg
192.168.1.2 pippo.zigozago.dg
1997.10.26 - Scritto da Daniele Giacomini daniele@calion.com (vedi copyright: Appunti Linux).