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



Documentos relacionados
1 Projeto de software de clientes. 1

Resolução de Nomes e Endereços

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

Introdução à Programação com Sockets. Fernando Jorge Silveira Filho Daniel Sadoc Menasché

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

Sistemas de Operação Sockets

Um Tutorial sobre Sockets Parte I

Aula de Socket. Rafael De Tommaso do Valle

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

Redes de Computadores I

Jacson Rodrigues 1

Redes de Computadores II

Na Figura a seguir apresento um exemplo de uma "mini-tabela" de roteamento:

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

OProtocolo RPC é um dos protocolos de aplicação mais utilizados, pois permite

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

Aula Prática. Comunicação em SOCKTS. Disciplina: INF01151

L A B O RATÓRIO DE REDES

Máscaras de sub-rede. Fórmula

A máscara de sub-rede pode ser usada para dividir uma rede existente em "sub-redes". Isso pode ser feito para:

Aula 2 Servidor DHCP. 2.1 dhcp

sockets interprocess communication Taisy Weber

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

Arquitetura de Rede de Computadores

struct LISTA item quant

Capítulo 8 Introdução a redes

Um processo sob UNIX ocupa uma área de memória formada basicamente por 3 partes:

Algoritmos e Programação Estruturada

Guia de Conectividade Worldspan Go Res! A V A N Ç A D O

Entendendo como funciona o NAT

Laboratório Usando ping e tracert a partir de uma Estação de Trabalho

Protocolo TCP/IP. Neste caso cada computador da rede precisa de, pelo menos, dois parâmetros configurados:

Redes de Computadores II INF-3A

Computação 2. Aula Profª. Fabiany Listas Duplamente Encadeadas

Tecnologia de Redes de Computadores - aula 5

Prof. Rafael Gross.

Estruturas (Registros)

IP significa Internet Protocol. A Internet é uma rede, e assim como ocorre em qualquer tipo de rede, os seus nós (computadores, impressoras, etc.

Experimentos com a memória cache do CPU

Configurando o DDNS Management System

Aula pratica 4 Testar Conexões TCP/IP em Redes Industrias Usando os comandos Ping e Net View (1.a Parte)

Arquitetura de Rede de Computadores

Veja abaixo um exemplo de um endereço IP de 32 bits:

O Protocolo IP (2) Prof. José Gonçalves Pereira Filho Departamento de Informática


Firewalls de Aplicação WEB, Idiomas e Expressões Regulares. Condições de Bypass

Relatório do Laboratório 3

O endereço de sua estação de trabalho é , e você esta usando a máscara de subrede:

Confguração básica da rede

CCNA 2 Conceitos Básicos de Roteadores e Roteamento

Configurando um servidor DHCP

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org

Laboratório - Identificação e Solução de Problemas de Configuração de VLAN

A camada de rede do modelo OSI

Laboratório - Mapeamento da Internet

Edital 012/PROAD/SGP/2012

cio Roteamento Linux

Fundamentos de Programação

Aula Prática Roteador

Curso Técnico em Informática. Informática Aplicada Instrutor Rafael Barros Sales

Introdução Introduç ão Rede Rede TCP/IP Roteame Rotea nto nto CIDR

EA080- Laboratório de Redes de Computadores Laboratório 2 Virtualização (Relatório Individual) Prof. Responsável: Mauricio Ferreira Magalhães

Classe A: Apenas o primeiro octeto identifica a rede e os três últimos identificam os Hosts.

Endereçamento IP. Resolvendo as questões da prova

Curso de C. Procedimentos e Funções. 6/4/200901/04/09 09:42 Copyright@Arnaldo V Moura, Daniel F Ferber 1

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

Preparando um esquema de endereçamento de sua rede

Computação II Orientação a Objetos

Comunicação entre pai e filho

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Bom pessoal, há muito tempo tenho o interesse em criar esse tutorial. Me sobrou um tempinho então fui a batalha para ajudar os amigos.

Endereçamento IP (Internet Protocolo)

Universidade Católica de Brasília Pró-reitoria de Graduação Curso de Ciência da Computação

Computação 2. Aula 8. Profª. Fabiany Arquivos

Trabalho 02: Cliente e Servidor em C

Curso de extensão em Administração de redes com GNU/Linux

Arquivos. Estruturas de Dados II Vanessa Braganholo

PRIMEIRA LISTA DE EXERCÍCIOS CAR. 48 Hosts Link C 6 Hosts

Transcrição:

Objetivo: Obter conhecimentos básicos sobre programação socket para desenvolver softwares clientes. Atividade 1 Estude, compile, corrija (se necessário) e teste o programa hostbyaddr.c. Modifique o programa de modo a poder calcular o tempo necessário à busca de informação sobre uma máquina. Compare o tempo necessário para procurar máquinas com endereços válidos e inválidos. Repita o teste para máquinas de sua sub-rede e para máquinas de outras sub-redes. Explique as diferenças encontradas, se houver. Uso:./hostbyaddr_mod Endereco_IP hostbyaddr #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> int main(int argc, const char **argv){ u_long addr; struct hostent *hp; char **p; if (argc!= 2) { (void) printf("uso: %s Endereco_IP\n", argv[0]); exit (1); if ((int)(addr = inet_addr(argv[1])) == -1) { (void) printf("forma do Endereco_IP: a.b.c.d\n"); exit (2);

hp = gethostbyaddr((char *)&addr, sizeof (addr), AF_INET); if (hp == NULL) { (void) printf("não foram encontradas informações sobre o hospedeiro %s\n", argv[1]); exit (3); for (p = hp->h_addr_list; *p!= 0; p++) { struct in_addr in; char **q; (void) memcpy(&in.s_addr, *p, sizeof (in.s_addr)); (void) printf("%s\t%s", inet_ntoa(in), hp->h_name); for (q = hp->h_aliases; *q!= 0; q++) (void) printf(" %s", *q); (void) putchar('\n'); exit (0); hostbyaddr modificado #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/time.h> /* for gettimeofday() */ #include <unistd.h> /* for gettimeofday() */ #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> int main(int argc, const char **argv)

{ u_long addr; struct hostent *hp; struct timeval t_inicial, t_final; float t_gethostbyaddr; char **p; if (argc!= 2) { (void) printf("uso: %s Endereco_IP\n", argv[0]); exit (1); binário // inet_addr transforma uma string de ip (x.x.x.x) em um número if ((int)(addr = inet_addr(argv[1])) == -1) { (void) printf("forma do Endereco_IP: a.b.c.d\n"); exit (2); gettimeofday( &t_inicial, NULL ); // gethostbyaddr(const void *addr, int len, int type); hp = gethostbyaddr((char *)&addr, sizeof (addr), AF_INET); gettimeofday( &t_final, NULL ); t_gethostbyaddr = (float)(t_final.tv_sec - t_inicial.tv_sec); t_gethostbyaddr += (t_final.tv_usec - t_inicial.tv_usec)/(float)1000000; printf("tempo gethostbyaddr(): %.10f sec\n", t_gethostbyaddr); fflush(stdout); if (hp == NULL) { (void) printf("não foram encontradas informações sobre o hospedeiro %s\n", argv[1]); exit (3); /* struct hostent char *h_name; // official name of host char **h_aliases; // alias list int h_addrtype; // host address type int h_length; // length of address

char **h_addr_list; // list of addresses struct in_addr unsigned long s_addr; */ for (p = hp->h_addr_list; *p!= 0; p++) { struct in_addr in; char **q; (void) memcpy(&in.s_addr, *p, sizeof (in.s_addr)); (void) printf("%s\t%s", inet_ntoa(in), hp->h_name); for (q = hp->h_aliases; *q!= 0; q++) (void) printf(" %s", *q); (void) putchar('\n'); exit (0); O código acima é a modificação do original de modo que possa calcular o tempo gasto para buscar a informação sobre uma máquina na rede. Acima foi implementado o gettimeofday inicial e final, ao final foi feito o calculo e impresso o resultado. Veja abaixo os dados coletados para consulta em máquinas a rede: Consulta por IP's válidos: IP hostname Tempo (s) Tempo c/ tráfego (s) ¹ 10.0.0.1 (ip local) cesarkallas.opensrc cesarkallas 0.0009660000 0.0033519999 10.0.0.10 (gateway) opensrc opensrc 0.0010380000 0.0012350000 200.174.144.14 (dns1) dns1.cps.virtua.com.br 0.6652169824 0.0014940000 200.174.144.15 (dns2) dns2.cps.virtua.com.br 0.0241839997 0.0046370002 201.12.128.1 c90c8001.cps.virtua.com.br 0.1946869940 0.2693189979 200.174.144.8 1448.cps.virtua.com.br 0.0213740002 0.1383080035 200.184.238.149 200-184-238-149.intelignet.com.br 0.0202709995 0.1342159957 200.184.254.182 intelig-se1-0- ixrrnp102.intelignet.com.br 0.1421169937 0.2952699959 200.221.2.45 home.uol.com.br 0.0183530003 0.1459269971 200.221.2.4 domredir.bol.com.br 0.2094170004 200.221.2.4

IP hostname Tempo (s) Tempo c/ tráfego (s) ¹ 82.96.75.3 rackcheck.com 6.6051712036 0.5656419992 82.96.72.1 gw.unitedservers.de 1.1281609535 0.2182389945 ¹ Tempo medido com o aumento de tráfego na interface local de rede. O aumento foi atráves de uma copia de um grande arquivo entre a estação e o gateway. 7500 7000 6500 6000 5500 5000 4500 4000 3500 3000 2500 2000 1500 1000 500 0 Consulta por endereços Ips inválidos: 10.0.0.1 (ip local) 10.0.0.10 (gateway) Máquina (ip address) Tempo gasto (s) 199.239.136.200 22.1332817078 10.0.0.23 0.5276449919 200.174.142.1 0.2783350050 10.0.1.1 0.0393499993 10.1.1.1 0.1253660023 192.168.0.1 0.1509770006 172.16.0.1 200.174. 200.174. 201.12.1 200.174. 2001842 0.1846490055 2001842 200.221. 144.14 Consulta por IP válido 144.15 28.1 144.8 38149 54182 2.45 127.0.0.2 (dns1) (dns2) 0.2793569863 200.221. 2.4 Tempo c/ tráfego (s) ¹ Tempo (s) 82.96.75. 3 82.96.72. 1 Análise dos resultados da atividade 1: Os resultados obtidos para endereços válidos mostram que quanto menor o caminho percorrido para chegar o host, menor o tempo. O tempo para a consulta não é sempre o mesmo, independente se é uma rede interna ou se a consulta é feita via internet, isso porque o tráfego de dados dos dispositivos que compõe o caminho até chegar o host influencia. Nos tempos medidos na atividade 1 podemos notar que ao elevar o tráfego de dados na interface local de redes o tempo aumenta. Outro fator que pode influenciar no tempo de consulta é a distância que o sinal percorre até chegar o host, se o host ficar em outro país, continente, o tempo será bem maior, pois terá que passar por diversos dispositivos (roteadores) até chegar no host, isso é demonstrado nos últimos dois resultados dos endereços válidos. Com relação aos endereços inválidos, nota-se que o tempo aumenta pelo mesmo fator dos endereços válidos, tráfego de dados e localização fisica (caminhos percorridos), quanto mais distante o host, maior o tempo. A tabela de endereços inválidos demonstra também que os tempos são maiores quando a consulta é feita para endereços fora da faixa de ip da interface local de rede. Atividade 2 Construa a gethostbyname e imprime a retornada. Compare o uma usando e. Repita o de subrede e de outras sub-redes. Explique as encontradas, se houver. Uso:./gethostbyname hostname

gethostbyname #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/time.h> /* for gettimeofday() */ #include <unistd.h> /* for gettimeofday() */ #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> int main(int argc, const char **argv) { u_long addr; struct hostent *host; struct timeval t_inicial, t_final; float t_gethostbyname; char **p; if (argc!= 2) { (void) printf("uso: %s hostname\n", argv[0]); exit (1); gettimeofday( &t_inicial, NULL ); // * gethostbyname(const char *name); host = gethostbyname(argv[1]); gettimeofday( &t_final, NULL ); t_gethostbyname = (float)(t_final.tv_sec - t_inicial.tv_sec); t_gethostbyname += (t_final.tv_usec - t_inicial.tv_usec)/(float)1000000; printf("tempo gethostbyname(): %.10f sec\n", t_gethostbyname); fflush(stdout); if (host == NULL) { (void) printf("não foram encontradas informações sobre o hospedeiro %s\n", argv[1]); exit (3);

/* struct hostent char *h_name; // official name of host char **h_aliases; // alias list int h_addrtype; // host address type int h_length; // length of address char **h_addr_list; // list of addresses struct in_addr unsigned long s_addr; */ for (p = host->h_addr_list; *p!= 0; p++) { struct in_addr in; char **q; (void) memcpy(&in.s_addr, *p, sizeof (in.s_addr)); (void) printf("%s\t%s", inet_ntoa(in), host->h_name); for (q = host->h_aliases; *q!= 0; q++) (void) printf(" %s", *q); (void) putchar('\n'); exit (0); O código acima exibe o tempo gasto para consultar informações de rede de um determinado host, identificado por nome. Acima foi implementado o gettimeofday inicial e final, ao final foi feito o calculo e impresso o resultado. A função gethostbyname(const char *name) está sendo usada no lugar da função gethostbyaddr(). Consulta por hostnames válidos: IP hostname Tempo (s) Tempo c/ tráfego (s) ¹ 10.0.0.1 (ip local) cesarkallas.opensrc cesarkallas 0.0017830000 0.0023390001 10.0.0.10 (gateway) opensrc opensrc 0.0015760000 0.0033880000 200.174.144.14 (dns1) dns1.cps.virtua.com.br 0.0187470000 0.0011150000 200.174.144.15 (dns2) dns2.cps.virtua.com.br 1.8913689852 0.0054950002 201.12.128.1 c90c8001.cps.virtua.com.br 0.0175219998 0.0014790000 200.174.144.8 1448.cps.virtua.com.br 0.1860249937 0.0011130000 200.184.238.149 200-184-238-149.intelignet.com.br - -

IP hostname Tempo (s) Tempo c/ tráfego (s) ¹ -00.184.254.182 intelig-se1-0-ixrrnp102.intelignet.com.br - - 200.221.2.45 home.uol.com.br 0.1519789994 0.0010280000 200.221.2.4 domredir.bol.com.br 0.0251109991 0.0021350000 82.96.75.3 rackcheck.com 4.8386330605 0.0015430000 82.96.72.1 gw.unitedservers.de - - 160 150 140 130 120 110 100 90 80 70 60 50 40 30 20 10 0 Consulta por hostnames inválidos: Análise cesarkal- dos resultados da atividade 2: opensrc opensrc Hostname cesarkallas.opensrc Tempo (s) cesarkallas1 0.0529289991 fora.uol.com.br 0.0706880018 adasd 0.0602150001 sem.fapesp.br 0.0928189978 dns1.cps. virtua.- com.br dns2.cps. virtua.- com.br Consulta por hostnames válidos c90c8001.cps.virtu a.com.br 1448.cps. virtua.- com.br 200-184- 238-149.inteli gnet.- intelig- se1-0- ixrrnp102.inteligne home.uol.com.br dom- redir.- bol.- com.br Tempo c/ tráfego (s) ¹ Tempo (s) rackcheck. com gw.unitedservers.de O tempo gasto é dependente de muitos fatores, teoricamente o tempo gasto é maior na consulta por hostname, pois o nome precisa ser resolvido e posteriormente consultado. Consulta IP x Hostname Tempo hostname (s) ¹ Tempo IP (s) 700 650 600 550 500 450 400 350 300 250 200 150 100 50 0 10.0.0.1 (ip local) 10.0.0.10 (gateway) 200.174. 144.14 (dns1) 200.174. 144.15 (dns2) 201.12.1 28.1 200.174. 144.8 2001842 38149 2001842 54182 200.221. 2.45 200.221. 2.4 82.96.75. 3 82.96.72. 1 Conclusão A atividade mostra claramente que a medição do tempo é muito relativa, dependendo de vários fatores da rede como tráfego e distância física. Outro fator importante a ser citado é que, na rede interna que foi testado o código, se retirar do arquivo de hosts do linux o nome de um host, torna-se impossível buscar informações por nome da máquina, apenas por IP. Isso de dá pelo fato do que o ambiente testado não possui um servidor de resolução de nome e nem um arquivo pré-configurado com os nomes já estabelecidos.

Ambiente de testes e Sessão Processor: Mobile AMD Athlon(tm) XP2500+ Linux cesarkallas 2.6.11.4-21.8-default #1 Tue Jul 19 12:42:37 UTC 2005 i686 athlon i386 GNU/Linux SUSE Linux 9.3 National Semiconductor Corporation DP83815 (MacPhyter) Ethernet Controller 10/100Mb Rede local 10Mbps / Hub encore 10Mbps NET Virtua Internet Cable Internet - 300Kbps