La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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

Presentaciones similares


Presentación del tema: "1 SOCKETS AIRAN GODOY HERNANDEZ JOSE MARIA RODRIGUEZ RODRIGUEZ 5º INGENIERIA EN INFORMATICA AMPLIACION DE SISTEMAS OPERATIVOS."— Transcripción de la presentación:

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

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

3 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 19 EJEMPLO CLIENTE DNS

20 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 21 INTRODUCCION Formato de los mensajes CABECERA PREGUNTA RESPUESTA AUTORIDAD ADICIONAL RRs RRs RRs

22 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 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 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 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 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 = www.playboy.com CABECERA PREGUNTA Ejemplo : Queremos saber quien es el administrador de la página de playboy

27 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 = www.playboy.com CABECERA PREGUNTA Ejemplo : Queremos saber quien es el administrador de la página de playboy

28 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 = www.playboy.com TTL = 85657 CLASE = IN LONG. DATOS DATOS = www.phat.playboy.com. TIPO = CNAME NOMBRE = www.playboy.com Phat playboy.com. Type = SOA clase = IN ttl= 30 3dchi.playboy.com Tim.playboy.com Serial = 2541534555 Refresh = 3600 Retry = 900 Expire = 3600000 Minimum = 30 CABECERA PREGUNTA RESPUESTA AUTORIDAD ADICIONAL Ejemplo : Queremos saber quien es el administrador de la página de playboy

29 29 EJEMPLOS

30 30 EJEMPLOS

31 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 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 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 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 : www.dis.ulpgc.es. se transformaría en 3www3dis5ulpgc2es0 Ejemplo : www.dis.ulpgc.es. 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 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 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 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 38 FIN


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

Presentaciones similares


Anuncios Google