Laboratório de Redes de Computadores: 1ª Sessão Introdução ao wireshark - PDF
Download "Laboratório de Redes de Computadores: 1ª Sessão Introdução ao wireshark"
Olívia Taveira Correia
1 Licenciatura em Engenharia Informática e de Computadores (Instituto Superior Técnico - Alameda) Laboratório de Redes de Computadores: 1ª Sessão Introdução ao wireshark {RC-Lab1_Intro.doc} Prepare-se para a aula revendo os tópicos: Arquitectura Internet, DNS e HTTP O wireshark (cfr é um packet sniffer, isto é, um programa: - para capturar (sniff) bytes em trânsito na Rede local; - para armazenar localmente, em ficheiros de trace (extensão.cap), os bytes capturados; - para fornecer uma visão desses ficheiros, numa forma estruturada: - agrupa os bytes capturados em tramas, - lista a sequência de tramas trocadas entre entidades em diálogo, - mostra o conteúdo dos campos de tais tramas Precisamente, os objectivos da primeira sessão de laboratório sobre o wireshark são: - aprender a usá-lo: capturar tramas, analisar um ficheiro de trace, e filtrar essa análise; - compreender os campos das tramas capturadas - acompanhar a evolução do tráfego, mormente ao se invocarem aplicações populares O wireshark é, de per si, passivo, isto é: não transmite bytes para a Rede, nem é o destinatário de bytes que outros computadores enviaram; o que faz é capturar (copiar para um ficheiro de trace interno) os bytes transmitidos (ou recebidos) pelo próprio computador onde ele se executa. Grosso modo, esses bytes estão agrupados em assim denominadas tramas (link-layer frames); essas tramas contêm datagramas-ip; estas, por sua vez, contêm segmentos-tcp/udp; estes, por seu turno, contêm as mensagens request/reply pertinentes aos protocolos que são usados entre Aplicações: HTTP, FTP, DNS Ethernet IP TCP/UDP Aplicação Informação utilizador Trama A abordagem inicial ao wireshark será feita através de exemplos concretos: - numa janela-terminal lançam-se Programas de Aplicação para gerar tráfego: o dig e o http. - noutra janela-terminal, lança-se o wireshark, para capturar o tráfego assim gerado, isto é, os bytes transmitidos e/ou recebidos por tais Programas. Para não se perder nada, é preferível lançar-se primeiro o wireshark e só depois a Aplicação A. Lançamento do wireshark: a.1 Lance uma janela-terminal na sua máquina; a.2 Comece por determinar e registar algumas informações, particularmente o endereço-mac da sua máquina {MAC addr} -, e os endereços-ip da sua máquina {inet addr} -, do servidor- DNS e da máquina tejo.ist.utl.pt Para isso, invoque os comandos /sbin/ifconfig eth1, cat /etc/resolv.conf e ping tejo Nome da máquina (na parte frontal da caixa): Endereço-IPv4 (4 bytes): Endereço-MAC (6 bytes): Endereço-Broadcast (4 bytes): Máscara da sub-rede (4 bytes): Endereço IPv6 (16 bytes): MTU: Domínio: Endereço IP do servidor-dns: Endereço-IPv4 (4 bytes) de tejo:
2 a.3 Invoque sudo wireshark [Enter] (deste modo o programa wireshark tem privilégios suficientes para levar a cabo a captura de tramas). Surge um ecran principal com: - Um típico menu de comandos (File, Capture, etc); - Uma linha para especificar o filtro de visualização (em ordem a limitar o volume de bytes a apresentar nas Janelas abaixo), a abordar mais adiante; - Três Janelas de observação, de momento vazias, a abordar mais adiante. a.4 Dê início à Captura de Bytes: clique em Capture Options. - é pacífico usar as opções default ou então proceder à sua selecção: - número de bytes a reter, por pacote; - modo promíscuo (reter tudo o que a máquina vislumbra na rede); - ficheiro para gravar informação recolhida. - no final, clique em Start; as tramas/pacotes doravante enviadas/recebidas pela máquina serão capturados pelo wireshark; este irá mostrando um Sumário da Captura B.1 Exemplificação do uso de wireshark com o dig Nota: dig (Domain Information Groper) é um comando para interrogar o sistema DNS e apresentar as subsequentes respostas no ecran. Substitui um comando obsoleto, nslookup. B.1.1 Lançamento do Programa de Aplicação (dig): - lance uma outra janela-terminal na sua máquina; - invoque o Programa de Aplicação dig, por ex.: dig +short cm-obidos.pt. (que, abra-se um parêntesis, se destina a obter o endereço-ip da CM de Óbidos ) B.1.2. Termo da Captura de Bytes: Deixe passar algum tempo. Repare no Sumário da Captura; verifique que não fica estável enquanto o dig não chegar ao fim Clique Stop quando o dig terminar. O Sumário da Captura esfuma-se e em seu lugar re-aparece o ecran principal do wireshark - mas as Janelas de observação já não estarão vazias B.1.3. Análise dos Pacotes capturados: É hora de compreender as vistas das Janelas de observação do wireshark: 1. A Janela superior (Summary/PDU List Pane) lista as tramas/pacotes capturadas; por cada uma, apresenta-se, coluna a coluna, - um identificador (1, 2, 3 ), atribuído pelo próprio wireshark; - o instante da sua captura; - os endereços-ip da fonte e destino; - o tipo de protocolo de maior nível veiculado; - informação adicional. 2. A Janela central (ProtocolTree/PDU Details Pane) mostra os campos de cabeçalho de uma dessas tramas/pacotes (para a seleccionar, basta colocar o cursor sobre a correspondente linha na Janela superior, e clicar duas vezes no botão esquerdo do rato). - clicando nos pequeninos apontadores à esquerda (ou clicando duas vezes sobre a linha), logra-se uma expansão (ou colapso) - isto é, mais (ou menos) detalhe - dos cabeçalhos das tramas/pacotes (e, eventualmente, segmentos-tcp/udp e mensagens de protocolos de alto nível); - se quiser expandir ou colapsar todos os cabeçalhos: View ExpandAll ou CollapseAll; 3. A Janela inferior (Data View/PDU Bytes Pane) mostra o conteúdo desses campos, em hexadecimal e Ascii. Confirme-o: clique numa linha da Summary Window; na ProtocolTree Window, clique sobre um cabeçalho (ex.: EthernetII) ou campo (ex.: EthernetII Source); verifique que, na Data View Window, ficarão salientes os bytes que o veiculam )
3 Nota 1: na Summary Window, pode alterar a ordem de apresentação das linhas por simples clique num dos títulos: No., Time, Source, Destination, etc. Nota 2: Se quiser ver os detalhes de uma ou mais linhas ao mesmo tempo, clique em cada uma delas e seleccione, uma a uma, View Show Packet in New Window Experiências Preliminares: - faça Scroll na Janela superior, até ao pacote em que está interessado; verifique que, à medida que procura os pacotes, os conteúdos das janelas abaixo vão mudando. - analise os detalhes desse pacote; - clique nos pequenos apontadores à esquerda, para minimizar/maximizar o detalhe dos cabeçalhos Ethernet, eventualmente IP e TCP, etc.; B.1.4. Filtragem das observações: Não se admire de estarem a ser apresentados mais pacotes do que aqueles em que mais se encontrará interessado: em particular, estarão incluídos os que correspondem a outras aplicações e/ou outros computadores na rede local da sua máquina Para descartar os pacotes a mais, há que usar o mecanismo de filtragem: - para reter, por ex., apenas os pacotes de/para o seu computador - e supondo que o seu endereço-ip é : digite o critério ip.addr== na linha do filtro de visualização; e clique Apply; - para reter apenas as linhas que envolvem tráfego DNS, aplique o critério dns; - para reter apenas os pacotes de/para o seu computador e, desses, os que transportam tráfego DNS, aplique o critério ip.addr== && dns; - para reter apenas as linhas numeradas entre 4 e 8 (inclusive), aplique o critério frame.number 4 && frame.number 8. Nota 1: o mecanismo de filtragem de observação repercute-se somente nas Janelas de Observação: isto é, a informação que nelas deixa de ser visível continua salvaguardada no computador, pelo que: se se remover o filtro (com Clear), ela volta a ser apresentada Nota 2. Pode repor um filtro prévio, clicando na seta à direita do campo Filter, e escolhendo o que entender; conclua clicando em Apply. Confira por si próprio Nota 3. Pode seleccionar filtros já construídos, com: Analyze DisplayFilters; seleccione um filtro, como seja UDP only; e conclua clicando em Ok. Confira por si próprio Nota 4. Pode também usar filtros com expressões: seleccione + Expression para criar a janela Wireshark: Filter Expression; seleccione o filtro (por ex., o filtro UDP logra-se agora clicando em UDP (ou digitando UDP), seguido de [Enter]); conclua clicando em Apply. Confira por si próprio Nota 5: o wireshark oferece um outro mecanismo, dito de filtragem de captura: antes de se dar início à captura de tráfego (com Capture Options Start), pode requerer-se que seja capturado apenas um subconjunto de todo o tráfego que atinge a interface física da sua máquina; isso é feito preenchendo Capture Options:CaptureOptions. Curiosidade: o mecanismo de filtragem apaga linhas da ProtocolTree Window; se quiser continuar a vê-las mas realçadas relativamente às demais -, é-lhe oferecida a opção de pintar as linhas em causa de uma maneira diferente da actual. Para tal, use View ColouringRules (mas não desperdice tempo na aula a conferi-lo por si próprio ) B.1.5 Questões (entre [] encontram-se sugestões para encontrar as respostas ) 1.1. Por quanto tempo perdurou a Captura-wireshark? Quantos pacotes/bytes foram capturados? Qual o tamanho médio desses pacotes? [Statistics Summary],, 1.2. Quais os protocolos de maior nível presentes nas tramas capturadas? (repare na coluna Protocol da ProtocolTree Window),,,,, 1.3. Escreva o comprimento (número de bytes) do cabeçalho dos seguintes protocolos: Ethernet: ; IP: ; UDP: 1.4. Há datagramas-ip que não transportam UDP nem TCP? Que transportam eles?,
4 Para ocultar tráfego irrelevante, aprecie o efeito dos dois seguintes filtros de observação eth.addr=={mac addr} ip.addr=={inet addr} && dns e vá optando por aquele que achar mais apropriado para responder a cada pergunta abaixo 2.1 Visualize o diagrama temporal do tráfego dig. [Statistics FlowGraph:DisplayedPackets] 2.2 As mensagens dizendo respeito a DNS são transportadas sobre TCP ou UDP? 2.3 Qual a pilha de protocolos para elas? [Statistics Protocol Hierarchy],,, 2.3a Qual o campo utilizado para discernir Isto é um datagrama-ip? 2.3b Qual o campo utilizado para discernir Isto é um segmento-udp? 2.3c Qual o campo utilizado para discernir Isto é uma mensagem-dns? clique em Frame (na ProtocolTree Window) e View ExpandSubTrees 2.3 Qual é o tamanho da Trama que veicula o pedido-dns? 2.4 Qual o tempo que decorreu entre o pedido-dns e a resposta-dns? (pode convir alterar o formato do campo Time, com View TimeDisplayFormat, e seleccionando entre: Date and Time, Time of Day, Seconds since, etc.) Adiante, analisam-se os cabeçalhos dos vários níveis de protocolo, de baixo para cima. clique em Ethernet II (na ProtocolTree Window) e View ExpandSubTrees 3.1 Quantos endereços-mac são usados? 3.2 Qual o endereço-mac da sua máquina? E o de destino do pedido-dns? 3.2a. A que máquina diz respeito esse endereço-mac de destino? [/sbin/arp a] 3.3. Qual o type (campo de 2 bytes) veiculado na trama-ethernet? que significa?, 3.4. Construa (e confira) um filtro para visualizar apenas o seguinte conjunto de tramas: Tramas que foram enviadas para a sua máquina: clique em Internet Protocol (na ProtocolTree Window) e View ExpandSubTrees 4.1. Quantos endereços-ip são usados? 4.2. Qual é o endereço-ip da sua máquina? E o do servidor DNS local? 4.2a. Qual o Nome canónico do servidor DNS local? [dig x {endereço-ip}] 4.3. Qual é o valor do campo protocol? que significa?, 4.4. Quais os valores do TTL (Time To Live) no pedido-dns e na resposta-dns?, 4.5. Qual é o conteúdo hexadecimal do campo Header Checksum do datagrama? 4.6. Qual o número de bytes de dados do datagrama? 4.6a. Qual o maior comprimento que poderia ter o campo dados no datagrama? 4.7. Construa (e confira) um filtro para visualizar apenas o seguinte conjunto de datagramas: Datagramas que foram enviados pela sua máquina: clique em User Datagram Protocol (na ProtocolTree Window) e View ExpandSubTrees 5.1. Quais os portos fonte e destino do pedido-dns? Algum é well known?,, 5.2. O campo comprimento é consistente com a informação do cabeçalho-ip? Como o concluiu?, 5.3. Qual o número de bytes de dados do segmento-udp? 5.3a. Quais são eles? 5.4. Qual é o conteúdo hexadecimal do campo Checksum do segmento-udp? 5.5. Construa (e confira) um filtro para visualizar apenas o seguinte conjunto de segmentos: Segmentos que foram enviados para o porto do dig: clique em Domain Name System (na ProtocolTree Window) e View ExpandSubTrees
5 6.1. Qual a finalidade do diálogo query/reply DNS? Qual o type do pedido-dns?, 6.2. Qual é o transaction-id em cada mensagem? Para que serve?, 6.3. Qual o campo que caracteriza as mensagens-dns como pedido ou resposta? 6.4. O servidor-dns responsável pela resposta é Oficial (Authoritative) ou não? 6.5. Qual o endereço-ip devolvido na resposta? Por quanto tempo é ele válido?, B.1.6. Experimentação de outras opções quando se invoca dig sobre o mesmo Domínio - re-inicie a captura de tráfego no wireshark [Capture Start]; - na janela-terminal onde invocou dig, invoque os seguintes comandos (em Intro_2.sh): 1. dig +short cm-obidos.pt. (para obter o endereço-ip); 2. dig +short +norecurse cm-obidos.pt. (idem, mas de modo não-recursivo); 3. dig +short MX cm-obidos.pt. (para obter um servidor-de-correio); 4. dig +short NS cm-obidos.pt. (para obter um servidor-de-nomes Oficial); 5. dig +nocmd +multiline +noall +answer any cm-obidos.pt. (para obter o conteúdo do ficheiro de configuracao do servidor-dns). 6. dig +trace cm-obidos.pt. (para saber a sucessão de servidores-dns interrogados); - no fim, clique Stop no Sumário da Captura Quais os types dos sucessivos pedidos-dns?,,,,, 7.2. Qual o modo de pesquisa requerido nos dois primeiros pedidos: iterativo ou recursivo? _, _ 7.3. Qual o tempo necessário para obter a resposta nesses dois pedidos-dns?, 7.4. Qual a preferência associada ao servidor de correio referido na terceira resposta? 7.5. Quantos Additional Records estão presentes na quarta resposta? Qual a sua finalidade?, 7.6. Quantos servidores de correio e de nomes estão presentes na quinta resposta?, 7.7. Quais os servidores sucessivamente interrogados para satisfazer o último comando?,,, B.1.7. Experimentação de outros alvos quando se invoca dig - re-inicie a captura de tráfego no wireshark [Capture Start]; - na janela-terminal onde invocou dig, invoque os seguintes comandos (em Intro_3.sh): - dig x +short (para saber o Nome associado a um endereço-ip); - dig +nocmd +noall +answer +additional NS. (para obter os servidores de raiz); - dig +nssearch ist.utl.pt. (para conhecer os registos-soa dos servidores de um Domínio); - dig +noall +answer MX utl.pt. (para obter os servidores de correio de um Domínio); - dig +short AAAA sigma03.ist.utl.pt. (para obter um endereço-ipv6); - dig ahahahah.pt. (para obter informacões de um Domínio inexistente); - no fim, clique Stop no Sumário da Captura No pedido-dns dig x, como é construído o argumento? 8.2. Na mensagem-dns devolvida após dig NS., a quantos servidores monta a resposta? 8.3. Aquando de dig +nssearch, quantos pedidos-dns foram enviados? Qual a sua finalidade?, 8.4. Em dig MX, qual o período de validade da informação prestada pelo servidor-dns? 8.5. Na resposta a dig AAAA, qual o servidor de que se referem dois endereços Ipv4 e IPv6? 8.6. A propósito de dig ahahahah.pt., qual o servidor responsável pela resposta havida? 8.7. Construa filtros para visualizar apenas os seguintes conjuntos de mensagens-dns: 8.7a. Pedidos feitos ao sistema-dns: 8.7b. Respostas oficiais (authoritatives) recebidas na sua máquina: 8.7c. Pedidos pela sua máquina feitos de modo não-recursivo:
6 8.7d. Respostas recebidas na sua máquina com registos adicionais: 8.7e. Pedidos de endereços-ip feitos pela sua máquina: B.2 Exemplificação do uso de wireshark com o firefox (Web Browser) Nota: firefox é um Programa de Navegação na Internet - para interrogar servidores-web e apresentar no ecran as Páginas acedidas. B.2.1 Lançamento do Programa de Aplicação (firefox): - lance uma outra janela-terminal na sua máquina; - lance o firefox e limpe a sua cache [Tools Clear Private Data]; - inicie a captura de tráfego no wireshark [Capture Options Start]; - seleccione, no firefox, web.ist.utl.pt/~ist10898/public/wireshark/emptyproof.htm (Nota: se a captura falhar, experimente web.ist.utl.pt/~ist10898/public/wireshark/emptyproof.htm?a) - aceda, no firefox, a web.ist.utl.pt/~ist10898/public/wireshark/teste.htm. - no fim, clique Stop no Sumário da Captura; B.2.2 Questões: Para ocultar tráfego irrelevante, use o filtro de observação http && ip.addr=={inet addr} Visualize o diagrama temporal [Statistics FlowGraph:DisplayedPackets] Quais os códigos-status devolvidos nas várias respostas do servidor?, Quais os servidores-web que foram acedidos? Para cada um deles: quais os ficheiros requeridos e quantos bytes foram transferidos?,,,,,, 9.3. Quantas conexões-tcp foram usadas? Quais os ficheiros transferidos em cada uma?,,,,,,,, 9.4 O acesso a ficheiros no mesmo servidor está sendo feito em série ou em paralelo? 9.5. Qual o porto usado pelo servidor? 9.6. Qual a versão do protocolo HTTP usado pelo browser? 9.7. Qual o comando HTTP usado para pedir os ficheiros.htm? 9.8. A máquina enviou mensagens-dns antes de efectuar pedidos http-get? Quais? Para ocultar tráfego irrelevante ao acesso a EmptyProof.htm, use o filtro http && ip.addr=={inet addr} && frame-number<={linenº}, em que LineNº é a linha do pertinente http-ok Repare na primeira linha na Summary Window; deverá referir um http-get; Quanto tempo passou, entre o seu envio e a recepção da réplica http-ok? [Statistics Summary] Qual é, aproximadamente, o débito da sessão entre cliente do servidor, no acesso a EmptyProof.htm, em Mbit/s? [Statistics Summary] Quais os primeiros 16 bytes de dados contidos no ficheiro EmptyProof.htm? Quais os segmentos por que se repartiu o ficheiro css? Quantos bytes transporta cada um? /, /, /, /, /, / Repare na Data View Window e diga: entre os bytes recebidos pelo firefox, existirão alguns que não tenham sido enviados pelo servidor? Quais, em caso afirmativo?, Para ocultar tráfego irrelevante ao acesso a Teste.htm, use o filtro http && ip.addr=={inet addr} && frame-number>{linenº}, em que LineNº é o número supracitado Em que instante é requerido o ficheiro Teste.htm? Quanto tempo decorre depois até o firefox deter todos os ficheiros requeridos a propósito do acesso a Teste.htm?, Qual o valor médio do atraso entre o envio dum http-get e a recepção de http-ok? Qual o tamanho total da página apresentada pelo browser?
7 Eventualmente, pode convir ocultar tráfego irrelevante a uma conexão-tcp; para tal, clique numa linha qualquer (que diga respeito a essa conexão) - como seja a última linha com a indicação HTTP 200 OK - e em Analyze FollowTCPStream Repare no ecran apresentado - e clique em Close. Verifique que, além das linhas concernindo HTTP, são também apresentadas as restantes linhas por que se desdobra a conexão-tcp que suportou a linha clicada Qual o filtro que ficou activo? Repare: se, por exemplo, a resposta a um http-get está repartida por vários segmento-tcp, eles são apresentados um após outro, à medida que foram capturados, com a indicação Linha n, TCP [TCP segment of a reassembled-pdu] N ésima linha: HTTP HTTP/ 200 OK Clicando em cada uma daquelas linhas, e em +TCP, aparece a informação [Reassembled PDU in frame: N] Clicando na N ésima linha, aparece a informação [Reassembled TCP segments (): Números dos segmentos que perfazem a resposta] e, imediatamente a seguir, duas linhas, Hypertext Trasfer Protocol e alguma outra, que acumulam o conteúdo do campo dados de todos aqueles segmentos Construa filtros para visualizar apenas os seguintes conjuntos de linhas: 12.1a. Segmentos que foram enviados pela sua máquina: 12.1b. Segmentos que foram recebidos pela sua máquina: 12.1c. Segmentos que foram recebidos com dados: 12.1d. Segmentos-TCP que não transportam dados (só transportam cabeçalho): Qual a finalidade desses Segmentos-TCP que não transportam dados? C: Exemplificação do uso de wireshark com outras Aplicações C. Outras experiências: Varie os Programas de Aplicação a invocar e os filtros de observação, por ex.: ftp/sftp, , telnet ou ssh/putty D. Análise dos ficheiros trace: Para analisar os bytes capturados e salvaguardados em ficheiros trace.cap (é o que se fará nas sessões seguintes ), clique em File Open; - seleccione um ficheiro, como seja um dos salvaguardados na execução de dig ou firefox - no final, clique em Enter; Sites sobre o wireshark: - user-guide: - man pages: - FAQs: - download: