Forum Linux.redhat Script d'extraction de données d'un .pcap

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
18
oct.
2013

Bonjour Messieurs, Mesdames.

Je vous expose mon problème, je suis un débutant en programmation.
J'aimerai créer un script qui récupère grâce à TCPDUMP mon trafic DNS en .pcap et qui m'en extrait dans un .txt les différentes requêtes qui ont eu lieu avec leur nombre d’occurrence dans l'ordre décroissant tous les soirs.
exemple :

50 www.facebook.com
10 www.linuxfr.org

J'aimerai aussi si possible récupérer un peu de trafic (comme 250 000req), chaque heure 8h-9h-10h….22h, chaque jour 365/365j et en fin de journée avoir mon fichier .txt avec les informations souhaitées comme au dessus.

Si vous avez des questions n'hésitez pas,

Merci d'avance pour votre aide qui me sera précieuse.

Cordialement,
Bobmoutarde

  • # proxy + stats

    Posté par  . Évalué à 2.

    regarde du coté des proxy, une fois installé de maniere transparente, il te sera possible de sortir des jolis graphes à partir de ses logs.

    à une epoque j'avais installé un outil ntop sur la passerelle de l'entreprise ca sortait des pages webs toutes pretes qui disaient qui avait consommé quoi, dans quel sens, etc

    je vois aussi que mon parefeu me propose le plugin darkstats qui semble faire un truc similaire

    • [^] # Re: proxy + stats

      Posté par  . Évalué à 0.

      D'accord mais en faite je souhaite juste avoir les noms des sites requêtés pour pouvoir faire une indexation plus précise pour un moteur de recherche.
      Donc juste sortir un .txt avec dans la journée tous les sites qui ont été requêtés par mon serveur DNS avec leur nombre de fois où ils ont été demandés.
      Logiquement un site comme facebook.com est plus demandé qu'un site comme toto.fr

      Le problème c'est que j'ai pas forcément la main sur toute la config du linux, on est divisé en plusieurs équipes et on a une certaine zone d'action qui pour moi est le DNS.
      Si j'installe un proxy ou autre, cela pourrai avoir un impact pour les autres services alors qu'un TCPDUMP est inoffensif (à part un peu de consommation CPU/mémoire).
      C'est pour cela que j'étais parti sur le principe de tcpdump de temps en temps dans la journée une partie du trafic à différente heure pour avoir un bon échantillon des sites possibles visités par les clients et d'en extraire simplement les noms de domaines.

      Je ne pense pas qu'un script soit très compliqué mais je n'ai pas vraiment de compétence dans ce domaine.

      Je pensais planifier dans crontab tous les jours toutes les heures le script qui lance un TCPDUMP sur le port 53, qui enregistre les .pcap dans un dossier nommé le jour puis en fin de journée par exemple à 22h récupérer les 22 .pcap de 0h00 à 22h00 et d'extraire comme dit ci-dessus dans un .txt (requetesDNS_date.txt) mes réquêtes. Puis purger le répertoire de la journée pour enchainer et ça 365/365j.

      • [^] # Re: proxy + stats

        Posté par  . Évalué à 4.

        et juste utiliser le log de ton logiciel de dns ? (bind, dnsmasq) ?

        sachant que ton raisonnement est un peu faux dans le sens ou ton ordi va mettre en cache la requete dns, et tant que le navigateur est ouvert, ne devrait pas redemander de requete DNS

        alors que le proxy te fera bien un decompte de ce qui est consommé en bande passante vers tel ou tel domaine.

        • [^] # Re: proxy + stats

          Posté par  . Évalué à 1.

          Bind ne me donne pas les noms des sites qui sont consultés c'est ça qui m'intéresse par contre le reste oui mais c'est déjà opérationnel.
          Pour ce qui est du cache, ça ne change rien puisque j'analyse tout le trafic entrant, peu importe si les gens laissent leur navigateur ouvert ou non

          Je ne cherche pas la bande passante ou quoi que ce soit.
          Ce que je voudrais c'est la liste des sites qui sont consultés par les gens qui requête sur mon DNS (de façon anonyme bien sûr) pour ensuite pour indexer mon moteur de recherche.

          Quand tu taperas "fac" dedans, la première suggestion sera facebook puisqu'il sera certainement dans le top des requêtes du DNS. Comme le système google en gros.

          Pour ce qui est du proxy, j'ai déjà regardé mais comme j'ai dis plus haut. Je n'ai pas forcément tous les accès partout sur les machines. Je sais que je peux tcpdump et scripter du shell. Je pense qu'avec ça je devrais arriver à faire quelque chose.

          As tu saisis ou je suis pas assez clair :s ?

          En tout cas merci de t'intéresser à mon cas :)

          • [^] # Re: proxy + stats

            Posté par  . Évalué à 2. Dernière modification le 18 octobre 2013 à 16:43.

            Ce que je voudrais c'est la liste des sites qui sont consultés par les gens qui requête sur mon DNS

            ca il doit y en avoir un trace dans le log de ton DNS,
            sinon il faut juste le rendre plus verbeux pour qu'il enregistre plus de chose.

            etre obligé de sortir tcpdump pour savoir ce qui est demandé à un DNS me semble certes tres geek mais un peu overkill

            sauf peut-etre si ce ne sont pas les requetes DNS que tu veux avoir mais les sites consultés avec leur nom DNS

            • [^] # Re: proxy + stats

              Posté par  . Évalué à 1.

              Voilà c'est exactement ça ! Je crois que j'ai eu du mal à m'exprimer mais on y est. :D
              J'ai fouillé un peu partout avant d'en arriver à ce point là parce que crois moi la programmation n'est pas mon fort… Mais rien n'y fait je pense que c'est une des seules solutions que de passer par le tcpdump pour récupérer le bouzin !

              • [^] # Re: proxy + stats

                Posté par  . Évalué à 2.

                Pour quelqu'un qui n'y connait rien en programmation se lancer dans de la capture tcpdump, pour ensuite en reconstruire les requetes et en tirer des données sur des journées entieres, c'est quand meme contradictoire car tu es en train de refaire ce que font deja certains softs.

                donc tu veux connaitre les sites les plus visités, et en faire des statistiques
                c'est exactement ce que fait ntop ou darkstats.

                je vais donc parler d'un logiciel que je connais :
                tu installes ntop sur ta passerelle (ou ton proxy)
                tu te loggues sur l'interface

                et ca te dit quels sont les sites qui consomment le plus de bande passante, le nombre de demandes.
                à l'inverse tu sais aussi que c'est le poste de M.Dupont qui a consommé le plus de bande passante ce mois ci.

  • # pom

    Posté par  (site web personnel) . Évalué à 2.

    http://packet-o-matic.org/
    http://wiki.packet-o-matic.org/pom-ng/getting_started

    Sinon tu peux aussi t'amuser avec tshark|awk ou quoi.

    pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

    • [^] # Re: pom

      Posté par  . Évalué à 1.

      Merci mais pour récupérer le trafic DNS, j'utilise déjà tcpdump.

      J'aimerais juste savoir comment je peux à partir des pcap récupérer sous forme de .txt les reqûetes avec leur nombre d'occurence comme je l'ai indiqué au début.

      Merci :)

      • [^] # Re: pom

        Posté par  (site web personnel) . Évalué à 4. Dernière modification le 14 novembre 2013 à 10:28.

        $ tshark -r /tmp/dns.pcap "dns"|sed '/Standard query 0x/!d;s%^.*Standard query 0x[0-9a-f ]*%%'|sort|uniq -c
              1 AAAA framasoft.org
              1 AAAA lea-linux.org
              3 AAAA linuxfr.org
              1 A framasoft.org
              1 A lea-linux.org
              4 A linuxfr.org
              1 MX framasoft.org
              1 MX lea-linux.org
              4 MX linuxfr.org

        Plus sobre mais moins explicite pour le quidam lambda :

        $ tshark -r /tmp/dns.pcap "dns and not dns.flags.response==1" -Tfields -e dns.qry.type -e dns.qry.name|sort|uniq -c
              1 0x0001  framasoft.org
              1 0x0001  lea-linux.org
              4 0x0001  linuxfr.org
              1 0x000f  framasoft.org
              1 0x000f  lea-linux.org
              4 0x000f  linuxfr.org
              1 0x001c  framasoft.org
              1 0x001c  lea-linux.org
              3 0x001c  linuxfr.org
        • [^] # Re: pom

          Posté par  . Évalué à 1.

          Merciii Benoit ! C'est exactement ce que je cherchais :)

          Tu m'as été d'une grande aide. Encore merci !

          • [^] # Re: pom

            Posté par  . Évalué à 2.

            attention, comme dit plus haut, avec cela tu ne remonte que les requetes DNS, pas le trafic vers les sites webs.

            si je lances ma session à 9h, puis mon navigateur que je requete linuxfr.org
            et que je laisses mon navigateur ou ma session ouverte, je ne suis pas sur que ma machine refasse une requete DNS plus tard dans la journée.

            la faute aux divers cache DNS qui peuvent exister :
            - dnsmasq en local sur ta machine
            - cache du navigateur

            • [^] # Re: pom

              Posté par  . Évalué à 0.

              Oui je veux les requêtes DNS, sa commande me convient très bien. Merci à vous deux pour votre aide :)

  • # filtre

    Posté par  . Évalué à 0. Dernière modification le 14 novembre 2013 à 10:23.

    Bonjour,

    Voilà Benoit m'avait donné cette commande, qui marche très bien

    tshark -r /tmp/dns.pcap "dns"|sed '/Standard query 0x/!d;s%^.*Standard query 0x[0-9a-f ]*%%'|sort|uniq -c

    Mais j'aurais voulu savoir si on peut m'expliquer comment n'extraire que les requêtes A et AAAA de mon pcap. Je pense qu'il y a un paramètre dans cette commande mais je ne vois pas trop, j'ai essayé à "tâtons" mais rien de bien concluant..

    Merci d'avance
    Cordialement,

    • [^] # Re: filtre

      Posté par  (site web personnel) . Évalué à 3.

      Dans ce cas là, la seconde commande que j'ai fournie est plus adaptée (mais il faut la comprendre et l'adapter à ta demande particulière). Actuellement elle demande à tshark de lire un fichier pcap en ne s'intéressant qu'à ce qui concerne le DNS sauf les réponses DNS (donc les requêtes DNS) et d'extraire certains champs de ces réponses, comme le type de requête (justement ce que tu veux) et ce qui a été demandé. Ensuite on trie et on compte les occurrences avec unicité.

      (nb: j'ai modifié ton commentaire pour la coloration syntaxique)

      • [^] # Re: filtre

        Posté par  . Évalué à 0.

        tshark -r /tmp/dns.pcap "dns"|sed '/Standard query 0x/!d;s%^.*Standard query 0x[0-9a-f ]*%%'|sort|uniq -c

        Donc d'après ce que j'ai compris de ton message je dois trouver la valeur qui correspond aux requêtes A et AAAA et la remplacer à la place de "0x[0-9a-f ]".
        Est ce que c'est ça ? Suis-je proche ? où complétement à côté ?

        Mercii

        • [^] # Re: filtre

          Posté par  (site web personnel) . Évalué à 4.

          tshark -r /tmp/dns.pcap "dns"|sed '/Standard query 0x/!d;s%^.*Standard query 0x[0-9a-f ]*%%'|sort|uniq -c
                4 AAAA framasoft.org
                2 AAAA lea-linux.org
                8 AAAA linuxfr.org
                5 A framasoft.org
                2 A jenexistepasmaisjesuislibre.org
                2 A lea-linux.org
                8 A linuxfr.org
                4 MX framasoft.org
                2 MX lea-linux.org
                8 MX linuxfr.org
          
          $ tshark -r /tmp/dns.pcap "dns"|sed '/Standard query 0x[0-9a-f]* A/!d;s%^.*Standard query 0x[0-9a-f ]*%%'|sort|uniq -c
                4 AAAA framasoft.org
                2 AAAA lea-linux.org
                8 AAAA linuxfr.org
                5 A framasoft.org
                2 A jenexistepasmaisjesuislibre.org
                2 A lea-linux.org
                8 A linuxfr.org
          • Explication de sed '/motif/!d' : on ne garde que les lignes qui contiennent le motif (donc ça fait l'équivalent d'un grep).
          • Explication de sed 's%motif%remplacement%' : si on trouve un motif donné, on le remplace (dans le cas précédent, on le remplace par rien).
          • On note que j'ai un peu triché vu que je garde tout ce qui commence par A sans autre vérification. Ça couvre le A et le AAAA mais potentiellement aussi d'autres choses qui pourraient arriver les nuits de pleine lune cf http://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml
          • [^] # Re: filtre

            Posté par  . Évalué à 0.

            D'accord, je comprends clairement mieux maintenant.. Un grand merci à toi !

          • [^] # Re: filtre

            Posté par  . Évalué à 0.

            Par contre je n'arrive pas à renvoyer le résultat de mon analyse de .pcap dans un fichier txt, ce dernier est vide. Une idée du pourquoi ?

            • [^] # Re: filtre

              Posté par  (site web personnel) . Évalué à 3.

              Quelle est la commande utilisée ?

              • [^] # Re: filtre

                Posté par  . Évalué à 0. Dernière modification le 14 novembre 2013 à 14:26.

                Voilà ce que j'utilise,

                tshark -r /tmp/dns.pcap "dns"|sed '/Standard query 0x[0-9a-f]* A/!d;s%^.*Standard query 0x[0-9a-f ]*%%'|sort|uniq -c > /tmp/requete/final.txt

                Mon txt est bien créé mais bel et bien vide malheureusement..

              • [^] # Re: filtre

                Posté par  . Évalué à 0.

                Hello,

                Aucune idée sur le fait que cette commande ne m'enregistre rien dans mon txt

                tshark -r /tmp/dns.pcap "dns"|sed '/Standard query 0x[0-9a-f]* A/!d;s%^.*Standard query 0x[0-9a-f ]*%%'|sort|uniq -c > /tmp/requete/final.txt
              • [^] # Re: filtre

                Posté par  . Évalué à 0.

                Hello,

                Je me permet de te relancer, je creuse je creuse mais je ne trouve pas pourquoi mon txt et vide. Je me dis que si je creuse encore je vais trouver du pétrole :/

                Merci de ton aide
                Cordialement,

              • [^] # Re: filtre

                Posté par  . Évalué à 1.

                Me revoilà :

                Je pense avoir trouver

                tshark -r /tmp/dns.pcap "dns"|sed '/Standard\squery\s0x[a-f0-9]*\s*AA*/!d;s/^.*Standard\squery\s0x[a-f0-9]*\s*//'|sort|uniq -c > /tmp/requete/final.txt

                Ca me renvoit ce que je veux :)

                Merci pour ton aide :D

Suivre le flux des commentaires

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