Wireshark - como posso observar pouca diferença endian big endian em ordem de bytes usando o Wireshark?

6

Eu escrevi uma aplicação simples que se comunica usando sockets UDP (em C). A aplicação é simples: os clientes enviam números para o servidor e o servidor calcula a soma deles.

Agora, eu sei como posso capturar os pacotes trocados pelo cliente e servidor, mas gostaria de saber como posso, usando o Wireshark, observar a diferença entre a ordem de byte little endian e big endian para meus pacotes?

    
por mirx 08.03.2017 / 11:16

3 respostas

4

Em protocolos Wireshark não reconhecidos, você verá apenas pacotes TCP ou UDP com um campo de carga útil "não analisado". se o protocolo "for" reconhecido pelo Wireshark (BOOTP, DHCP, DNS, SMB, HTML, etc), você verá que o Wireshark "modela" a área de carga TCP / UDP exibindo os campos de protocolo de nível superior reconhecidos.

O Wireshark incluiu muitos dissectors para protocolos bem conhecidos e você pode crie o seu próprio se você quiser exibir sua carga útil específica do protocolo de forma formatada; Veja aqui. link

no seu caso, o seu dissecador pode lidar com o "endianness" de um campo específico que lida com os valores permitidos.

Por favor, considere uma seqüência de byte é apenas isso, "endianness" por outro lado é a primeira de várias camadas aninhadas de representação de informação numérica (como tamanho de byte, assinado / sem sinal, inteiro / flutuante, etc.) convertendo um determinado byte sequência em um número.

    
por 12.03.2017 / 21:07
2

Não há como identificar se um número foi enviado como grande ou pequeno endian, a menos que haja algumas restrições muito estritas sobre os números, de tal forma que eles só podem ser entendidos de uma maneira, significando ser muito grande ou muito pouco se entendido de forma errada.

A maneira padrão de fazer esse tipo de coisa é anexar um cabeçalho ao seu pacote que fornece informações sobre seu conteúdo, como sua carga útil grande ou pequeno endian. Ou você pode ter os pacotes sempre enviados ou big ou little endian, com emissor e receptor trocando dinamicamente bytes se necessário.

Lembre-se de que, como diz a Wikipédia sobre o Protocolo de datagrama do usuário :

It has no handshaking dialogues, and thus exposes the user's program to any unreliability of the underlying network: there is no guarantee of delivery, ordering, or duplicate protection.

O UDP é usado principalmente quando os dados são transmitidos, mas a entrega de todos os pacotes não é importante. Por exemplo, uma câmera de segurança enviando vídeo, quando é aceitável que alguns quadros sejam perdidos ao chegar ou corrompido ou fora de ordem.

Um servidor que faz a soma dos números não é um bom candidato para UDP, porque se os pacotes forem perdidos ou corrompidos, a soma estará errada. TCP que garante que a entrega correta seja a preferida aqui. Construindo medidas à prova de falhas em seu fluxo UDP, você logo se encontrará reinventando o TCP.

A solução mais simples para seguir as mensagens recebidas é ter o seu servidor Opcionalmente, imprima informações no console. Isso pode ser controlado por um parâmetro especificado quando invocado, ou por uma diretiva de pré-processador de depuração (#ifdef para C / C ++).

    
por 10.03.2017 / 21:36
0

Observe os valores na seção que descreve a divisão para você e compare com o hex bruto. Olhe para um campo que é maior do que um byte e olhe e veja se em hexadecimal bruto está em little ou big endian. Ou seja val (16) na quebra e no hexdump (pois é um campo de 2 bytes) mostra: 00 10 para big endian e mostraria 10 00 para little endian. Espero que ajude.

    
por 26.03.2018 / 23:26