RAW SOCKET

Résolu
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 - 3 août 2006 à 16:56
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 - 4 août 2006 à 09:22
Bonjour à tous,

Voila je ne pose pas souvent de question mais là autant le faire, avant que je me déchire pour rien.

Ca fait déja plusieurs heures que j'essai de programmer une RawSocket afin de pouvoir forger une  trame IP spécifique. (Rien d'illégal, c'est pour une futur source sur DelphiFr).

Le problème est que j'ai systématiquement une erreur Winsock 10049  dixit la MSDN : Impossible d'allouer l'adresse demandée.

J'ai reverifié mes trames et mes structures IP et UDP 10 fois au moins (via frameip.com) et mes adresses IP ont l'air bien placées.

Ma question première question serai : Est ce que les Raw Socket fonctionne sous XP ? (car des rumeurs semblent dire que Microsoft les a supprimés !)

Si non, alors la suite ...

* Voila mes structures IP et UDP :

// Entete IP  ( Couche 3 )
type ENTETE_IP = record
    IP_version      : Byte;     // Version (4 bits)/IHL (4 bits)
    IP_service      : Byte;     // Service
    IP_longeure     : Word;     // Longeure total ( IP+UDP+Message )
    IP_id           : Word;     // Identification
    IP_offset       : Word;     // Flags (3 bits)/Pos.frag. (13bits)
    IP_ttl          : Byte;     // TTL
    IP_protocol     : Byte;     // Protocole
    IP_checksum     : Word;     // Checksum
    IP_srcaddr      : LongWord; // IP Source
    IP_destaddr     : LongWord; // IP Destination
    IP_option       : LongWord; // Facultatif, et non utilisé ici
end;



// Entete UDP ( Couche  4 )
type ENTETE_UDP = record
    UDP_srcport     : Word;     // Port source
    UDP_destport    : Word;     // Port Destination
    UDP_longeure    : Word;     // Longeure total ( UDP + Message )
    UDP_checksum    : Word;     // Checksum
end;




* Le code principal qui appel les différentes fonctions principales

Ret := WSAStartup( MAKEWORD(2,2), wsdata );
[...]
SockHandle := Socket( AF_INET, SOCK_RAW, IPPROTO_UDP );
[...]
IP_HDRINCL := 2;
bOpt := 1;
Ret  := SetSockOpt( SockHandle, IPPROTO_IP, IP_HDRINCL, @bOpt, SizeOf(bOpt) );
[...]
ConstruitTrame( SrcIP, SrcPort, DestIP, DestPort, 'AAAAAAAAAAAAAAAAAAAAA', Buf, Remote, iTotalSize );
[...]
Ret := SendTo( SockHandle, Buf, iTotalSize, 0, Remote, SizeOf(Remote) );

PS : Je ne met pas tout le code de ConstruitTrame car il est extremement long ...

* Et voila la trame crée (variable Buf) :  [ IP | UDP | Message ]

70 96 00 53 00 00 00 00 255 17 00 00 192 168 00 02 192 168 00 03 00 00 00 0004 210 02 154 00 29 202 1365 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65

Si qqn à déja eut le problème et connait la réponse.
Et si vous voulez je pourrais vous poster le code complet.

Merci Beaucoup.
Elguevel

5 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
3 août 2006 à 17:11
Si tu as XP SP1, les raw socket sont désactive depuis un fix post sp1, pour les réactiver il faut désactiver le firewall :s
Si tu as windows XP SP2, la création des raw socket à été désactivée. il faut passer par winpcap.

J'ai vu des exemples sur ce site, mais en C++:
http://www.csharpfr.com/codes/CLASS-RAW-SOCKET-SNIFFER_17930.aspx
http://www.cppfrance.com/codes/EXEMPLE-RAW-SOCKET-SOUS-LINUX_19580.aspx
http://www.cppfrance.com/codes/SENSNIFF-TCP-IP-SNIFFER-SOUS-WIN32-MODE-RAW_16974.aspx

Bonne chance, j'espere voir ta source prochainement sur DelphiFr !
3
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
3 août 2006 à 17:32
Arggg dégouté tout ce boulot pour rien .... bon ba on va passer par WinPcap !!!

mais un truc me turlupine, les RawSockets sont soit disant désactivés et une librairie comme WinPCap arrive tout de même à forger ses paquets, elle le fait comment ? langage bas niveau ? Drivers ?

Merci  bcp CptPingu !
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
3 août 2006 à 17:45
Tres honnetement, je ne sais pas du tout comment elle fait. Je me suis arreté au fait que cela marchait...
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
3 août 2006 à 19:19
> desactiver le firewall d'XP

ça devrait etre systematique

> installer XP SP2

c'est une mauvaise idée ... comme celle de laisser le firewall d'XP

<hr size="2" width="100%" />Croc (click me)
0

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

Posez votre question
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
4 août 2006 à 09:22
Le service du firewall d'XP est systématiquement désactivé sur mes machines (j'ai autre chose pour çà). Je désactive d'autres services par ailleurs qui ne servent pas à grand chose, et economise ainsi un peu de ressource.

Sinon pour le SP2, pas trop le choix, avec leur mises à jour auto.

Et puis un programme doit pouvoir être le plus portable possible, alors si je fait un truc qui tourne sous la SP1 et pas sur la SP2, on va encore dire que mes trucs marches pas ...

Je vais voir ce qu'on peut faire avec WinPCap...

Merci
0
Rejoignez-nous