RAW SOCKET [Résolu]

Signaler
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
-
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
-
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

Messages postés
3840
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
121
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 !
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
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 !
Messages postés
3840
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
121
Tres honnetement, je ne sais pas du tout comment elle fait. Je me suis arreté au fait que cela marchait...
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
> 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)
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
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