Forum Programmation.c capture wireshark sous archi 64 bits et type "long"

Posté par .
Tags : aucun
1
2
déc.
2008
Bonjour tout le monde,

J'ai un problème: je dois lire des captures de paquets UDP enregistrés par wireshark ou tshark. Entre chaque paquets capturé est inséré une petite structure qui contient un long. Et ce long vaut 32 bits sur une archi 32 bits, et 64 bits sur une archi 64 bits. Jusque la tout va bien.

Le problème est que je dois lire un tel fichier, et que je ne sais pas a priori si les traces viennent d'une archi 32 ou 64 bits, et donc la taille du long d'origine. Comment m'en sortir ?

Si quelqu'un a une idée...
  • # Hum

    Posté par (page perso) . Évalué à 2.

    Ça m'étonne, mais bon.
    Le plus simple, ça peut être de tester les deux possibilités, en commençant par le 32bits.. C'est plus répandu.

    Envoyé depuis mon lapin.

    • [^] # Re: Hum

      Posté par (page perso) . Évalué à 2.

      Surtout, le 32 bits est plus court. M'enfin, analyser des paquets de bits...
      Sans plus de précisions sur le long (et surtout sans relire la structure d'un paquet UDP) il me semble que théoriquement il est possible qu'ici un fichier 32 bits soit un 64 bits valide ; improbable mais possible.
      Du coup il faudrait une routine de vérification du format du fichier qui analyse pas mal d'éléments, non ?
      • [^] # Re: Hum

        Posté par . Évalué à 1.

        En fait c'est mon application qui enregistre les paquets UDP. Je la testais en 32 bits et tout marchait.

        Ca enregistre ainsi:
        une structure PCAP
        un paquet
        une structure PCAP
        un autre paquet
        ....


        La structure PCAP qui contient des timestamp (sous forme de secondes/microseconde) depuis le 1er Janvier 1970. Et les fameux timestamps sont codés sur des long.

        Un jour j'ai voulu lire les fichiers d'enregistrement des paquets, une fois l'application mise sur une machine 64 bits, et je voyait bien que les long etaient sur 64 bits. Le probleme est que je fait l'analyse sur une machine 32 bits, et que pour elle un long est sur 32 octets.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.