Raw socket [Résolu]

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

5 réponses

Répondre au sujet
cs_DoudouBidou 102 Messages postés jeudi 29 mai 2003Date d'inscription 23 juin 2008 Dernière intervention - 26 août 2006 à 17:49
+3
Utile
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()
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_DoudouBidou
cs_DoudouBidou 102 Messages postés jeudi 29 mai 2003Date d'inscription 23 juin 2008 Dernière intervention - 25 août 2006 à 13:10
0
Utile
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
ebossss 4 Messages postés dimanche 22 août 2004Date d'inscription 29 septembre 2006 Dernière intervention - 25 août 2006 à 13:23
0
Utile
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
cs_DoudouBidou 102 Messages postés jeudi 29 mai 2003Date d'inscription 23 juin 2008 Dernière intervention - 26 août 2006 à 17:54
0
Utile
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
ebossss 4 Messages postés dimanche 22 août 2004Date d'inscription 29 septembre 2006 Dernière intervention - 26 août 2006 à 18:04
0
Utile
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.