Raw socket [Résolu]

Messages postés
4
Date d'inscription
dimanche 22 août 2004
Dernière intervention
29 septembre 2006
- 20 août 2006 à 15:59 - Dernière réponse :
Messages postés
4
Date d'inscription
dimanche 22 août 2004
Dernière intervention
29 septembre 2006
- 26 août 2006 à 18:04
Salut,
voila je cherche un tutorial (anglais ou francais) qui explique comment se servir des raw socket en python, sans passer par une bibliotheque externe.

merci d'avance
YG
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
102
Date d'inscription
jeudi 29 mai 2003
Dernière intervention
23 juin 2008
26 août 2006 à 17:49
3
Merci
j'ai trouvé ça sur le net si ça peut t'aider

#!/usr/bin/python

import sys
import string
import struct
from socket import *

proto = 0x55aa

s = socket(AF_PACKET, SOCK_RAW, proto)
s.bind(("eth1",proto))

ifName,ifProto,pktType,hwType,hwAddr = s.getsockname()

srcAddr = hwAddr
dstAddr = "\x01\x02\x03\x04\x05\x06"
ethData = "here is some data for an ethernet packet"

txFrame = struct.pack("!6s6sh",dstAddr,srcAddr,proto) + ethData

print "Tx[%d]: "%len(ethData) + string.join(["%02x"%ord(b) for b in ethData]," ")

s.send(txFrame)

rxFrame = s.recv(2048)

dstAddr,srcAddr,proto = struct.unpack("!6s6sh",rxFrame[:14])
ethData = rxFrame[14:]

print "Rx[%d]: "%len(ethData) + string.join(["%02x"%ord(b) for b in ethData]," ")

s.close()

Merci cs_DoudouBidou 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de cs_DoudouBidou
Messages postés
102
Date d'inscription
jeudi 29 mai 2003
Dernière intervention
23 juin 2008
25 août 2006 à 13:10
0
Merci
salut !

qu'est ce que tu entends par "raw socket"?
si tu veux pouvoir envoyer et recevoir des données avec le protocol udp ou tcp tu peux utiliser le module socket intégré à python

il y a un example tout simple dans la doc python pour faire un serveur et un client

http://docs.python.org/lib/socket-example.html

si tu veux des sockets non-bloquant, c'est à dire que ton programme ne s'arrête pas pendant que tu attends la réception de données par exemple, tu dois utiliser les threads

tu trouvera des exemples ici:

http://www.onlamp.com/pub/a/python/2004/02/12/advanced_nio.html?page=1

et en général un petit tour sur ce site permet de résoudre bien des problème:
http://wikipython.flibuste.net/moin.py/

Seb
Commenter la réponse de cs_DoudouBidou
Messages postés
4
Date d'inscription
dimanche 22 août 2004
Dernière intervention
29 septembre 2006
25 août 2006 à 13:23
0
Merci
qu'est ce que tu entends par "raw socket"?
-> des sockets de type SOCK_RAW et non de type SOCK_STREAM ou SOCK_DGRAM

En fait, ce que je veux c intercepter les paquets ip pour ecrire un sniffer reseau.(traiter manuellement les entetes ip et les entetes de couche transport et applicatives).
Voila.
Commenter la réponse de ebossss
Messages postés
102
Date d'inscription
jeudi 29 mai 2003
Dernière intervention
23 juin 2008
26 août 2006 à 17:54
0
Merci
apparement mon dernier exemple ne fonctionne que sous linux (je ne sais pas sur quelle plateforme tu es)

sinon ya d'autres infos ici mais c'est un module externe

http://mail.python.org/pipermail/python-list/2004-October/246974.html
Commenter la réponse de cs_DoudouBidou
Messages postés
4
Date d'inscription
dimanche 22 août 2004
Dernière intervention
29 septembre 2006
26 août 2006 à 18:04
0
Merci
Apparement les raw socket ne sont pas supportees sous windows (je travaille sous windows)..
Je vais donc passer sous linux pour faire le sniffer.
Merci de ton aide, je vais me servir de ce bout de code comme base de travail.
Commenter la réponse de ebossss

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.