Raw socket [Résolu]

Signaler
Messages postés
4
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2006
-
Messages postés
4
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2006
-
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

5 réponses

Messages postés
102
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
23 juin 2008
3
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()
Messages postés
102
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
23 juin 2008
3
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
Messages postés
4
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2006

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.
Messages postés
102
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
23 juin 2008
3
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
Messages postés
4
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2006

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.