Les Forums

Les Forums

Les forums sont fermés. Ils restent présent pour consultation et archivage.
Vous pouvez désormais poser vos questions directement dans les commentaires en bas de chaque page du site.
Alors n'hésitez pas à participer

Carte Wifi, winsock2 et mode promiscuous

Bonjour,
La librairie winsock2 permet-elle de passer une carte wifi en mode promiscious afin de capturer les paquets de la carte en créant une raw socket ?
Lu jlbrd,

Oui of course, car Winsock s'applique en couche 3 et donc indépendante du driver de la carte.

Tu peux donc passer en mode Raw avec n'importe quelle carte.

Cependant, ai bien conscience que Winsock est une couche 3 et que donc, la première entête vue sera IP.

@+
_SebF - Sébastien FONTAINE
Le passage en mode promiscuous semble ne pas fonctionner avec toutes les cartes. Je fais référence à un source disponible sur internet à cette adresse : [url]http://www.cr0.net:8040/code/network/ipdump2-pre1/ipdump2.c.txt[/url]. Ce source doit être un peu modifié afin de pouvoir être compilé sous Visual C++.
Ce petit programme crée une raw socket puis la passe en mode promiscuous avant de passer en écoute. Le passage en promiscuous retourne une erreur lorsque je l'exécute avec ma carte wifi alors qu'avec ma carte ethernet ça marche bien. Curieusement, avec winpcap + ethereal aucun paquet n'est capturé non plus. Peut-être un problème identique ? Enfin si quelqu'un a une solution je suis preneur.
Merci

Avec l'erreur, on pourrait probablement te donner une réponse plus précise.


Ethereal utilise par défaut le mode promiscuous lors des captures, essaie peut-etre en le désactivant.

+
voici la partie du code concernée :
[code:1:a7b8b6f3aa]
/* enable promiscuous mode */

optval = 1;

if( WSAIoctl( raw_sock, SIO_RCVALL, &optval, sizeof( optval ),
NULL, 0, (unsigned long *)&n, NULL, NULL ) == SOCKET_ERROR )
{

printf( "WSAIoctl(SIO_RCVALL) failed\n" );
return( 1 );
}
[/code:1:a7b8b6f3aa]
Je vous fais grace du source complet qui peut être visualisé grâce au lien donné plus haut.
Pour ethereal, effectivement cela fonctionne en désactivant le mode promiscuous avant le passage en écoute. Donc on pourrait en conclure qu'il n'est pas possible de passer ma carte wifi en mode promiscuous. Mais pourquoi et comment résoudre ce problème ?
Quand je parlais du message d'erreur, je voulais parler d'un code renvoyé par WSAGetLastError() par exemple 😉


Je serais tenté de dire qu'il n'y a pas trop de solution à ton probleme. A la limite, je tenterais (si tu as XP par exemple) de ne pas installer le driver de ta carte wifi et de laisser le driver qu'utilise XP par défaut au cas où ca vienne de là.
WSAGetLastError() retourne la valeur 10022. Je pense que la carte wifi ne supporte pas le passage en promiscuous. Voila tout !
[u:8591753284]WSAEINVAL (10022)[/u:8591753284]
Invalid Argument -- An invalid argument was passed to a function.

Sans pouvoir tester actuellement la solution, je te conseillerais de changer le type de la variable optval par exemple en: unsigned int / unsigned long /
bool ou un autre type qui peut contenir la valeur 1. (je pencherais pour du unsigned long).

Sinon peut-etre qu'effectivement ta carte ne supporte pas le mode promiscuous.
Je penche pour un pb de carte car sur la même machine, ma carte ethernet bascule bien en promiscuous avec le même code.
Lu jlbrd,

J'ai rencontré moi aussi cette erreur sur la même fonction. Et j'ai un peu avançé en trouvant que l'erreur 10022 était égale à WSAEINVAL .

Tu trouveras la définition plus précise ici :
[url]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcecomm5/html/wce50lrfwsaioctl.asp[/url]

The dwIoControlCode parameter is not a valid command, a supplied input parameter is not acceptable, or the command is not applicable to the type of socket supplied.

@+
_SebF - Sébastien FONTAINE