2009-04-22 6 views
1

Je réalise un projet dans lequel je dois créer des paquets personnalisés. Autrement dit, je dois avoir le contrôle de chaque en-tête de paquet. J'essaye de faire ceci en utilisant des douilles. Au fond, ce que je dois faire est la suivante:Implémenter Raw Ethernet dans Winsock

SOCKET s = socket(PF_UNSPEC, SOCK_RAW, ethernet_type); 

Le ethernet_type est quelque chose qui est adapté, non standard, comme 0xAAAAA. J'utilise htons(). En outre, il est très préférable que je n'utilise pas winPcap.

À l'heure actuelle, j'obtiens l'erreur 10043, protocole non pris en charge. Le message d'erreur semble suggérer que je peux configurer le protocole dans mon système, mais je n'ai aucune idée de comment faire cela.

Il est dit:

Protocole non pris en charge. Le protocole demandé n'a pas été configuré dans le système ou aucune implémentation n'existe pour ce dernier. Par exemple, un appel de socket demande un socket SOCK_DGRAM, mais spécifie un protocole de flux.

Il y a quelques problèmes différents ici, donc si quelqu'un a des commentaires, je l'apprécierais vraiment.

Répondre

3

Selon thesearticles, Microsoft a supprimé le support de socket brut de Windows dans un correctif non amovible. Vous risquez donc de ne pas avoir de chance si vous ne souhaitez pas passer à un autre système d'exploitation.

+0

Je peux cependant ouvrir le socket brut en utilisant d'autres options. En outre, l'erreur concerne le type de protocole (la dernière option, je l'ai appelée ethernet_type). – devin

0

Je pense que l'ajout de nouveaux protocoles à l'appel socket serait quelque chose de très difficile. Vous devez vous assurer que socket prend en charge cet appel. Je pense que vous devrez recompiler la fonction de socket et je ne pense pas que ce soit facilement possible sous Windows.

Crafting paquets personnalisés ne vous oblige pas à créer un nouveau protocole

Je pense que la bonne façon de spécifier une socket RAW est comme ce

SOCKET s; 
s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW); 

Si vous êtes vraiment essayer de jouer avec Ethernet brut comme vos noms de variables suggèrent, alors soit vous utilisez pilote winpcap ou écrire your own driver

Je ne pense pas qu'il existe une autre solution "facile" à Ethernet brut. WinPcap est plutôt facile, donc vous pouvez vouloir le vérifier