Pages : 1
#1 Le 27/05/2010, à 16:25
- Alwik
Modifier une trame réseau
Bonjour,
Alors je développe une application en python qui doit simuler un trafic réseau. J'injecte donc des .cap avec scapy.
Mon problème étant que je voudrais modifier certains bits dans le champ data. Existe-il une solution, une méthode?
Je suis preneur de toute info, piste etc... Merci
Hors ligne
#2 Le 27/05/2010, à 18:38
- tshirtman
Re : Modifier une trame réseau
hum, ben tes données, que tu envoient, c'est une structure de donnée, si tu fais help(variable) tu devrais avoir les opérations que tu peux faire dessus, c'est probablement juste des listes de champs textes ou binaires, au pire dict(variable) devrait t'en dire beaucoup plus sur comment ça marche dedans .
Hors ligne
#3 Le 28/05/2010, à 10:01
- Alwik
Re : Modifier une trame réseau
Utiliser impacket est une bonne idée ou pas?
Je n'arrive pas à avoir de doc, le site semble être down
http://oss.coresecurity.com/projects/impacket.html
Un dict() sur ma variable me renvois la doc de la class ether, et idem j'ai du mal à trouver de la doc
Dernière modification par Alwik (Le 28/05/2010, à 10:02)
Hors ligne
#4 Le 28/05/2010, à 10:33
- tshirtman
Re : Modifier une trame réseau
Si tu utilise rdpcap pour lire ton fichier .cap, la doc dit que ça renvoit une liste de "packet", donc help(packet.Packet)
Tu y trouveras les métodes "getfieldval" et "setfieldval" entre autres, qui font probablement ce que tu veux, sinon n'hésite pas a jeter un oeil aux autres méthodes.
Hors ligne
#5 Le 31/05/2010, à 10:10
- Alwik
Re : Modifier une trame réseau
Et si je veux accéder aux différents octets de la trame? La méthode getfieldval me renvois qqch de vide, alors que je sais qu'il y a un octets qui est est différent de 0 et je voudrais pouvoir le changer.
Dernière modification par Alwik (Le 31/05/2010, à 10:42)
Hors ligne
#6 Le 31/05/2010, à 10:47
- tshirtman
Re : Modifier une trame réseau
j'ai pas de .cap sous la main pour tester, mais si tu utilise encode('hex') sur un champ texte, tu le récupère en hexa (enfin en texte qui est de l'hexa) que tu peux transformer en binaire
# conversion en chaine représentant un binaire
value = bin(int(texte.encode('hex'),16))
# tu remplace le bit que tu veux, et tu retransforme
value[3] = '0' # ou '1'
# et tu retransforme
hex(int(value,2))[2:].decode('hex')
non?
edit: hum si tu récupère un champ vide c'est bizarre… c'est peut être juste que c'est pas du texte affichable?
Dernière modification par tshirtman (Le 31/05/2010, à 10:49)
Hors ligne
#7 Le 31/05/2010, à 10:55
- Alwik
Re : Modifier une trame réseau
ah merci bien pour ta réactivité!
Je vais essayé de suite, par contre ton "bin" correspond a quoi?
edit:j'ai essayé sans le bin (vu que je sais pas a quoi il correspond), mais ce que je voulais c'est juste texte.encore('hex')
Merci beaucoup, tu m'enlèves une GROSSE épine du pied
Dernière modification par Alwik (Le 31/05/2010, à 11:12)
Hors ligne
#8 Le 31/05/2010, à 11:36
- tshirtman
Re : Modifier une trame réseau
help(bin) mais si l'hexa te vas, tant mieux
Hors ligne
#9 Le 31/05/2010, à 17:02
- Alwik
Re : Modifier une trame réseau
yep l'hexa me va mieux parce que du coup je vois ce que je veux modifier, par contre ca à l'air de bloquer pour le changement de valeur.j'ai un peu de mal avec le python et son typage implicite
Du coup j'ai essayé
value[15]=8
value.remove(18)
value.insert(18,3)
Et ni l'une ni l'autre ne fonctionne, si je ne dis pas de bêtise, il s'agit d'un string, je n'ai pas réussi a trouver de méthode permettant de changer un caractère à une position donnée, une idée? (je demande vu que tu réponds avant que je n'ai le temps de trouver)
Hors ligne
Pages : 1