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

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

Embed Size (px)

Citation preview

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

11

SOCKETSSOCKETSAIRAN GODOY HERNANDEZAIRAN GODOY HERNANDEZ

JOSE MARIA RODRIGUEZ RODRIGUEZJOSE MARIA RODRIGUEZ RODRIGUEZ

5º INGENIERIA EN INFORMATICA5º INGENIERIA EN INFORMATICA

AMPLIACION DE SISTEMAS AMPLIACION DE SISTEMAS OPERATIVOSOPERATIVOS

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

22

Definición de SocketDefinición de Socket

Punto de comunicación entre Punto de comunicación entre procesos, mediante el cual procesos, mediante el cual pueden emitir o recibir pueden emitir o recibir información.información.

Uso de Descriptores.Uso de Descriptores.

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

33

Características de un socketCaracterísticas de un socket

A cada socket le corresponde una A cada socket le corresponde una constante simbólica definida en constante simbólica definida en <sys/socket.h><sys/socket.h>

Dominio: Conjunto de sockets con los : Conjunto de sockets con los cuales se podrá establecer cuales se podrá establecer comunicación. comunicación.

Tipo: Define las propiedades de las : Define las propiedades de las comunicaciones en las cuales está comunicaciones en las cuales está implicado.implicado.

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

44

Dominio de socketDominio de socket

Dominio Unix: estos sockets se destinan a una estos sockets se destinan a una comunicación local: les corresponden direcciones comunicación local: les corresponden direcciones locales que son referencias a Unix idénticas a las de locales que son referencias a Unix idénticas a las de los archivos.los archivos.

• ls, rmls, rm

Dominio Internet: la conexión a una dirección la conexión a una dirección Internet de este tipo de socket necesita la Internet de este tipo de socket necesita la preparación de un objeto que tenga la estructura preparación de un objeto que tenga la estructura sockaddr_insockaddr_in. Para ello:. Para ello:• Conocimiento de la dirección de la máquina localConocimiento de la dirección de la máquina local: :

gethostname, gethostbyname, INADDR_ANYgethostname, gethostbyname, INADDR_ANY• Elección de un número de puertoElección de un número de puerto: getservbyname, getservbyname,

IPPORT_RESERVEDIPPORT_RESERVED

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

55

Dominio de un socket Dominio de un socket

Formato de direcciones y protocolos Formato de direcciones y protocolos

Dominio UNIXDominio UNIX (AF_UNIX) (AF_UNIX) : : Los Los sockets son locales donde se definen.sockets son locales donde se definen.

struct sockaddr_un {struct sockaddr_un {short sun_family; short sun_family; /* dominio UNIX *//* dominio UNIX */

charcharsun_data[108]; sun_data[108]; /* referencia de /* referencia de dirección */dirección */

};};

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

66

Dominio de un socketDominio de un socket

Dominio InternetDominio Internet (AF_INET) (AF_INET) : : Asigna un servicio a una Asigna un servicio a una máquina determinada.máquina determinada.

struct in_addr{struct in_addr{u_long s_addr;u_long s_addr;

};};

struct sockaddr_in{struct sockaddr_in{short sin_family; short sin_family; /* familia de dirección: /* familia de dirección:

AF_INET */AF_INET */ u_short sin_port; u_short sin_port; /* número de puerto *//* número de puerto */

struct in_addr sin_addr;struct in_addr sin_addr; /* dirección Internet *//* dirección Internet */

char sin_zero[8]; char sin_zero[8]; /* campo de 8 ceros *//* campo de 8 ceros */};};

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

77

Tipo de un socketTipo de un socket

Propiedades de comunicaciónPropiedades de comunicación

1.1. Fiabilidad de la transmisión. Fiabilidad de la transmisión.

2.2. Conservación del orden de los datos. Conservación del orden de los datos.

3.3. No duplicación de datos. No duplicación de datos.

4.4. Comunicación en modo conectado. Comunicación en modo conectado.

5.5. Conservación de los límites de los Conservación de los límites de los mensajes. mensajes.

6.6. Envío de mensajes <<urgentes>>. Envío de mensajes <<urgentes>>.

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

88

Tipo de un socketTipo de un socket

Tipos disponiblesTipos disponibles(características, propiedades, protocolo)(características, propiedades, protocolo)

• SOCK_DGRAM: Destinados a la comunicación en : Destinados a la comunicación en modo no conectado para envío de datagramas de modo no conectado para envío de datagramas de tamaño limitado. Propiedad 5. UDP.tamaño limitado. Propiedad 5. UDP.

• SOCK_STREAM: Comunicaciones fiables en modo : Comunicaciones fiables en modo conectado. Propiedades 1-4. Propiedad 6. TCP.conectado. Propiedades 1-4. Propiedad 6. TCP.

• SOCK_RAW:: Acceso a los protocolos de más bajo Acceso a los protocolos de más bajo nivel. Superusuario. IP.nivel. Superusuario. IP.

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

99

FUNCIONES BASICASFUNCIONES BASICAS

SOCKETSOCKET BINDBIND CONNECTCONNECT CLOSECLOSE LISTENLISTEN ACCEPTACCEPT WRITEWRITE SENDSEND

READREAD RECVRECV SENDTOSENDTO RECVFROMRECVFROM SHUTDOWNSHUTDOWN GETSOCKNAMEGETSOCKNAME GETPEERNAMEGETPEERNAME

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

1010

FUNCIONEFUNCIONESS

int socketint socket (dominio,tipo,protocolo) (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

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

1111

FUNCIONESFUNCIONES

int int bindbind ( (socketsocket,,localaddrlocaladdr,,addrlenaddrlen))

int int connectconnect ( (socketsocket,, addr addr,,addrlenaddrlen))

– 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.

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

1212

FUNCIONESFUNCIONES

int int closeclose ( (socketsocket))

int int listenlisten ( (socketsocket,, qlen 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

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

1313

FUNCIONEFUNCIONESS

int int accepacceptt (dominio, (dominio,addraddr,,lenlen))

– 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.

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

1414

FUNCIONESFUNCIONES

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

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

1515

FUNCIONESFUNCIONES

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

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

1616

FUNCIONESFUNCIONES

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.

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

1717

FUNCIONESFUNCIONES

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.

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

1818

FUNCIONEFUNCIONESS

int int shutdownshutdown ( (socket, direccionsocket, direccion))

Getsockname, getpeernameGetsockname, 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

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

1919

EJEMPLOEJEMPLO

CLIENTE DNSCLIENTE DNS

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

2020

INTRODUCCIONINTRODUCCION

El cliente DNS se encarga de enviar un El cliente DNS se encarga de enviar un paquete al puerto 53 mediante UDP con paquete al puerto 53 mediante UDP con una pregunta, y el servidor responde con una pregunta, y el servidor responde con otro paquete con la respuesta.otro paquete con la respuesta.

En la pregunta el usuario especifica el tipo En la pregunta el usuario especifica el tipo de interrogación que desea (A, NS, SOA ...)de interrogación que desea (A, NS, SOA ...)

Para utilizar el programa se usa la ste. Para utilizar el programa se usa la ste. Sintaxis : Sintaxis :

./cliente DirIPServidor NombreDominio./cliente DirIPServidor NombreDominio

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

2121

INTRODUCCIONINTRODUCCION

Formato de los mensajesFormato de los mensajes

CABECERACABECERA

PREGUNTAPREGUNTA

RESPUESTARESPUESTA

AUTORIDADAUTORIDAD

ADICIONALADICIONAL

RRsRRs

RRsRRs

RRsRRs

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

2222

INTRODUCCIONINTRODUCCIONFormato de la cabeceraFormato de la cabecera

IdentificadorIdentificador

QR QR Cód. IntCód. Int AAAA TCTC RDRD RARA ZZ Cód. RespCód. Resp

QD Count QD Count

AN CountAN Count

NS CountNS Count

AR CountAR Count

QRQR : Pregunta (0) Respuesta (1) : Pregunta (0) Respuesta (1) Cód. RespCód. Resp : No error (0) Errores(1-5) : No error (0) Errores(1-5)

Cód. IntCód. Int : Pregunta(0) Preg. Inversa (1) Status (2) : Pregunta(0) Preg. Inversa (1) Status (2) QDCountQDCount : Nº de preguntas : Nº de preguntas

AAAA : Respuesta con autorización : Respuesta con autorización ANCountANCount : Nº de RRs de respuestas : Nº de RRs de respuestas

TCTC : Truncado : Truncado NSCountNSCount : Nº de RRs de autoridad : Nº de RRs de autoridad

RDRD : Solicita recursividad : Solicita recursividad ARCountARCount : Nº de RRs de Adicional : Nº de RRs de Adicional

RARA : Recursividad disponible : Recursividad disponible

ZZ : Reservado : Reservado

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

2323

INTRODUCCIONINTRODUCCION

Formato de la preguntaFormato de la pregunta

QNAMEQNAME

..

..

QTYPEQTYPE

QCLASSQCLASS

QNAME : Puede ser una secuencia de etiquetas acabadas en un QNAME : Puede ser una secuencia de etiquetas acabadas en un 0, 0, acabadas en un puntero o puede ser un puntero. acabadas en un puntero o puede ser un puntero.

QTYPE : Tipo de interrogación (1 A – 2 NS – 5 NS - 6 SOA – 11 QTYPE : Tipo de interrogación (1 A – 2 NS – 5 NS - 6 SOA – 11 WKS – WKS – 12 PTR – 13 HINFO – 15 MX – 16 TXT) 12 PTR – 13 HINFO – 15 MX – 16 TXT)

QCLASS : Clase de interrogación ( 1 IN – 2 CS - 3 CH – 4 CH)QCLASS : Clase de interrogación ( 1 IN – 2 CS - 3 CH – 4 CH)

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

2424

INTRODUCCIONINTRODUCCION

NOMBRENOMBRE..

..

TIPOTIPO

CLASECLASE

TTL (32)TTL (32)

LONGITUD DATOSLONGITUD DATOS

DATOS DESCRIPTIVOSDATOS DESCRIPTIVOS

Formato del Registro de RecursoFormato del Registro de Recurso

COMPRESION : Reemplazar un nombre de dominio completo o la parte 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.

11 11 OFFSETOFFSET

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

2525

INTRODUCCIONINTRODUCCION

CNAMECNAME

CPUCPU

OSOS

PREFERENCEPREFERENCE

EXCHAGEEXCHAGE

Formato de los DatosFormato de los Datos

NSDNAMENSDNAME

PTRDNAMEPTRDNAME MNAMEMNAME

RNAMERNAME

SERIALSERIAL

REFRESHREFRESH

RETRYRETRY

EXPIREEXPIRE

MINIMUMMINIMUM

ADDRESSADDRESS

TXTDATATXTDATA

ADDRESSADDRESS

PROTOCOLPROTOCOL BITMAPBITMAP

BITMAPBITMAP

PTRPTR

CNAMECNAME

MXMX

AA

HINFOHINFO

NSNS

TXTTXT

SOASOA

WKSWKS

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

2626

PETICION/RESPUESTAPETICION/RESPUESTA

QD Count = 1QD Count = 1

AR CountAR Count

NS CountNS Count

AN CountAN Count

Cód. RespCód. RespZZRARARD= 1RD= 1TC =0TC =0AAAAC. Int = 0C. Int = 0QR = 0QR = 0

Id = 45Id = 45

CLASS = INCLASS = IN

TYPE = SOATYPE = SOA

QNAME = www.playboy.comQNAME = www.playboy.com

CABECERA

PREGUNTA

Ejemplo : Queremos saber quien es el administrador de la página de Ejemplo : Queremos saber quien es el administrador de la página de playboyplayboy

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

2727

PETICION/RESPUESTAPETICION/RESPUESTAEjemplo : Queremos saber quien es el administrador de la página de Ejemplo : Queremos saber quien es el administrador de la página de

playboyplayboy

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

2828

PETICION/RESPUESTAPETICION/RESPUESTA

QD Count = 1QD Count = 1

AR Count = 0AR Count = 0

NS Count = 1NS Count = 1

AN Count = 1AN Count = 1

C. Resp = 0C. Resp = 0ZZRA=1RA=1RD = 1RD = 1TC = 0TC = 0AA=0AA=0C. Int =0C. Int =0QR =1QR =1

Id = 45Id = 45

CLASS = INCLASS = IN

TYPE = SOATYPE = SOA

QNAME = www.playboy.comQNAME = www.playboy.com

TTL = 85657TTL = 85657

CLASE = INCLASE = IN

LONG. DATOS LONG. DATOS

DATOS = www.phat.playboy.com.DATOS = www.phat.playboy.com.

TIPO = CNAMETIPO = CNAME

NOMBRE = www.playboy.comNOMBRE = www.playboy.com

Phat playboy.com. Type = SOA clase = IN ttl= 30 3dchi.playboy.com Phat playboy.com. Type = SOA clase = IN ttl= 30 3dchi.playboy.com

Tim.playboy.comTim.playboy.com Serial = 2541534555 Refresh = 3600 Retry = 900 Serial = 2541534555 Refresh = 3600 Retry = 900 Expire = 3600000 Minimum = 30Expire = 3600000 Minimum = 30

CABECERA

PREGUNTA

RESPUESTA

AUTORIDAD

ADICIONAL

Ejemplo : Queremos saber quien es el administrador de la página de Ejemplo : Queremos saber quien es el administrador de la página de playboyplayboy

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

2929

EJEMPLOSEJEMPLOS

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

3030

EJEMPLOSEJEMPLOS

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

3131

ESTRUCTURASESTRUCTURAStypedef struct {typedef struct {

unsigned id :16; unsigned id :16; // IDENTIFICADOR// IDENTIFICADOR

unsigned rd :1; unsigned rd :1; // FLAG DE RECURSIVIDAD // FLAG DE RECURSIVIDAD unsigned tc :1; unsigned tc :1; // FLAG DE TRUNCAMIENTO// FLAG DE TRUNCAMIENTOunsigned aa :1; unsigned aa :1; // RESPUESTA AUTORITATIVA // RESPUESTA AUTORITATIVA unsigned opcode :4; unsigned opcode :4; // TIPO DE CONSULTA // TIPO DE CONSULTA unsigned qr :1; unsigned qr :1; // FLAG DE PREGUNTA O RESPUESTA// FLAG DE PREGUNTA O RESPUESTA

unsigned rcode :4; unsigned rcode :4; // CODIGO DE RESPUESTA // CODIGO DE RESPUESTA unsigned z :3; unsigned z :3; // NO USADO // NO USADO unsigned ra :1; unsigned ra :1; // RECURSION DISPONIBLE // RECURSION DISPONIBLE

unsigned qdcount :16; unsigned qdcount :16; // NUMERO DE PREGUNTAS // NUMERO DE PREGUNTAS unsigned ancount :16; unsigned ancount :16; // NUMERO DE RRs de RESPUESTA // NUMERO DE RRs de RESPUESTA unsigned nscount :16; unsigned nscount :16; // NUMERO DE RRs de AUTORIDAD // NUMERO DE RRs de AUTORIDAD unsigned arcount :16; unsigned arcount :16; // NUMERO DE RRs ADICIONALES // NUMERO DE RRs ADICIONALES

} HEADER;} HEADER;

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

3232

ESTRUCTURASESTRUCTURAStypedef struct {typedef struct {

unsigned qtype :16; unsigned qtype :16; // TIPO DE PREGUNTA // TIPO DE PREGUNTA unsigned qclass :16; unsigned qclass :16; // CLASE DE PREGUNTA // CLASE DE PREGUNTA

} PREGUNTA;} PREGUNTA;

typedef struct { typedef struct {

unsigned type :16;unsigned type :16; // TIPO DE RECURSO// TIPO DE RECURSOunsigned class :16;unsigned class :16; // CLASE DE RECURSO// CLASE DE RECURSOunsigned ttl1 :16;unsigned ttl1 :16; // TIEMPO DE VIDA// TIEMPO DE VIDAunsigned ttl2:16;unsigned ttl2:16;unsigned rdlength :16;unsigned rdlength :16; // LONGITUD DE LOS DATOS// LONGITUD DE LOS DATOS

} RECURSO;} RECURSO;

typedef struct {typedef struct { // ESTRUCTURA PARA OBTENER UNA DIRECCION IP// ESTRUCTURA PARA OBTENER UNA DIRECCION IP

unsigned a:8;unsigned a:8; // PRIMER DIGITO// PRIMER DIGITOunsigned b:8;unsigned b:8; // SEGUNDO DIGITO// SEGUNDO DIGITOunsigned c:8;unsigned c:8; // TERCER DIGITO// TERCER DIGITOunsigned d:8;unsigned d:8; // CUARTO DIGITO// CUARTO DIGITO

} AR;} AR;

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

3333

ESTRUCTURASESTRUCTURAStypedef struct {typedef struct {

unsigned serial1:16;unsigned serial1:16; // SERIAL// SERIAL unsigned serial2:16;unsigned serial2:16;

unsigned refresh1:16;unsigned refresh1:16; // TIEMPO DE REFRESCO// TIEMPO DE REFRESCO unsigned refresh2:16;unsigned refresh2:16;

unsigned retry1:16;unsigned retry1:16; // TIEMPO DE REINTENTO// TIEMPO DE REINTENTO unsigned retry2:16;unsigned retry2:16;

unsigned expire1:16;unsigned expire1:16; // TIEMPO DE EXPIRACION// TIEMPO DE EXPIRACION unsigned expire2:16;unsigned expire2:16;

unsigned minimum1:16;unsigned minimum1:16; // VALOR PREDETERMINADO PARA TTL// VALOR PREDETERMINADO PARA TTL unsigned minimum2:16; unsigned minimum2:16;

} SOAREG;} SOAREG;

char *Tipo[17] = {"","A","NS","3","4","CNAME","SOA","7","8","9","10","WKS",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"};char *Clase[5] = {"","IN","CS","CH","HS"};

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

3434

FUNCIONESFUNCIONES

int CodificaNombre(char *buf, char *qname, int qnamelen)int CodificaNombre(char *buf, char *qname, int qnamelen)

Recibe un puntero a la zona del paquete donde irá el nombre Recibe un puntero a la zona del paquete donde irá el nombre codificado (buf), el nombre a codificar (qname) y la longitud de dicho codificado (buf), el nombre a codificar (qname) y la longitud de dicho nombre (qnamelen). nombre (qnamelen).

Empieza en el ultimo punto sustituyéndolo por un 0 (marca de fin de 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 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 numérico que coincide con el número de caracteres hasta el siguiente punto.punto.

Ejemplo : www.dis.ulpgc.es. se transformaría en Ejemplo : www.dis.ulpgc.es. se transformaría en 3www3dis5ulpgc2es03www3dis5ulpgc2es0

void Imprime (u_char **posmem, u_char *buf)void Imprime (u_char **posmem, u_char *buf)

Recibe una posición de memoria (posmem) y la posición de inicio del Recibe una posición de memoria (posmem) y la posición de inicio del paquete (buf).paquete (buf).

Se encarga de imprimir un nombre de dominio por pantalla teniendo Se encarga de imprimir un nombre de dominio por pantalla teniendo en cuenta que puede ser un conjunto de etiquetas acabado en 0, un en cuenta que puede ser un conjunto de etiquetas acabado en 0, un conjunto de etiquetas acabados en un puntero o un puntero.conjunto de etiquetas acabados en un puntero o un puntero.

Cuando se acaba de imprimir, posmem apunta ahora a la siguiente Cuando se acaba de imprimir, posmem apunta ahora a la siguiente dirección después del nombre.dirección después del nombre.

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

3535

FUNCIONESFUNCIONES

void MuestraRR(u_char **pointer,u_char *buf,int cont)void MuestraRR(u_char **pointer,u_char *buf,int cont)

Recibe la posición de memoria del RR (pointer), el inicio del Recibe la posición de memoria del RR (pointer), el inicio del paquete (buf) y el numero de RR (cont).paquete (buf) y el numero de RR (cont).

Imprime por pantalla los registros de recursos (tantos como diga Imprime por pantalla los registros de recursos (tantos como diga la variable cont) a partir de pointer :la variable cont) a partir de pointer :

1.1. Imprime el nombre de dominio.Imprime el nombre de dominio.

2.2. La estructura RECURSO (clase, tipo, ttl y long. datos).La estructura RECURSO (clase, tipo, ttl y long. datos).

3.3. Para mostrar el contenido de los datos se tiene en cuenta el Para mostrar el contenido de los datos se tiene en cuenta el tipo interrogación (A, NS, SOA). tipo interrogación (A, NS, SOA).

Ej : si es A se imprime una Ej : si es A se imprime una dirección IP (estructura AR).dirección IP (estructura AR).

si es SOA se muestra el nombre del servidor, la si es SOA se muestra el nombre del servidor, la dirección dirección de correo y luego la estructura de correo y luego la estructura SOAREG.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 Cuando se acaba de imprimir pointer apunta ahora al siguiente

registro de recurso (Autoridad ó Adicional).registro de recurso (Autoridad ó Adicional).

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

3636

FUNCIONESFUNCIONES

Int ConstruyePaquete(char *buf, char *qname, int qnamelen)Int ConstruyePaquete(char *buf, char *qname, int qnamelen)

Recibe un puntero al inicio del paquete (buf), el nombre del dominio Recibe un puntero al inicio del paquete (buf), el nombre del dominio (qname) y la longitud de dicho nombre (qnamelen).(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.id = CodPaquete; hp.qr = 0; hp.qr = 0; // PREGUNTA // PREGUNTA hp.opcode = 0; hp.opcode = 0; // PREGUNTA // PREGUNTA

ESTANDAR ESTANDAR hp.z = 0; hp.z = 0; // Z DEBE ESTAR A 0// Z DEBE ESTAR A 0hp.qdcount = htons(1); hp.qdcount = htons(1); // NUMERO // NUMERO

DE PREGUNTAS DE PREGUNTAS hp.tc = 0; hp.tc = 0; // NO TRUNCAR// NO TRUNCARhp.rd = 1; hp.rd = 1; // PREGUNTA // PREGUNTA

RECURSIVARECURSIVA

Seguidamente nos encargamos de la pregunta :Seguidamente nos encargamos de la pregunta :

1 - Llamamos a la función CodificaNombre1 - Llamamos a la función CodificaNombre2 - Pedimos al usuario el tipo de 2 - Pedimos al usuario el tipo de

interrogación que desea y ponemos la interrogación que desea y ponemos la clase a 1 (IN). clase a 1 (IN).

Se devuelve el tamaño del paquete creado.Se devuelve el tamaño del paquete creado.

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

3737

FUNCIONESFUNCIONES

int DecodificaPaquete(u_char *buf, int buflen)int DecodificaPaquete(u_char *buf, int buflen)

Recibe un puntero al inicio del paquete (buf), la longitud del Recibe un puntero al inicio del paquete (buf), la longitud del paquete (buflen).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 Va accediendo a las posiciones de memoria de la cabecera, la

pregunta (QNAME, tipo y clase) y los registros de recursos (para pregunta (QNAME, tipo y clase) y los registros de recursos (para mostrar los datos se hace uso de la función MuestraRR).mostrar los datos se hace uso de la función MuestraRR).

int main(int argc, char **argv)int main(int argc, char **argv)

Recibe como parámetros el nº argumentos y los argumentos Recibe como parámetros el nº argumentos y los argumentos (dirección IP (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 Empaquetamos (función ConstruyePaquete) y enviamos el

paquete.paquete. Recibimos la respuesta y la desempaquetamos (función Recibimos la respuesta y la desempaquetamos (función

DecodificaPaquete)DecodificaPaquete)

CODIGO

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

3838

FINFIN