Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile

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 smile.

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 sad
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 sad

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? tongue

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')  tongue
Merci beaucoup, tu m'enlèves une GROSSE épine du pied smile

Dernière modification par Alwik (Le 31/05/2010, à 11:12)

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 hmm
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