Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Réseau/Web
Réseau/Web Forum d'entraide sur Python et le réseau/Web
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 30/08/2012, 21h24   #1
Luke spywoker
Membre éclairé
 
Avatar de Luke spywoker
 
Homme
Etudiant informatique autodidacte
Inscription : juin 2010
Messages : 599
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Etudiant informatique autodidacte

Informations forums :
Inscription : juin 2010
Messages : 599
Points : 372
Points : 372
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
Luke spywoker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2012, 00h08   #2
fred1599
Membre Expert
 
Avatar de fred1599
 
Homme Fred
Enseignant
Inscription : juillet 2006
Messages : 1 329
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 329
Points : 1 829
Points : 1 829
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)
fred1599 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2012, 09h20   #3
Luke spywoker
Membre éclairé
 
Avatar de Luke spywoker
 
Homme
Etudiant informatique autodidacte
Inscription : juin 2010
Messages : 599
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Etudiant informatique autodidacte

Informations forums :
Inscription : juin 2010
Messages : 599
Points : 372
Points : 372
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
Luke spywoker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2012, 10h47   #4
fred1599
Membre Expert
 
Avatar de fred1599
 
Homme Fred
Enseignant
Inscription : juillet 2006
Messages : 1 329
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 329
Points : 1 829
Points : 1 829
Citation:
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)
fred1599 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 02/09/2012, 17h13   #5
Luke spywoker
Membre éclairé
 
Avatar de Luke spywoker
 
Homme
Etudiant informatique autodidacte
Inscription : juin 2010
Messages : 599
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Etudiant informatique autodidacte

Informations forums :
Inscription : juin 2010
Messages : 599
Points : 372
Points : 372
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
Luke spywoker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2012, 18h00   #6
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 739
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 739
Points : 4 581
Points : 4 581
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
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h13.


 
 
 
 
Partenaires

Hébergement Web