Resolução de Nomes Volnys Borges Bernal Deparatamento de Sistemas Eletrônicos Escola Politécnica da USP

Documentos relacionados
Resolução de Nomes e Endereços

1 Projeto de software de clientes. 1

Obter conhecimentos básicos sobre programação socket para desenvolver softwares clientes.

Sistemas de Operação Sockets

Programação com Sockets TCP e UDP - Cliente. Gustavo Leitão

TROCA DE MENSAGENS SOCKETS. Comunicando processos através de SOCKETS. SOCKETS com conexão. SOCKETS sem conexão

Cliente/Servidor. Programação com Sockets. Graça Bressan. Graça Bressan/LARC

Redes de Computadores

Experiência 04: Comandos para testes e identificação do computador na rede.

Um Tutorial sobre Sockets Parte I

Jacson Rodrigues 1

O COMPUTADOR. Introdução à Computação

Redes de Computadores. 1 Questões de múltipla escolha. TE090 - Prof. Pedroso. 30 de novembro de Exercício 1: Considere:

INF 1005 Programação I

Tutorial de Sockets - Parte I Por: Frederico Perim

Bibliotecas. Apoio à Programação Distribuída. Socket. Socket. bibliotecas bibliotecas+ferramentas linguagens de programação distribuídas

Resumo da Introdução de Prática de Programação com C. A Linguagem C

Programação Estruturada I

Tecnologia de Redes. Protocolos Auxiliares: Protocolos ARP e RARP

06/10/2015. Modelo TCP/IP Camada de Transporte DISCIPLINA: TECNOLOGIA DE REDES DE COMPUTADORES. UDP User Datagram Protocol. UDP User Datagram Protocol

Capítulo 2: Introdução à Linguagem C

PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C

Programação de Sockets em C/C++

Linguagem C: variáveis, operadores, entrada/saída. Prof. Críston Algoritmos e Programação

Sistemas Distribuídos (Parte 4 - Aplicação Distribuída)

Fundamentos dos protocolos internet

Comandos Sequenciais if else, e Switch

Rede VPN UFBA Procedimento para configuração

Universidade Federal de Uberlândia Faculdade de Computação. A Linguagem C

Redes de Computadores I

Conteúdo programático

E Q U I N O X G R E E N

cast poderia ser usado também para transformar um real (float) em inteiro. A sintaxe C (float)i pode ser substituída em C++ por float(i).

Tecnologia de Redes. Protocolo ICMP

Tipos de Dados Simples

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

DESENVOLVIMENTO E IMPLEMENTAÇÃO DE UM PROXY DNS EM UMA REDE HETEROGÊNEA

sockets interprocess communication Taisy Weber

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

INF 1005 Programação I

Técnicas de Programação: ESTRUTURAS, UNIÕES E TIPOS DEE UFPB

14. Arquivos. W. Celes e J. L. Rangel. Estruturas de Dados PUC-Rio 13-1

Registros. Técnicas de Programação. Rafael Silva Guimarães

Introdução a C Tipos de Dados Variáveis Operadores

1ª versão. #include <stdio.h> #include <string.h> #include <stdlib.h> #define maxdiscos 1000

Programação e Sistemas de Informação

Exercício de Revisão Linguagem C

INFORMÁTICA APLICADA AULA 02 LINGUAGEM DE PROGRAMAÇÃO C++

Tecnologia de Redes. Protocolo TCP

Curso Técnico de Redes de Computadores Disciplina de Fundamentos de Rede

Introdução à Programação

Linguagens de Programação

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Roteiro... Sistemas Distribuídos Aula 4. Troca de mensagens. Comunicação entre processos. Conceitos de SD, vantagens e desvantagens

Arquitetura de Redes. Prof. Dr. S. Motoyama

Capítulo 4 TCP/IP FIREWALLS.

IFTO LÓGICA DE PROGRAMAÇÃO AULA 01

Protocolos, DNS, DHCP, Ethereal e comandos em Linux

Curso C: Ponteiros e Arrays

Programas simples em C

LTP-IV. Prof. Dr. Silvio do Lago Pereira. Departamento de Tecnologia da Informação Faculdade de Tecnologia de São Paulo

Redes de Computadores

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo

Estruturas de entrada e saída

Algoritmos e Programação Estruturada

Modelo Cliente/Servidor e Introdução a Sockets

Redes de Computadores II

Revisão. Karine Peralta

Introdução à Programação em Linguagem C

LISTAS ENCADEADAS OU NÃO- SEQÜENCIAIS. Estrutura de Dados

PROJETO INTERDISCIPLINAR I

LINGUAGEM C. Estrutura básica de um programa

INTRODUÇÃO À PROGRAMAÇÃO II VARIÁVEIS COMPOSTAS HOMOGÊNEAS UNIDIMENSIONAIS

PROGRAMAÇÃO FUNÇÕES NA LINGUAGEM C

Redes de Computadores. Protocolo IP

Persistência de Dados

Linguagem C. TGSI Lógica de Programação / Linguagem C Prof. Marcos Roberto

EN3611 Segurança de Redes Prof. João Henrique Kleinschmidt Prática Wireshark Sniffer de rede

Rede d s d e d Com o pu p t u ado d r o es Conceitos Básicos M d o e d los o de d Re R de d s:

Endereçamento IP Roteamento Internet. Ricardo Patara NIC.BR

Modelo TCP / IP. História da família TCP/IP Modelo utilizado pela família TCP/IP Comparação com o modelo OSI

Algoritmos e Programação

MC-102 Aula 19 Registros

Exercício 1. Tabela 1: Cadastro de usuários, senhas e privilégios (exemplo). Login Senha Privilégio Armamento

Linguagem de Programação I

Funcionamento de ARP entre redes (sub-redes) distintas. Mecanismos de entrega. Funcionamento entre redes (sub-redes): default gateway

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Representação de Dados (inteiros não negativos)

Elementos de programação em C

Redes. Pablo Rodriguez de Almeida Gross

Protocolo de resolução de endereços: ARP

VIRTUALIZAÇÃO CORPORATIVA

Redes de Computadores (PPGI/UFRJ)

Protocolos de Aplicação

Transcrição:

2002-2015 Volnys Bernal 1 Resolução de Nomes Volnys Borges Bernal volnys@lsi.usp.br Deparatamento de Sistemas Eletrônicos Escola Politécnica da USP

2002-2015 Volnys Bernal 2 Agenda Introdução à resolução de nomes Resolução de nome de host Resolução de nome de serviço Resolução de nome de protocolo

2002-2015 Volnys Bernal 3 Introdução à resolução de nomes

2002-2015 Volnys Bernal 4 Introdução à resolução de nomes Resolução ~ Tradução Programas que lidam com comunicação geralmente necessitam realizar diversos tipos de resoluções de nomes como: Nome de host Endereço IP Nome de serviço Nro da porta / prot. de transporte Nome do protocolo Número do protocolo Existem funções de biblioteca que facilitam a resolução de nomes

2002-2015 Volnys Bernal 5 Introdução à resolução de nomes Funções para resolução de nomes: Tipo de resolução Função Tradução Exemplo Host gethostbyname() nome endereço IP www.usp.br 143.107.10.5 gethostbyaddr() endereço IP nome 143.107.10.5 www.usp.br Serviço getservbyname() nome porta/proto http 80/TCP getservbyport() Porta/proto nome 80/TCP http Protocolo getprotobyname() nome protocolo UDP 17 getprotobynumber() protocolo nome 17 UDP

2002-2015 Volnys Bernal 6 Introdução à resolução de nomes Aplicação (processo) libc Funções para resolução de nomes: Nome de host gethostbyname() gethostbyaddr() Nome de serviço getservbyname() getservbyport() Nome de protocolo getprotobyname() getprotobynumber() Interface de chamadas ao sistema Núcleo do Sistema Operacional

2002-2015 Volnys Bernal 7 Introdução à resolução de nomes As funções de resolução de nomes se encarregam de: Verificar a configuração do subsistema de resolução de nome do S. O. Realizar a resolução: consultar arquivos locais ou interagir com os serviços necessários Exemplo de arquivos e serviços para o sistema operacional UNIX: Nome de host: Arquivo /etc/hosts Serviço DNS Serviço NIS Serviço LDAP Nome de serviço: Arquivo /etc/services Serviço NIS Serviço LDAP Nome de protocolo: Arquivo /etc/protocols Serviço NIS Serviço LDAP

2002-2015 Volnys Bernal 8 Resolução de nome de host

2002-2015 Volnys Bernal 9 Resolução de nome de host Possibilita traduzir Nomes de máquina endereço IPs Endereço IP nome de máquina Funções: Gethostbyname() A partir de um nome de uma máquina possibilita descobrir seu endereço IP Gethostbyaddr() A partir de um endereço IP de uma máquina possibilita descobir seu nome

2002-2015 Volnys Bernal 10 Resolução de nome de host Interface de programação struct hostent *gethostbyname(char *name) struct hostent *gethostbyaddr(char *addr, int len, int type) struct hostent { char *h_name; /* nome oficial do host */ char **h_aliases; /* lista de apelidos */ int h_addrtype; /* tipo: AF_INET (IPv4), AF_INET6 (IPv6)*/ int h_length; /* comprimento do endereço: 4 (IPv4) */ char **h_addr_list; /* lista de endereços */ } #define h_addr h_addr_list[0];

2002-2015 Volnys Bernal 11 Resolução de nome de host Estrutura hostent struct hostent h_name apolo.xyz.com\0 h_aliases NULL www.xyz.com\0 webmail.xyz.com\0 h_addrtype h_length AF_INET 4 h_addr_list NULL 200 156 84 56

2002-2015 Volnys Bernal 12 Resolução de nome de host // Programa resolv-nome.c #include <stdio.h> #include <netdb.h> extern int errno; int main() { char struct hostent hostnamep[80]; * hostentryp; printf( Entre com o nome da máquina: ); scanf( %s,hostnamep); hostentryp = gethostbyname(hostnamep); if (hostentryp == NULL) /* Erro */ perror( Erro: ); else /* ok */ printf("endereco = %d.%d.%d.%d \n", ((unsigned char *) hostentryp->h_addr)[0], ((unsigned char *) hostentryp->h_addr)[1], ((unsigned char *) hostentryp->h_addr)[2], ((unsigned char *) hostentryp->h_addr)[3]); }

2002-2015 Volnys Bernal 13 Exercício 1) Desenvolva um programa, baseado no programa resolvnome.c, para realizar a tradução reversa, ou seja, dado um endereço IP informe o nome associado. Dicas: O endereço IP é representado por uma seqüência de 4 bytes; O endereço IP pode ser requisitado ao usuário utilizando o seguinte comando: unsigned char bytesip[4]; //4 bytes p/ armaz. end. IP scanf("%u.%u.%u.%u", &bytesip[0],&bytesip[1],&bytesip[2],&bytesip[3]); Na função gethostbyaddr() o parametrotype representa o tipo de endereço de rede que está sendo utilizado (IPv4, IPv6, X.25,...). Neste caso, deve ser utilizada a macro AF_INET (Address Family Internet) que representa endereços tipo IPv4.

2002-2015 Volnys Bernal 14 Resolução de nome de serviço

2002-2015 Volnys Bernal 15 Resolução de nome de serviço Possibilita traduzir Nomes de serviço número da porta + protocolo Número de porta + protocolo Nome de serviço Funções: Getservicebyname() A partir de um nome de serviço permite descobrir a porta do protocolo de transporte Getservicebyport() A partir de uma porta do protocolo transporte permite descobrir o nome do serviço associado

2002-2015 Volnys Bernal 16 Resolução de nome de serviço Interface de programação: struct servent *getservbyname (char *name, char *proto) struct servent *getservbyport (int port, char *proto) struct servent { char * s_name; /* nome oficial do serviço */ char **s_aliases; /* lista de apelidos */ int s_port; /* nro porta (network byte order)*/ char *s_proto; /* nome do protocolo (TCP/UDP) */ }

2002-2015 Volnys Bernal 17 Resolução de nome de serviço // Programa resolv-serv-udp.c #include <stdio.h> #include <netdb.h> extern int errno; int main() { char struct servent servicenamep[80]; * serventp; printf( Entre com o nome do servico: ); scanf( %s,servicenamep); serventp = getservbyname(servicenamep, udp ); if (serventp == NULL) /* Erro */ perror( Erro na chamada getservbyname() ); else /* ok */ { printf( Nome = %s\n",serventp->s_name); printf( Porta = %d\n",ntohs(serventp->s_port)); printf( Protocolo = %s\n",serventp->s_proto); } }

2002-2015 Volnys Bernal 18 Resolução de nome de serviço // Programa resolv-serv-udp-tcp.c #include <stdio.h> #include <netdb.h> extern int errno; int main() { char servicenamep[80]; struct servent * serventp; printf("entre com o nome do servico: "); scanf("%s",servicenamep); serventp = getservbyname(servicenamep,"udp"); if (serventp!= NULL) /* Erro */ { printf("porta = %d/udp\n",ntohs(serventp->s_port)); } serventp = getservbyname(servicenamep,"tcp"); if (serventp!= NULL) /* Erro */ { printf("porta = %d/tcp\n",ntohs(serventp->s_port)); } }

2002-2015 Volnys Bernal 19 Exercício 2) Desenvolva um programa, baseado no programa resolv-serv-udp.c, para realizar a tradução reversa, ou seja, dado um número de porta e um protocolo de transporte informe o nome do serviço associado. Dicas: O número da porta é geralmente representado com inteiros de 16 bits (short integer); Utilize a função auxiliar htohs() para traduzir um short integer (inteiro de 16 bits) na representação host byte order para a representação network byte order.

2002-2015 Volnys Bernal 20 Resolução de nome de protocolo

2002-2015 Volnys Bernal 21 Resolução de nomes de protocolo Possibilita traduzir Nome de protocolo número do protocolo Número de protocolo nome de protocolo Funções: Getprotobyname() A partir de um nome de um protocolo possibilita descobrir seu número. Getprotobynumber() A partir de um número de um protocolo possibilita descobrir seu nome.

2002-2015 Volnys Bernal 22 Resolução de nomes de protocolo Interface de programação: struct protoent *getprotobyname (char *name) struct protoent *getprotobynumber (int proto) struct protoent { char *p_name; /* nome oficial do protocolo*/ char **p_aliases; /* lista de apelidos */ int p_proto; /* nro protocolo (host byte order)*/ }

2002-2015 Volnys Bernal 23 Resolução de nomes de protocolo // Programa resolv-proto.c #include <stdio.h> #include <netdb.h> extern int errno; int main() { char protonamep[80]; struct protoent * protoentp; printf( Entre com o nome do protocolo: ); scanf( %s,protonamep); protoentp = getprotobyname(protonamep); if (protoentp == NULL) /* Erro */ perror( Erro na chamada getprotobyname() ); else /* ok */ { printf( Nome = %s\n",protoentp->p_name); printf( Protocolo = %d\n",protoentp->p_proto); } }

2002-2015 Volnys Bernal 24 Exercício 3) Desenvolva um programa, baseado no programa resolv-proto.c, para realizar a tradução reversa, ou seja, dado um número de protocolo informe o nome do protocolo associado.

2002-2015 Volnys Bernal 25 Referências Bibliográficas

2002-2015 Volnys Bernal 26 Referências Bibliográficas COMMER, DOUGLAS; STEVENS, DAVID Internetworking with TCP/IP: volume 3: client-server programming and applications Prentice Hall 1993