Redes de Computadores

Aula Prática 2

Nesta aula, você aprenderá a utilizar alguns utilitários de rede que podem ajudá-lo a identificar problemas na rede ou nos programas que estiver desenvolvendo ao longo do curso.

Utilitários de Rede

No Windows  existem alguns utilitários de rede disponíveis através da janela DOS. Os utilitários que serão vistos nesta aula são programas que usam a linha de comando e são baseados em programas originados do Unix, com a mesma função. Os utilitários mostrados são idênticos aos do Unix/Linux com excessão do traceroute que no windows tem o nome de tracert devido a limitaçào antiga de 8 caracteres para nomes de programas do DOS.

 

O utilitário ping

O utilitário ping (analogia com o jogo de ping-pong - na verdade, o nome é um acrônimo para Packet Internet Groper, que poderia ser traduzido como "procurador de pacotes da Internet") serve para verificar a resposta de um outro servidor na rede até a camada de rede. O ping envia pacotes ICMP (Internet Control Message Protocol) requisitando uma resposta do servidor remoto. A resposta do servidor normalmente é o mesmo pacote enviado. Ou seja, a máquina remota simplesmente devolve os dados que ela recebeu. O objetivo é testar se além da rede estar funcionando corretamente até a camada de rede, a mesma não está fazendo nenhuma tradução nos bytes enviados.

 

O modo de usar o ping no Windows é (gerado pelo próprio ping!):

 

Uso: ping [-t] [-a] [-n num] [-l tamanho] [-f] [-i TTL] [-v TOS]

          [-r num] [-s num] [[-j lista_hosts] | [-k lista_hosts]]

          [-w tempo_limite] lista_destino

 

Opções:

    -t              Dispara contra o host especificado até ser interrompido.

                    Para ver estatísticas e continuar, pressione CTRL-Break;

                    para terminar, pressione CRTL-C.

    -a              Resolve endereços para nomes de host.

    -n num          Número de requisições de eco a enviar. O valor padrão é 4.

    -l tamanho      Envia o tamanho do buffer.

    -f              Ativa o sinalizador de não-fragmentação no pacote.

    -i TTL          Define o tempo de vida.

    -v TOS          Define o tipo de serviço.

    -r num          Rota dos pacotes para <num> saltos.

    -s num          Data e hora para <num> saltos.

    -j lista_hosts  Rota ampliada de origens definida em <lista_hosts>.

    -k lista_hosts  Rota restrita de origens definida em <lista_hosts>.

    -w tempo_limite Tempo limite em milissegundos a aguardar para cada resposta.

 

Essa sintaxe varia um pouco no Unix/Linux.

O tamanho do pacote, por exemplo, é definido com o flag -s, ao invés de -l. O número de requisições é definido com o flag -c, ao invés de -n.

Veja abaixo um exemplo da saída de um ping para o endereço www.fabrai.br:

 

C:\WINDOWS>ping www.fabrai.br

 

Disparando contra www.fabrai.br [201.17.147.55] com 32 bytes de dados:

 

Resposta de 201.17.147.55: bytes=32 tempo=98ms TTL=51

Resposta de 201.17.147.55: bytes=32 tempo=94ms TTL=51

Resposta de 201.17.147.55: bytes=32 tempo=102ms TTL=51

Resposta de 201.17.147.55: bytes=32 tempo=106ms TTL=51

 

Estatísticas do Ping para 201.17.147.55:

    Pacotes: Enviados = 4, Recebidos = 4, Perdidos = 0 (0% de perda),

Aproximar um número redondo de vezes em milissegundos:

    Mínimo = 94ms, Máximo = 106ms, Média = 100ms

 

 

O ping mostra uma série de informações interessantes, como por exemplo, o endereço IP de destino, a quantidade de bytes enviados, o tempo de resposta de cada pacote e o TTL (Time To Live ou Tempo de Vida) do pacote. O ping default do windows sempre manda 4 pacotes, no unix, ao contrário o ping funciona indefinidamente até o usuário cancelar com control-C.

 

Como você está numa rede segura, com endereços não válidos, não irá conseguir utilizar o ping apontando para computadores na Internet. Assim vá até o site

 

http://www.subnetonline.com/pages/network-tools/online-ping-ipv4.php

 

O ping, nesse caso, partirá do servidor www.subnetonline.com

 

Agora, use o comando ping para pingar os diversos servidores abaixo:

 

   1. Google: www.google.com

   2. Universo On Line: www.uol.com.br

   3. Subnet Online: www.subnetonline.com

 

Qual dos sites abaixo apresentou menor tempo de resposta? Por que?

 

O (TTL) Time To Live é um campo do pacote IP e é utilizado para limitar o número de roteadores por onde um determinado pacote pode passar. Cada roteador por onde um determinado pacote IP trafega decrementa o número do campo TTL antes de passá-lo para frente. Se o valor do campo TTL chegar a zero, o roteador não envia mais o pacote IP, e sim um outro pacote ICMP para a origem avisando que o pacote IP original teve o seu TTL=0 e por isso não pôde ser mais transmitido.

 

Esse mecanismo serve para evitar que em uma rede mal configurada e com algum loop de endereçamento, a quantidade de pacotes trafegada estoure a capacidade da rede por causa de retransmissões entre os mesmos roteadores. Por exemplo, se do ponto A os pacotes IP são roteados para o ponto B, e do ponto B (por causa de um erro) são roteados de volta para o ponto A, um pacote IP poderia ficar indo e voltando indefinidamente se não possuísse o mecanismo do TTL.

 

O utilitário traceroute

O utilitário traceroute serve para nos mostrar por onde um pacote IP trafega quando é enviado. Esse utilitário é tão útil quanto o ping e no windows está disponível com o nome de tracert.

 

A sintaxe do tracert no windows é:

 

Uso: tracert [-d] [-h nmax_saltos] [-j lst_hosts] [-w tempo_limite] destino

 

Opções:

    -d                 Não resolver endereços para nomes de hosts.

    -h nmax_saltos     Número máximo de saltos para a procura do destino.

    -j lst_hosts       Rota ampliada de origens usada com a lista lst_hosts.

    -w tempo_limite    Tempo de espera em milissegundos para cada resposta.

 

Não existe nenhum mecanismo disponível nos roteadores para informar o trajeto de um pacote IP pela Internet. Mas sem usar nenhum artifício adicional, o autor do traceroute conseguiu fazer este programa de forma muito criativa. Ele aproveitou o campo TTL do pacote IP para transmitir pacotes com TTL a partir de 1 até alcançar o destino. Assim, cada vez que um pacote "morre" no caminho até o destino, o traceroute é avisado e assim consegue traçar a rota.

 

Veja um exemplo de saída de um traceroute no Unix/Linux, partindo dos site da Rede Rio,  para o endereço www.sdsc.edu:

 

$> traceroute www.google.com

 

traceroute: Warning: www.google.com has multiple addresses; using 64.233.163.103

traceroute to www.l.google.com (64.233.163.103), 30 hops max, 40 byte packets

 1  giga-bgp-cbpf.rederio.br (200.20.94.58)  0.951 ms  0.608 ms  0.557 ms

 2  embratel-G4-0-gacc02.rjo.embratel.net.br (200.179.69.29)  0.620 ms  0.635 ms  9.604 ms

 3  ebt-T0-5-5-0-21-tacc01.rjoen.embratel.net.br (200.244.163.229)  1.437 ms  1.225 ms  1.250 ms

 4  peer-T0-0-4-0-tacc01.rjoen.embratel.net.br (201.73.51.10)  14.523 ms  14.199 ms  8.702 ms

 5  209.85.250.242 (209.85.250.242)  6.901 ms 209.85.250.248 (209.85.250.248)  6.692 ms  42.002 ms

 6  72.14.233.93 (72.14.233.93)  9.222 ms  7.004 ms  130.829 ms

 7  64.233.175.58 (64.233.175.58)  12.911 ms  7.495 ms  117.822 ms

 8  bs-in-f103.google.com (64.233.163.103)  7.673 ms  7.754 ms  7.117 ms

 

Rastreamento completo.

 

A saída do traceroute indica para cada HOP (ponto de roteamento do pacote IP), o tempo de três pacotes enviados e o endereço do roteador correspondente. Montando a sequência de 1 até o final, podemos ver por onde o pacote IP foi roteado até o destino.

 

O traceroute funciona enviando sucessivos pacotes IP de ping com o valor do TTL iniciando em 1 e aumentando até o ping ser respondido pelo destino. Isso faz com que o pacote IP "morra" cada vez mais longe da origem. Para cada vez que o TTL chega a zero (o pacote "morre"), o roteador onde isso ocorreu envia um pacote ICMP para a origem. Desta forma a origem tem como saber qual é o endereço do roteador onde o pacote IP morreu e consequentemente a rota dele até o destino!

 

Utilizando o site http://www.subnetonline.com/pages/network-tools/online-traceroute.php execute traceroute para cada um dos endereços abaixo e veja qual é a rota traçada.

 

   1. Google: www.google.com

   2. Rede Rio Computadores: guanabara.rederio.br

   3. New South Wales Regional Network Organisation: www.nswrno.net.au

   4. Subnet Online: www.subnetonline.com

 

Agora faça o mesmo traceroute a partir de http://guanabara.rederio.br/cgi-bin/nph-traceroute

 

Você observou diferenças nos resultados? A que se devem as diferenças? Qual o traceroute com menos HOPs e com mais HOPs em cada um dos testes? Você acha que um TTL máximo de 255 atende à necessidade da maioria das redes?

 

O site www.traceroute.org disponibiliza vários links para sites espalhados pelo a partir dos quais é possível fazer o traceroute. Tente executar o traceroute a partir de alguns desses sites (alguns podem não estar funcionando!) para a fabrai (www.fabrai.br).

 

Veja abaixo um exemplo de saída de traceroute em uma rede mal configurada ou com problemas de rota. Os pacotes ficam trafegando entre os IPs 200.192.56.163 e 200.192.56.161. O traceroute tem um limite de 30 rotas por default. Se qualquer rota ultrapassar este limite, o programa termina, mas isso pode ser alterado (observação: o problema abaixo .

 

traceroute to 200.190.226.221 (200.190.226.221), 30 hops max, 40 byte packets

 1  ithaca.i2.com.br (200.238.196.17)  0.892 ms  0.88 ms  0.836 ms

 2  i2-gw.pop-mg.rnp.br (200.17.183.49)  9.694 ms  9.805 ms  72.695 ms

 3  arrozdoce.pop-mg.com.br (200.236.165.199)  47.173 ms  57.568 ms  9.666 ms

 4  casadinho-a3.pop-mg.rnp.br (200.17.183.209)  35.299 ms  29.25 ms  14.784 ms

 5  pop-mg-rnp-br-S3-7-acc01.bhe.embratel.net.br (200.251.254.73)  30.479 ms  47.494 ms  32.554 ms

 6  ebt-F5-0-dist01.bhe.embratel.net.br (200.255.153.66)  46.537 ms  47.471 ms  48.432 ms

 7  netstream-S3-0-dist01.bhe.embratel.net.br (200.251.12.50)  1201.36 ms  226.436 ms netstream-S3-1-dist01.bhe.embratel.net.br (200.251.12.54)  293.001 ms

 8  200.192.56.163 (200.192.56.163)  294.807 ms  1316.43 ms  171.37 ms

 9  200.192.56.161 (200.192.56.161)  157.437 ms  66.189 ms  82.82 ms

10  200.192.56.163 (200.192.56.163)  1263.75 ms  879.158 ms  180.572 ms

11  200.192.56.161 (200.192.56.161)  147.899 ms  80.226 ms  148.109 ms

12  200.192.56.163 (200.192.56.163)  190.791 ms  1760.4 ms  152.392 ms

13  200.192.56.161 (200.192.56.161)  97.871 ms  130.071 ms  216.73 ms

14  200.192.56.163 (200.192.56.163)  193.109 ms  109.728 ms  132.562 ms

15  200.192.56.161 (200.192.56.161)  119.146 ms  132.605 ms  104.369 ms

16  200.192.56.163 (200.192.56.163)  239.958 ms  139.003 ms  125.818 ms

17  200.192.56.161 (200.192.56.161)  77.857 ms  107.275 ms  163.703 ms

18  200.192.56.163 (200.192.56.163)  170.308 ms  96.406 ms  90.269 ms

19  200.192.56.161 (200.192.56.161)  154.676 ms  61.096 ms  179.464 ms

20  200.192.56.163 (200.192.56.163)  196.048 ms  150.234 ms  144.485 ms

21  200.192.56.161 (200.192.56.161)  111.255 ms  75.791 ms  108.033 ms

22  200.192.56.163 (200.192.56.163)  98.99 ms  294.196 ms  298.766 ms

23  200.192.56.161 (200.192.56.161)  148.568 ms  147.442 ms  119.248 ms

24  200.192.56.163 (200.192.56.163)  233.132 ms  232.526 ms  213.243 ms

25  200.192.56.161 (200.192.56.161)  101.576 ms  101.769 ms  147.615 ms

26  200.192.56.163 (200.192.56.163)  148.876 ms  189.746 ms  259.251 ms

27  200.192.56.161 (200.192.56.161)  74.61 ms  130.222 ms  1652.72 ms

28  200.192.56.163 (200.192.56.163)  233.248 ms  161.242 ms  146.573 ms

29  200.192.56.161 (200.192.56.161)  143.745 ms  131.513 ms  122.557 ms

30  200.192.56.163 (200.192.56.163)  144.07 ms  165.208 ms  182.307 ms

 

O utilitário nslookup

O utilitário nslookup serve para traduzir nomes de domínio para os números IP correspondentes. Este utilitário consulta os servidores de DNS (Domain Name Service) espalhados na Internet para resolver uma consulta e descobrir o endereço.

 

O nslookup ao contrário dos outros utilitários vistos até agora, oferece um prompt para o usuário digitar nomes de domínios para consulta. Veja abaixo um exemplo de execução do nslookup:

 

 

C:\>nslookup

Servidor padrao:  teste.com

Address:  200.70.201.33

 

> server 4.2.2.1

Servidor padrÒo:  vnsc-pri.sys.gtei.net

Address:  4.2.2.1

 

> www.fabrai.br

Servidor:  vnsc-pri.sys.gtei.net

Address:  4.2.2.1

 

Não é resposta de autorização:

Nome =   www.fabrai.br

Address:  201.17.147.55

 

> set type=mx

> mg.gov.br.

Servidor:  vnsc-pri.sys.gtei.net

Address:  4.2.2.1

 

Não é resposta de autorização:

mg.gov.br       MX preference = 1, mail exchanger = asmail.prodemge.gov.br

 

O que foi digitado pelo usuário está em negrito. Note que além dos domínios, existem alguns comandos disponíveis no nslookup (set type=). Quando os domínios são seguidos de um ponto, nslookup interpreta como domínios completos. É possível especificar somente um nome de uma máquina e o programa busca pelo seu endereço IP dentro da própria rede.

 

Pode-se usar o comando help para ter acesso aos demais comandos do nslookup. Veja a saída de um help do nslookup no unix:

 

> help

$Id: nslookup.help,v 8.4 1996/10/25 18:09:41 vixie Exp $

 

Commands:       (identifiers are shown in uppercase, [] means optional)

NAME            - print info about the host/domain NAME using default server

NAME1 NAME2     - as above, but use NAME2 as server

help or ?       - print info on common commands; see nslookup(1) for details

set OPTION      - set an option

    all         - print options, current server and host

    [no]debug   - print debugging information

    [no]d2      - print exhaustive debugging information

    [no]defname - append domain name to each query

    [no]recurse - ask for recursive answer to query

    [no]vc      - always use a virtual circuit

    domain=NAME - set default domain name to NAME

    srchlist=N1[/N2/.../N6] - set domain to N1 and search list to N1,N2, etc.

    root=NAME   - set root server to NAME

    retry=X     - set number of retries to X

    timeout=X   - set initial time-out interval to X seconds

    querytype=X - set query type, e.g., A,ANYÇNAME,HINFO,MX,PX,NS,PTR,SOA,TXT,WKS,SRV,NAPT

R

    port=X      - set port number to send query on

    type=X      - synonym for querytype

    class=X     - set query class to one of IN (Internet), CHAOS, HESIOD or ANY

server NAME     - set default server to NAME, using current default server

lserver NAME    - set default server to NAME, using initial server

finger [USER]   - finger the optional USER at the current default host

root            - set current default server to the root

ls [opt] DOMAIN [> FILE] - list addresses in DOMAIN (optional: output to FILE)

    -a          -  list canonical names and aliases

    -h          -  list HINFO (CPU type and operating system)

    -s          -  list well-known services

    -d          -  list all records

    -t TYPE     -  list records of the given type (e.g., AÇNAME,MX, etc.)

view FILE       - sort an 'ls' output file and view it with more

exit            - exit the program, ^D also exits

 

Descubra os endereços IP das máquinas que podem receber e-mail das seguintes empresas, usando o  site http://www.kloth.net/services/nslookup.php:

 

   1. Vivo - vivo.com.br

   2. Transmeta (nos USA) - transmeta.com

   3. British Telecom da Espanha - bt.es

 

O utilitário netstat

O netstat serve para mostrar as conexões ativas atualmente com a máquina em questão. Ele lista na tela todas as conexões TCP/IP em andamento. Além disso existe uma opção para mostrar o conteúdo da tabela de roteamento. Veja abaixo a sintaxe do netstat do windows:

 

Exibir estatísticas de protocolo e conexões de rede TCP/IP atuais.

 

NETSTAT [-a] [-e] [-n] [-s] [-p proto] [-r] [intervalo]

 

  -a            Exibe todas as conexões e portas de escuta.

  -e            Exibe estatísticas Ethernet.  Isso pode ser combinado à

                opção -s.

  -n            Exibe endereços e números de porta em formato numérico.

  -p proto      Exibe conexões para o protocolo especificado por proto; proto

                pode ser tcp ou udp.  Se usado com a opção -s para exibir

                estatísticas por protocolo, proto pode ser tcp, udp ou ip.

  -r            Exibe o conteúdo da tabela de roteamento.

  -s            Exibe estatísticas por protocolo.  Por padrão, as estatísticas

                são mostradas para TCP, UDP e IP; a opção -p pode ser usada

                para especificar um subconjunto do padrão.

 intervalo      Exibe novamente uma estatística selecionada, fazendo pausas de

                intervalos de segundos entre cada tela.  Pressione CTRL+C para

                interromper a nova exibição das estatísticas.  Caso omitido,

                netstat imprimirá as informações de configuração uma vez.

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

O comando netstat pode ser usado no ambiente Linux (e na maioria dos Unix) da forma descrita abaixo (pagina de manual - man page da distribuição Linux Fedora).

 

netstat

    * NOME

    * SINOPSE

    * DESCRIÇÃO

    *

          o (sem opções)

          o -r, --route

          o -i, --interface iface

          o -M, --masquerade

          o -s, --statistics

    * OPÇÕES

    *

          o -v, --verbose

          o -n, --numeric

          o -A, --af família

          o -c, --continuous

    * SAÍDA

    *

          o Conexões Internet Ativas (TCP, UDP, RAW)

          o Proto

          o Recv-Q

          o Send-Q

          o Endereço Local

          o Endereço Remoto

          o Estado

          o Usuário

          o Temporizador

          o UNIX domain sockets Ativos

          o Proto

          o CntRef

          o Flags

          o Tipos

          o Estados

          o Path

          o Sockets IPX ativos

          o Sockets NET/ROM ativos

          o Sockets AX.25 ativos

 

NOME

netstat - Mostra conexões de rede, tabelas de roteamento, estatísticas de interface e conexões mascaradas.

SINOPSE

 

netstat [-venaoc] [--tcp|-t] [--udp|-u] [--raw|-w] [--unix|-x] [--inet|--ip] [--ax25] [--ipx] [--netrom]

 

netstat [-veenc] [--inet] [--ipx] [--netrom] [--ddp] [--ax25] {--route|-r}

 

netstat [-veenac] {--interfaces|-i} [iface]

 

netstat [-enc] {--masquerade|-M}

 

netstat {--statistics|-s}

 

netstat {-V|--version} {-h|--help}

DESCRIÇÃO

netstat mostra informações do subsistema de rede do Linux.

(sem opções)

Você pode ver o estado das conexões de rede através da listagem dos sockets abertos. Esta é a operação padrão: se você não especificar nenhuma família de endereços, os sockets ativos de todas as famílias de endereços configuradas serão mostrados. Com -e você obterá informações adicionais (userid). Com a chave -v você poderá fazer com que o netstat reclame sobre famílias de endereços conhecidas que não sejam suportadas pelo kernel. A opção -o mostra algumas informações adicionais sobre temporizadores de rede. -a mostra todos os sockets, incluindo sockets de servidores. A família de endereços inet mostrará sockets raw, udp e tcp.

-r, --route

Com a opção -r, --route você obterá as tabelas de roteamento do kernel no mesmo formato usado por route -e. netstat -er usará o formato de apresentação do comando route. Por favor veja route(8) para maiores detalhes.

-i, --interface iface

Se você usar a opção -i, --interfaces , uma tabela de todas (ou da iface especificada) as interfaces de rede será mostrada. A saída usa o formato ifconfig -e , e é descrita em ifconfig(8). netstat -ei mostrará uma tabela ou uma entrada de interface como ifconfig mostra. Com a chave -a , você pode incluir interfaces que não estejam configuradas (i.e. não tem a flag U=UP configurada).

-M, --masquerade

 

Uma lista de todas as sessões mascaradas também pode ser vista. Com a chave -e você pode incluir mais algumas informações sobre numeração sequencial e deltas , causados por reescritas de dados em sessões FTP (comando PORT). O suporte a mascaramento é usado para esconder máquinas em endereços de rede não oficiais do resto do mundo, como descrito em ipfw(4),ipfwadm(8) e ipfw (8).

-s, --statistics

 

Mostra estatísticas sobre o subsistema de rede do kernel do Linux, que são lidas a partir de /proc/net/snmp.

OPÇÕES

-v, --verbose

Informa ao usuário o que está ocorrendo, sendo detalhado. Especialmente mostra algumas informações úteis sobre famílias de endereços não configuradas.

-n, --numeric

Mostra endereços numéricos, sem tentar resolver os nomes da máquina, porta ou usuário.

-A, --af família

Usa um método diferente para configurar as famílias de endereços. família é uma lista de palavras-chave de famílias de endereços separadas por vírgulas (',') como inet, unix, ipx, ax25, netrom e ddp. Tem o mesmo efeito de usar as opções longas --inet, --unix, --ipx, --ax25, --netrom e --ddp.

-c, --continuous

Isto fará com que netstat mostre a tabela selecionada a cada segundo, continuamente na tela até que você o interrompa.

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

Use o netstat para mostrar todas as conexões e portas de escuta da sua máquina (LISTENING). A saída é mostrada em 4 colunas. Na primeira está o protocolo, na segunda o endereço da conexão na porta local. A terceira coluna mostra o endereço na máquina remota (o endereço da máquina e a porta TCP da conexão) e a quarta coluna mostra o estado da conexão (ESTABLISHED, LISTENING, CLOSE_WAIT, etc).

 

Use a opção -r para mostrar o conteúdo da tabela de roteamento da sua estação. Essa tabela mostra para qual endereço cada pacote deve ser enviado em função do seu endereço IP. Desta forma, a máquina garante que o pacote será entregue para a máquina de destino corretamente.

 

Execute os seguintes comandos, com o utilitário netstat. Caso não consiga executá-los em sua máquina Windows, baixe o utilitário Putty.exe a partir do link http://www.lnaffah.com/PUTTY.EX_

 

Utilitário Putty – baixe aqui

Renomeie o arquivo com a extensão EXE após baixá-lo. Execute-o e faça acesso ao servidor 10.39.20.1, com o usuário redes e a senha redes.

 

a)         netstat –s

b)         netstat –nr

c)         netstat –a

 

Explique  o que você viu em cada um deles.

 

Baseado em exercícios elaborados pelo Prof. Lindenberg Naffah Ferreira e em exercícios elaborados pelo Prof.  Rodrigo Otávio R. Antunes