Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Membre éclairé Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    juin 2010
    Messages
    686
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : juin 2010
    Messages : 686
    Points : 396
    Points
    396

    Par défaut [scapy] Ecrire dans un fichiers pcap et buffer.

    Salut les Webpythons,
    après mes déboirs de débutant en la matière avec le module scapy j'arrive enfin a quelque: j'obtiens le résultat visée mais j'ai un petit soucis de persistance des données avec la fonction wrpcap de scapy:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    def traceroute_tcp(ip,port=80) :
      ans,unans=sr(IP(dst=adr,ttl=(1,15))/TCP(dport=port,flags="S"))
      for v in ans :
        wrpcap('fichier.pcap', v)
     
    def read_pcap(fichier) :
      a=rdpcap(fichier)
      print a
    Le problème étant quand j'exécute le traceroute, les réponses que je reçoit devrai être écrit dans un fichier pcap...
    Hors à l'affichage avec le directive print de la fonction read_pcap() je me retrouve avec 1 seul paquet que j'ai identifier comme étant la réponses final au SYN/ACK traceroute: les paquets ICMP 'time-exceeded' ne sont pas écrits dans le fichier pourtant le traceroute fonctionne bien et si je fait un summary() on voit bien que je reçoit tous les paquets...
    Serai ce un problème de buffer comme j'écrit dans le fichier pcap en boucle ca risque fort d'être le cas: je ne peut résoudre le problème car: restez bien assis, je n'arrive pas a avoir le buffer d'un fichier avec python, sinon je pourrait donner celui-ci a la méthode wrpcap et le problème serai peut-être régler.

    Merci pour vos réponses éclairées et bon python a vous.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Blog: http://3dcyberspace.unblog.fr/
    Site: Sanctuaire cybernétique
    Site: 3dreaming-imaging.net

  2. #2
    Membre Expert
    Avatar de fred1599
    Homme Profil pro Fred
    Enseignant
    Inscrit en
    juillet 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Nom : Homme Fred
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 781
    Points : 2 412
    Points
    2 412

    Par défaut

    wrpcap n'accepte pas une liste?

    Il me semble que tu pourrais faire

    Code :
    wrpcap('fichier.pcap', ans)
    Bien sûr tu vires ta boucle for...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre éclairé Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    juin 2010
    Messages
    686
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : juin 2010
    Messages : 686
    Points : 396
    Points
    396

    Par défaut

    Oui certes wrpcap() accepte une liste mais ce ne fonctionne pas comme indiquer: une liste de paquet est insuffisant car si on exécute wrpcap('fichier.pcap',ans) on obtient le traceback suivant indiquant qu'il manque le timestamp je crois:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Traceback (most recent call last):
      File "tcp_syn_traceroute.py", line 29, in <module>
        tcp_syn_traceroute(adr)
      File "tcp_syn_traceroute.py", line 19, in tcp_syn_traceroute
        wrpcap('test.pcap_03',ans) #,options=[('Timestamp',(0,0))]
      File "/usr/lib/python2.7/dist-packages/scapy/utils.py", line 470, in wrpcap
        PcapWriter(filename, *args, **kargs).write(pkt)
      File "/usr/lib/python2.7/dist-packages/scapy/utils.py", line 653, in write
        self._write_packet(p)
      File "/usr/lib/python2.7/dist-packages/scapy/utils.py", line 692, in _write_packet
        sec = int(packet.time)
    AttributeError: 'tuple' object has no attribute 'time'
    Et dans la doc il est mentionner qu'on peut mettre l'option timestamp a la valeur:
    Code :
    options=[('Timestamp',(0,0))]
    mais j'ai toujours le même traceback.
    Je pense qu'il est possible, d'après un traceback que j'ai lu d'indiquer a la fonction wrpcap dans quel mode on désire écrire dans le fichier: 'wb'|'ab' mais il faut donner un objet de type buffer ce que je n'arrive pas a obtenir avec les méthodes d'une instance de <type 'file'>. Si quelqu'un sait comment obtenir l'objet buffer d'un objet de <type 'file'> il serai vraiment sympa de poster.
    Merci pour vos réponses
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Blog: http://3dcyberspace.unblog.fr/
    Site: Sanctuaire cybernétique
    Site: 3dreaming-imaging.net

  4. #4
    Membre Expert
    Avatar de fred1599
    Homme Profil pro Fred
    Enseignant
    Inscrit en
    juillet 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Nom : Homme Fred
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2006
    Messages : 1 781
    Points : 2 412
    Points
    2 412

    Par défaut

    Je pense qu'il est possible, d'après un traceback que j'ai lu d'indiquer a la fonction wrpcap dans quel mode on désire écrire dans le fichier: 'wb'|'ab' mais il faut donner un objet de type buffer
    Ah, que cela ne tienne,

    Code :
    buffer(open('fichier.pcap', 'wb'))
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Membre éclairé Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    juin 2010
    Messages
    686
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : juin 2010
    Messages : 686
    Points : 396
    Points
    396

    Par défaut

    Je ne sais pas d'ou tu sort cette primitive buffer() mais elle n'était pas consigner dans mon manuel d'apprentissage de pythonnerie que je pensai complet peut-être une nouveautée de python 2.7 mais la commande ne marche pas:
    Code :
    1
    2
    3
    4
    5
     
    buffer(open('fichier.pcap', 'wb'))
    Traceback (most recent call last):
      File "<input>", line 1, in <module>
    TypeError: buffer object expected
    ...???
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Blog: http://3dcyberspace.unblog.fr/
    Site: Sanctuaire cybernétique
    Site: 3dreaming-imaging.net

  6. #6
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 238
    Points : 7 251
    Points
    7 251

    Par défaut

    Citation Envoyé par Luke spywoker Voir le message
    Je ne sais pas d'ou tu sort cette primitive buffer() mais elle n'était pas consigner dans mon manuel d'apprentissage de pythonnerie que je pensai complet peut-être une nouveautée de python 2.7 mais la commande ne marche pas:
    buffer est une fonction introduite en 2.7 et remplacée par memoryview en 3.x.
    Impossible de l'appliquer à l'objet "file" retourné par open.
    Vous pourriez l'appliquer au contenu du fichier lu (buffer(open(...).read()) mais je ne vois pas trop comment cela résoudra la question que vous posiez initialement.
    - W
    Architectures Post-Modernes

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •