Raw socket

Résolu
ebossss
Messages postés
4
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2006
- 20 août 2006 à 15:59
ebossss
Messages postés
4
Date d'inscription
dimanche 22 août 2004
Statut
Membre
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

5 réponses

cs_DoudouBidou
Messages postés
102
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
23 juin 2008
4
26 août 2006 à 17:49
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()
3
cs_DoudouBidou
Messages postés
102
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
23 juin 2008
4
25 août 2006 à 13:10
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
0
ebossss
Messages postés
4
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2006

25 août 2006 à 13:23
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.
0
cs_DoudouBidou
Messages postés
102
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
23 juin 2008
4
26 août 2006 à 17:54
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ebossss
Messages postés
4
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2006

26 août 2006 à 18:04
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.
0