Bonjour,
Je travaille actuellement sur un projet utilisant scapy, pour ce projet je dois sniffer un réseau et sortie uniquement les adresses IP sources et destinations, les ports sources et destinations ainsi que le protocole.
J'ai donc fait un petit script :
import sys
from scapy.all import *
pkts = sniff(prn=lambda x:x.sprintf("{IP:%IP.src%,%IP.sport%,%IP.dst%,%IP.dport%,%IP.proto%,%IP.time%}"))
Qui me renvoie bien les données souhaité, mais je souhaiterai que la sortie standard soit envoyé vers un fichier (il y a bien une méthode sous scapy pour exporter mais elle génère un fichier pcap ce qui ne correspond pas à mon cahier des charges)
Actuellement j'exécute mon script "à la main" et j'utilise le ">" pour rediriger vers un fichier, mais je souhaiterai automatiser ce script (j'en est fait un service(daemon)) mais mon problème est la, comment faire pour rediriger la sortie standard ? Est-il possible d'utiliser le chevron ?
J'ai vu qu'il y avait la fonction std.output mais j'avoue que je ne sais pas vraiment comment l'utiliser
Si quelqu'un à une idée je suis preneur
# Bonjour
Posté par Marotte ⛧ . Évalué à 4. Dernière modification le 12 mai 2016 à 17:03.
En Python3 tu peux spécifier un fichier à la fonction print():
est équivalent à un simple
print('Hello')
, ça sort sur la sortie standard. Tu as aussisys.stderr
pour la sortie d’erreur standard. Il faut bien sur avoir fait unimport sys
comme tu l’as fait dans ton exemple pour que ça fonctionne.Tu peux indiquer n’importe quel descripteur de fichier. Pour en créer un en Python :
https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files
pour écrire dans le fichier 'nom_de_fichier', tout simplement.
On pourrait aussi écrire :
f.write('Hello')
au lieu d’utiliser la fonction print()…# réponse
Posté par darkj . Évalué à 0.
Merci de ta réponse,
J'ai essayer plusieurs chose mais sans résultat, je suppose que je m'y prend mal, des conseils ?
import sys
from scapy.all import *
r = open('test', 'w')
print(' pkts = sniff(prn=lambda x:x.sprintf("{IP:%IP.src%,%IP.sport%,%IP.dst%,%IP.dport%,%IP.proto%,%IP.time%}"))', file=f)
r.close()
[^] # Re: réponse
Posté par syntaxerror . Évalué à 2.
il suffit d'écrire dans le fichier, ou je n'ai pas pigé la question?
[^] # Re: réponse
Posté par Marotte ⛧ . Évalué à 2.
Tu as nommé ton descripteur de fichier 'r' :
c’est donc cet identifiant qu’il faut utiliser pour ton print :
Par contre je ne sais pas trop ce que tu essayes d’écrire, je ne connais pas scapy mais je penses qu’il y a un truc que tu fais mal…
Qu’est censé retourner la fonction sniff ?
# réponse [résolu]
Posté par darkj . Évalué à 1.
La fonction sniff de scapy me permet de récuperer les flux qui passent sur mon interface réseau (ici elle ne me retourne que certains élément, ip source, port source, ip destination, port destination, protocole et l'heure a laquelle il est passé)
J'ai résolu mon problème (je le post si jamais cela peut servir à quelqu'un) :
import sys
from scapy.all import *
old_stdout = sys.stdout
sys.stdout = open("/chemindufichier",'w')
pkts = sniff(prn=lambda x:x.sprintf("{IP:%IP.src%,%IP.sport%,%IP.dst%,%IP.dport%,%IP.proto%,%IP.time%}"))
Avec ceci je récupère bien ma sortie standard (au format csv)
Merci pour l'aide !
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.