1 SOCKETS AIRAN GODOY HERNANDEZ JOSE MARIA RODRIGUEZ RODRIGUEZ 5º INGENIERIA EN INFORMATICA AMPLIACION DE SISTEMAS OPERATIVOS.

Slides:



Advertisements
Presentaciones similares
TEMA 2 Técnicas básicas de construcción de aplicaciones distribuidas
Advertisements

Sockets y Threads en JAVA
Sistemas Informáticos Distribuidos
SERVIDOR DNS Y WINS INTEGRANTES: Farroñan Beltran Brenher
SOCKETS INTRODUCCIÓN DEFINICIÓN TIPOS DE SOCKETS USO DE SOCKETS.
Capa de transporte.
Servidor.pl #!/usr/local/bin/perl use Socket; ($port) $port = 2345 unless $port; Empleamos el módulo Socket, equivalente a las definiciones que.
Cliente.pl #!/usr/local/bin/perl use Socket; ($them, $port) $port = 2345 unless $port; $them = 'localhost' unless $them; El primer argumento es.
Registros de recursos DNS: - Formato general
Almacenamiento virtual de sitios web: «Hosts» virtuales Gustavo Antequera Rodríguez.
Clientes DNS (Resolutores – “resolvers” de nombres) .
Servidores de nombres de dominio (DNS):
Transferencias de Zona:
Servidor de Batalla Naval.
Servidores de nombres de dominio (DNS)
TCP/IP V4 Redes de Computadoras uclv.
Índice. Revisando conceptos acerca de la memoria.
Archivos.
Envió de comandos por correo electrónico, Socket TCP y SNTP.
Informática Ingeniería en Electrónica y Automática Industrial
Correo electrónico Internet
Sockets.
SOCKETS.
DNS Pamela Millán Ana Laura Félix Teresa Treviño
Socket en.NET Grupo # 5. ¿Qué es un Socket? Es la relación entre un puerto de un equipo y el puerto de otro equipo. ¿Qué es un puerto? Es el medio por.
Informática Ingeniería en Electrónica y Automática Industrial
Programación en C para electrónicos
1 Capítulo 21: Interacción Cliente Servidor ICD 327: Redes de Computadores Agustín J. González.
Javier Rodríguez Granados
ELO3091 Interfaz de Socket Agustín J. González ELO309.
PROCESO DE RESOLUCIÓN DE UN NOMBRE DE DOMINIO. El resolver o cliente DNS es la parte del sistema operativo encargada de resolver nombres de dominio cuando.
Proceso de resolución de un nombre de dominio. Javier Rodríguez Granados.
Sockets programming. Tipos de datos. Tipos de datos mas usados en programas cliente-servidor: u-char Unsigned 8-bit character. u-short Unsigned 16-bit.
Universidad Autónoma de Colombia Comunicación de procesos Sockets Ingeniería de Sistemas Electiva Tecnológica.
Componentes del servicio de nombres de dominio.
Servicios en Red UT5. Servicios FTP.
Direcciones ip y enrutamiento.. Un protocolo lógico o de conexión como TCP (Protocolo de Control de Transmisión ) establece la secuencia de acciones necesaria.
Departamento de Arquitectura y Tecnología de Computadores E.T.S. Ingeniería Informática Lección 2. La API de Sockets Julio Ortega Lopera. Curso 2004/2005.
Proceso de resolución de un nombre de dominio Tema 3 SRI Vicente Sánchez Patón I.E.S Gregorio Prieto.
Sistemas Operativos Comunicación de procesos a través de sockets.
Registro de recursos DNS Jesús Torres Cejudo. Registro de recursos DNS Un DNS es una base de datos distribuida que contiene registros que se conocen como.
Punto 10 – Registros de recursos DNS Juan Luis Cano.
LABORATORIO DE ESTRUCTURA DE COMPUTADORES II Desarrollo de aplicación Cliente-Servidor.
Tema 6 – Servicio de Correo Electrónico
Domain Name System Comercio Electrónico
4. Introducción a IP,TCP,UDP,ARP,ICMP
Registros de recursos DNS.
Luis Villalta Márquez. Servidores de nombres de dominio (DNS)
Funcionamiento del servicio DHCP. Tipos de mensajes 07/10/20121Jesús Torres Cejudo.
Funcionamiento DHCP. Tipos de mensajes.
S ERVICIOS DE RED E I NTERNET T EMA 3: DNS Nombre: Adrián de la Torre López.
Protocolos de Transporte y Aplicación. – TCP y UDP
S ERVICIOS DE RED E I NTERNET T EMA 3: DNS Nombre: Adrián de la Torre López.
Jorge De Nova Segundo. Componentes del servicio de nombres de dominio EL servicio que ofrece DNS se basa en los siguientes componentes -Espacio de nombres.
Clientes DNS (Resolutores – “resolvers” de nombres) Jesús Torres Cejudo.
Jorge De Nova Segundo. Funcionamiento del servicio DHCP. Tipos de mensajes. DHCP Asigna direcciones IP a otras máquinas de la red. Este protocolo puede.
UD 3: “Instalación y administración de servicios de nombres de dominio” Registros de recursos DNS Luis Alfonso Sánchez Brazales.
Almacenamiento virtual de sitios web: «Hosts» virtuales
Nivel de Transporte en Internet
S ERVICIOS DE RED E I NTERNET T EMA 3: DNS Nombre: Adrián de la Torre López.
COMPONENTES DEL DNS. ESPACIO DE NOMBRE La estructura del sistema DNS se basa en una estructura de arbórea en donde se definen los dominios de nivel superior.
Modelo OSI Para redes………
Componentes del servicio de nombres de dominio: –Espacios de nombres de dominio (name space) –Bases de datos DNS (registro de recursos). –Servidores de.
Gabriel Montañés León. Los clientes DNS son llamados resolvers, los cuales no son más que rutinas de librería que crean preguntas y las envían a través.
Proceso de resolución de un nombre de dominio. –Consultas recursivas. –Consultas iterativas. –Caché y TTL. –Recursividad y caché. Gustavo Antequera Rodríguez.
Protocolos de Transporte y Aplicación
Planificación Curso UNIDAD 1. INTRODUCCIÓN A LOS SERVICIOS EN RED UNIDAD 2. SERVICIOS DHCP UNIDAD 3. SERVICIOS DNS UNIDAD 4. SERVICIOS DE ACCESO REMOTO.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
1 Introducción a las Comunicaciones en Red. import java.net.InetAddress; import java.net.UnknownHostException; public class PruebaSockets { public static.
Programación con sockets I
Transcripción de la presentación:

1 SOCKETS AIRAN GODOY HERNANDEZ JOSE MARIA RODRIGUEZ RODRIGUEZ 5º INGENIERIA EN INFORMATICA AMPLIACION DE SISTEMAS OPERATIVOS

2 Definición de Socket  Punto de comunicación entre procesos, mediante el cual pueden emitir o recibir información.  Uso de Descriptores.

3 Características de un socket  A cada socket le corresponde una constante simbólica definida en  A cada socket le corresponde una constante simbólica definida en  : Conjunto de sockets con los cuales se podrá establecer comunicación.  Dominio: Conjunto de sockets con los cuales se podrá establecer comunicación.  : Define las propiedades de las comunicaciones en las cuales está implicado.  Tipo: Define las propiedades de las comunicaciones en las cuales está implicado.

4 Dominio de socket estos sockets se destinan a una comunicación local: les corresponden direcciones locales que son referencias a Unix idénticas a las de los archivos. Dominio Unix: estos sockets se destinan a una comunicación local: les corresponden direcciones locales que son referencias a Unix idénticas a las de los archivos. ls, rm ls, rm la conexión a una dirección Internet de este tipo de socket necesita la preparación de un objeto que tenga la estructura sockaddr_in. Para ello: Dominio Internet: la conexión a una dirección Internet de este tipo de socket necesita la preparación de un objeto que tenga la estructura sockaddr_in. Para ello: Conocimiento de la dirección de la máquina local : gethostname, gethostbyname, INADDR_ANY Conocimiento de la dirección de la máquina local : gethostname, gethostbyname, INADDR_ANY Elección de un número de puerto getservbyname, IPPORT_RESERVED Elección de un número de puerto : getservbyname, IPPORT_RESERVED

5 Dominio de un socket  Formato de direcciones y protocolos  Dominio UNIX (AF_UNIX) : Los sockets son locales donde se definen. struct sockaddr_un { short sun_family; /* dominio UNIX */ charsun_data[108]; /* referencia de dirección */ };

6 Dominio de un socket  Dominio Internet (AF_INET) : Asigna un servicio a una máquina determinada. struct in_addr{ u_long s_addr; }; }; struct sockaddr_in{ short sin_family; /* familia de dirección: AF_INET */ u_short sin_port; /* número de puerto */ u_short sin_port; /* número de puerto */ struct in_addr sin_addr; /* dirección Internet */ char sin_zero[8]; /* campo de 8 ceros */ };

7 Tipo de un socket Propiedades de comunicación Propiedades de comunicación 1.Fiabilidad de la transmisión. 2.Conservación del orden de los datos. 3.No duplicación de datos. 4.Comunicación en modo conectado. 5.Conservación de los límites de los mensajes. 6.Envío de mensajes >.

8 Tipo de un socket Tipos disponibles Tipos disponibles (características, propiedades, protocolo) : Destinados a la comunicación en modo no conectado para envío de datagramas de tamaño limitado. Propiedad 5. UDP. SOCK_DGRAM: Destinados a la comunicación en modo no conectado para envío de datagramas de tamaño limitado. Propiedad 5. UDP. : Comunicaciones fiables en modo conectado. Propiedades 1-4. Propiedad 6. TCP. SOCK_STREAM: Comunicaciones fiables en modo conectado. Propiedades 1-4. Propiedad 6. TCP. : Acceso a los protocolos de más bajo nivel. Superusuario. IP. SOCK_RAW: Acceso a los protocolos de más bajo nivel. Superusuario. IP.

9 FUNCIONES BASICAS SOCKET SOCKET BIND BIND CONNECT CONNECT CLOSE CLOSE LISTEN LISTEN ACCEPT ACCEPT WRITE WRITE SEND SEND READ READ RECV RECV SENDTO SENDTO RECVFROM RECVFROM SHUTDOWN SHUTDOWN GETSOCKNAME GETSOCKNAME GETPEERNAME GETPEERNAME

10 FUNCIONES int socket (dominio,tipo,protocolo) – Crea un socket para comunicaciones. – Devuelve un descriptor ó -1. – Cuando se crea un proceso hijo hereda este descriptor. – Dominio : PF_UNIX, PF_LOCAL, PF_INET, PF_INET6, PF_IPX, PF_NETLINK, PF_X25, PF_AX25, PF_ATMPVC, PF_APPLETALK, PF_PACKET -Tipo : SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, SOCK_SEQPACKET, SOCK_RDM

11 FUNCIONES int bind (socket,localaddr,addrlen) int connect (socket, addr,addrlen) – Especifica una dirección local y un número de puerto del protocolo – Asigna un nombre (dirección + puerto) al socket. – Orientado a conexión-> Establece una conexión con el otro socket – No orientado a conexión-> addr es la dirección por defecto a la cual se envían los datagramas.

12 FUNCIONES int close (socket) int listen (socket, qlen) – Si n procesos usan el socket decrementa las referencias y lo libera cuando n=0. – Cierra la conexión y libera el socket. – Establece una conexión pasiva ( Espera peticiones de entrada) – qlen= Longitud de la cola para socket establecidos completamente – Solo se aplica a los socket SOCK_STREAM, SOCK_SEQPACKET Y SOCK_RDM

13 FUNCIONES int accept (dominio,addr,len) – Retira una petición de la cola de peticiones pendientes (definida en listen) – Si no hay pendientes y el socket es con bloqueo queda esperando – Llena la estructura apuntada por addr con la dirección y puerto remoto.

14 FUNCIONES int write (socket, buf, len) - Envía datos a traves de la conexión TCP. int send (socket, mensaje, lon, flags) - - Envia un mensaje - - Solo cuando el socket este en estado connected - - Flags especifica si el mensaje es fuera de banda

15 FUNCIONES int read (socket, buf, len) - Lee datos de una conexión TCP. int recv (socket, mensaje, lon, flags) - - Recibe un datagrama - - Solo cuando el socket este en estado connected

16 FUNCIONES int sendto (int socket, const void *mensaje, int lon, unsigned int flags, const struct sockaddr *to, int tolen) - Envía un mensaje. int recvfrom (int socket, const void *mensaje, int lon, unsigned int flags, const struct sockaddr *from, int fromlen) -Recibe datos de un socket.

17 FUNCIONES inet_aton, inet_ntoa – Convierte entre una string que especifica la dirección IP expresada en decimal separada por “.” en su valor binario en formato de red y viceversa. inet_pton, inet_ntop – Convierte entre una string que especifica la dirección IP expresada en decimal separada por “.” en una estructura de direccion de red y viceversa. htons - Convierte enteros binarios del orden nativo del equipo al orden estándar de red y viceversa.

18 FUNCIONES int shutdown (socket, direccion) Getsockname, getpeername – Cierra la conexión en una sola dirección 0 Entrada 1 Salida 2 Ambas – Obtiene la dirección y puerto de los extremos

19 EJEMPLO CLIENTE DNS

20 INTRODUCCION El cliente DNS se encarga de enviar un paquete al puerto 53 mediante UDP con una pregunta, y el servidor responde con otro paquete con la respuesta. El cliente DNS se encarga de enviar un paquete al puerto 53 mediante UDP con una pregunta, y el servidor responde con otro paquete con la respuesta. En la pregunta el usuario especifica el tipo de interrogación que desea (A, NS, SOA...) En la pregunta el usuario especifica el tipo de interrogación que desea (A, NS, SOA...) Para utilizar el programa se usa la ste. Sintaxis : Para utilizar el programa se usa la ste. Sintaxis :./cliente DirIPServidor NombreDominio

21 INTRODUCCION Formato de los mensajes CABECERA PREGUNTA RESPUESTA AUTORIDAD ADICIONAL RRs RRs RRs

22 INTRODUCCION Formato de la cabecera Identificador QR Cód. Int AATCRDRAZ Cód. Resp QD Count AN Count NS Count AR Count QR : Pregunta (0) Respuesta (1) Cód. Resp : No error (0) Errores(1-5) Cód. Int : Pregunta(0) Preg. Inversa (1) Status (2) QDCount : Nº de preguntas AA : Respuesta con autorización ANCount : Nº de RRs de respuestas TC : Truncado NSCount : Nº de RRs de autoridad RD : Solicita recursividad ARCount : Nº de RRs de Adicional RA : Recursividad disponible Z : Reservado

23 INTRODUCCION Formato de la pregunta QNAME.. QTYPE QCLASS QNAME : Puede ser una secuencia de etiquetas acabadas en un 0, acabadas en un puntero o puede ser un puntero. QTYPE : Tipo de interrogación (1 A – 2 NS – 5 NS - 6 SOA – 11 WKS – 12 PTR – 13 HINFO – 15 MX – 16 TXT) QCLASS : Clase de interrogación ( 1 IN – 2 CS - 3 CH – 4 CH)

24 INTRODUCCION NOMBRE.. TIPO CLASE TTL (32) LONGITUD DATOS DATOS DESCRIPTIVOS Formato del Registro de Recurso COMPRESION : Reemplazar un nombre de dominio completo o la parte final de un nombre de dominio por un puntero a una final de un nombre de dominio por un puntero a una ocurrencia anterior. ocurrencia anterior.11OFFSET

25 INTRODUCCION CNAME CPUOS PREFERENCEEXCHAGE Formato de los Datos NSDNAME PTRDNAME MNAMERNAME SERIAL REFRESH RETRY EXPIRE MINIMUM ADDRESS TXTDATA ADDRESSPROTOCOLBITMAP BITMAP PTR CNAME MX A HINFO NS TXT SOA WKS

26 PETICION/RESPUESTA QD Count = 1 AR Count NS Count AN Count Cód. Resp ZRA RD= 1 TC =0 AA C. Int = 0 QR = 0 Id = 45 CLASS = IN TYPE = SOA QNAME = CABECERA PREGUNTA Ejemplo : Queremos saber quien es el administrador de la página de playboy

27 PETICION/RESPUESTA QD Count = 1 AR Count NS Count AN Count Cód. Resp ZRA RD= 1 TC =0 AA C. Int = 0 QR = 0 Id = 45 CLASS = IN TYPE = SOA QNAME = CABECERA PREGUNTA Ejemplo : Queremos saber quien es el administrador de la página de playboy

28 PETICION/RESPUESTA QD Count = 1 AR Count = 0 NS Count = 1 AN Count = 1 C. Resp = 0 ZRA=1 RD = 1 TC = 0 AA=0 C. Int =0 QR =1 Id = 45 CLASS = IN TYPE = SOA QNAME = TTL = CLASE = IN LONG. DATOS DATOS = TIPO = CNAME NOMBRE = Phat playboy.com. Type = SOA clase = IN ttl= 30 3dchi.playboy.com Tim.playboy.com Serial = Refresh = 3600 Retry = 900 Expire = Minimum = 30 CABECERA PREGUNTA RESPUESTA AUTORIDAD ADICIONAL Ejemplo : Queremos saber quien es el administrador de la página de playboy

29 EJEMPLOS

30 EJEMPLOS

31 ESTRUCTURAS typedef struct { unsigned id :16; // IDENTIFICADOR unsigned rd :1; // FLAG DE RECURSIVIDAD unsigned tc :1; // FLAG DE TRUNCAMIENTO unsigned aa :1; // RESPUESTA AUTORITATIVA unsigned opcode :4; // TIPO DE CONSULTA unsigned qr :1; // FLAG DE PREGUNTA O RESPUESTA unsigned rcode :4; // CODIGO DE RESPUESTA unsigned z :3; // NO USADO unsigned ra :1; // RECURSION DISPONIBLE unsigned qdcount :16; // NUMERO DE PREGUNTAS unsigned ancount :16; // NUMERO DE RRs de RESPUESTA unsigned nscount :16; // NUMERO DE RRs de AUTORIDAD unsigned arcount :16; // NUMERO DE RRs ADICIONALES } HEADER;

32 ESTRUCTURAS typedef struct { unsigned qtype :16; // TIPO DE PREGUNTA unsigned qclass :16; // CLASE DE PREGUNTA } PREGUNTA; typedef struct { unsigned type :16;// TIPO DE RECURSO unsigned class :16;// CLASE DE RECURSO unsigned ttl1 :16;// TIEMPO DE VIDA unsigned ttl2:16; unsigned rdlength :16;// LONGITUD DE LOS DATOS } RECURSO; typedef struct {// ESTRUCTURA PARA OBTENER UNA DIRECCION IP unsigned a:8;// PRIMER DIGITO unsigned b:8;// SEGUNDO DIGITO unsigned c:8;// TERCER DIGITO unsigned d:8;// CUARTO DIGITO } AR;

33 ESTRUCTURAS typedef struct { unsigned serial1:16;// SERIAL unsigned serial1:16;// SERIAL unsigned serial2:16; unsigned serial2:16; unsigned refresh1:16;// TIEMPO DE REFRESCO unsigned refresh1:16;// TIEMPO DE REFRESCO unsigned refresh2:16; unsigned refresh2:16; unsigned retry1:16;// TIEMPO DE REINTENTO unsigned retry1:16;// TIEMPO DE REINTENTO unsigned retry2:16; unsigned retry2:16; unsigned expire1:16;// TIEMPO DE EXPIRACION unsigned expire1:16;// TIEMPO DE EXPIRACION unsigned expire2:16; unsigned expire2:16; unsigned minimum1:16;// VALOR PREDETERMINADO PARA TTL unsigned minimum1:16;// VALOR PREDETERMINADO PARA TTL unsigned minimum2:16; unsigned minimum2:16; } SOAREG; char *Tipo[17] = {"","A","NS","3","4","CNAME","SOA","7","8","9","10","WKS", "PTR","HINFO","","MX","TXT"}; "PTR","HINFO","","MX","TXT"}; char *Clase[5] = {"","IN","CS","CH","HS"};

34 FUNCIONES int CodificaNombre(char *buf, char *qname, int qnamelen) Recibe un puntero a la zona del paquete donde irá el nombre codificado (buf), el nombre a codificar (qname) y la longitud de dicho nombre (qnamelen). Recibe un puntero a la zona del paquete donde irá el nombre codificado (buf), el nombre a codificar (qname) y la longitud de dicho nombre (qnamelen). Empieza en el ultimo punto sustituyéndolo por un 0 (marca de fin de nombre) y cada vez que encuentra otro lo sustituye por un valor numérico que coincide con el número de caracteres hasta el siguiente punto. Empieza en el ultimo punto sustituyéndolo por un 0 (marca de fin de nombre) y cada vez que encuentra otro lo sustituye por un valor numérico que coincide con el número de caracteres hasta el siguiente punto. Ejemplo : se transformaría en 3www3dis5ulpgc2es0 Ejemplo : se transformaría en 3www3dis5ulpgc2es0 void Imprime (u_char **posmem, u_char *buf) Recibe una posición de memoria (posmem) y la posición de inicio del paquete (buf). Recibe una posición de memoria (posmem) y la posición de inicio del paquete (buf). Se encarga de imprimir un nombre de dominio por pantalla teniendo en cuenta que puede ser un conjunto de etiquetas acabado en 0, un conjunto de etiquetas acabados en un puntero o un puntero. Se encarga de imprimir un nombre de dominio por pantalla teniendo en cuenta que puede ser un conjunto de etiquetas acabado en 0, un conjunto de etiquetas acabados en un puntero o un puntero. Cuando se acaba de imprimir, posmem apunta ahora a la siguiente dirección después del nombre. Cuando se acaba de imprimir, posmem apunta ahora a la siguiente dirección después del nombre.

35 FUNCIONES void MuestraRR(u_char **pointer,u_char *buf,int cont) Recibe la posición de memoria del RR (pointer), el inicio del paquete (buf) y el numero de RR (cont). Recibe la posición de memoria del RR (pointer), el inicio del paquete (buf) y el numero de RR (cont). Imprime por pantalla los registros de recursos (tantos como diga la variable cont) a partir de pointer : Imprime por pantalla los registros de recursos (tantos como diga la variable cont) a partir de pointer : 1. Imprime el nombre de dominio. 2. La estructura RECURSO (clase, tipo, ttl y long. datos). 3. Para mostrar el contenido de los datos se tiene en cuenta el tipo interrogación (A, NS, SOA). Ej : si es A se imprime una dirección IP (estructura AR). si es SOA se muestra el nombre del servidor, la dirección de correo y luego la estructura SOAREG. si es SOA se muestra el nombre del servidor, la dirección de correo y luego la estructura SOAREG. Se hace uso de la función “Imprime”. Se hace uso de la función “Imprime”. Cuando se acaba de imprimir pointer apunta ahora al siguiente registro de recurso (Autoridad ó Adicional). Cuando se acaba de imprimir pointer apunta ahora al siguiente registro de recurso (Autoridad ó Adicional).

36 FUNCIONES Int ConstruyePaquete(char *buf, char *qname, int qnamelen) Recibe un puntero al inicio del paquete (buf), el nombre del dominio (qname) y la longitud de dicho nombre (qnamelen). Recibe un puntero al inicio del paquete (buf), el nombre del dominio (qname) y la longitud de dicho nombre (qnamelen). Se crea un paquete con la pregunta : Se crea un paquete con la pregunta : Se rellenan los campos de la cabecera (estructura HEADER) : Se rellenan los campos de la cabecera (estructura HEADER) : hp.id = CodPaquete; hp.qr = 0; // PREGUNTA hp.opcode = 0; // PREGUNTA ESTANDAR hp.z = 0; // Z DEBE ESTAR A 0 hp.qdcount = htons(1); // NUMERO DE PREGUNTAS hp.tc = 0; // NO TRUNCAR hp.rd = 1; // PREGUNTA RECURSIVA Seguidamente nos encargamos de la pregunta : Seguidamente nos encargamos de la pregunta : 1 - Llamamos a la función CodificaNombre 2 - Pedimos al usuario el tipo de interrogación que desea y ponemos la clase a 1 (IN). Se devuelve el tamaño del paquete creado. Se devuelve el tamaño del paquete creado.

37 FUNCIONES int DecodificaPaquete(u_char *buf, int buflen) Recibe un puntero al inicio del paquete (buf), la longitud del paquete (buflen). Recibe un puntero al inicio del paquete (buf), la longitud del paquete (buflen). Muestra la información que contiene el paquete de respuesta. Muestra la información que contiene el paquete de respuesta. Va accediendo a las posiciones de memoria de la cabecera, la pregunta (QNAME, tipo y clase) y los registros de recursos (para mostrar los datos se hace uso de la función MuestraRR). Va accediendo a las posiciones de memoria de la cabecera, la pregunta (QNAME, tipo y clase) y los registros de recursos (para mostrar los datos se hace uso de la función MuestraRR). int main(int argc, char **argv) Recibe como parámetros el nº argumentos y los argumentos (dirección IP Recibe como parámetros el nº argumentos y los argumentos (dirección IP del servidor y el nombre de dominio). del servidor y el nombre de dominio). Si el nombre de dominio no acaba en punto se le añade. Si el nombre de dominio no acaba en punto se le añade. Se inicializa y crea el socket (puerto 53 UDP) Se inicializa y crea el socket (puerto 53 UDP) Empaquetamos (función ConstruyePaquete) y enviamos el paquete. Empaquetamos (función ConstruyePaquete) y enviamos el paquete. Recibimos la respuesta y la desempaquetamos (función DecodificaPaquete) Recibimos la respuesta y la desempaquetamos (función DecodificaPaquete) CODIGO

38 FIN