IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Socket.IOControl : Erreur que je ne m'explique pas


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut Socket.IOControl : Erreur que je ne m'explique pas
    Bonjour,

    Je cherche a créer un sniffer de packet.

    J'étudie ce qui existe déjà ce qui existe, j'ai trouvé :
    http://www.codeproject.com/KB/IP/CSNetworkSniffer.aspx

    et ca (plus basique) :

    http://www.c-sharpcorner.com/UploadF...ifferInCS.aspx

    (Comme il faut s'inscrire pour pouvoir les télécharger, j'ai pensé à les mettre en download sans inscription sur le net : http://www.box.net/shared/jpnni9zsco )

    Mais dans les 2 cas, quand on arrive à ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    byte[] byTrue = new byte[4] {1, 0, 0, 0};
    byte[] byOut = new byte[4]{1, 0, 0, 0}; //Capture outgoing packets
     
    //Socket.IOControl is analogous to the WSAIoctl method of Winsock 2
    mainSocket.IOControl(IOControlCode.ReceiveAll, //Equivalent to SIO_RCVALL constant of Winsock 2
                                 byTrue,                                    
                                 byOut);
    IOControl lève une SocketException de code 10022 soit "Un argument invalide a été fourni".

    Auriez vous une idée d'où vient le problème.

    Si vous générez l'appli et que vous la lancez avez vous ce même problème ?

    Je vous remercie par avance.

    @+
    RG

  2. #2
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Je viens d'essayer un autre outils et j'ai toujours la même erreur :
    ( http://www.bizon.org/ilya/sniffer80.htm )
    Consultez la fin de ce message pour plus de détails sur l'appel du débogage
    juste-à-temps (JIT) à la place de cette boîte de dialogue.

    ************** Texte de l'exception **************
    Sniffer.SnifferException: Could not set the socket to receive all ---> System.Net.Sockets.SocketException: Un argument non valide a été fourni
    à System.Net.Sockets.Socket.IOControl(Int32 ioControlCode, Byte[] optionInValue, Byte[] optionOutValue)
    à Sniffer.SnifferSocket.SetupSocket(Socket socket)
    --- Fin de la trace de la pile d'exception interne ---
    à Sniffer.SnifferSocket.SetupSocket(Socket socket)
    Pourriez vous me dire si vous aussi vous avez cette même erreur.
    (Je suis sous XP SP2)

    @+

  3. #3
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Il s'agit de Raw Sockets non ? Si oui il me semble que XP SP2 n'accepte plus que l'on crée des raw sockets.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Salut,

    Merci de m'aider.

    Es tu sûr de ce que tu dit, je trouve pas de confirmation.
    http://msdn2.microsoft.com/en-us/library/ms740548.aspx

    J'ai plus l'impression que tou ca vient du fait que mon interface est une carte wireless.

    Il semble que ca fonctionne bien si on utilise ethernet. (faut que je vérifie)

    Je trouve aucune info de comment contourner le problème.

    Voici plus de code pour que ce soit plus simple à suivre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            private Socket mainSocket;                          //The socket which captures all incoming packets
            private byte[] byteData = new byte[4096];
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
                        //For sniffing the socket to capture the packets has to be a raw socket, with the
                        //address family being of type internetwork, and protocol being IP
                        mainSocket = new Socket(AddressFamily.InterNetwork,
                            SocketType.Raw, ProtocolType.IP);
     
                        //Bind the socket to the selected IP address
                        mainSocket.Bind(new IPEndPoint(IPAddress.Parse(cmbInterfaces.Text), 0));
     
                        //Set the socket  options
                        mainSocket.SetSocketOption(SocketOptionLevel.IP,            //Applies only to IP packets
                                                   SocketOptionName.HeaderIncluded, //Set the include the header
                                                   true);                           //option to true
     
                        byte[] byTrue = new byte[4] {1, 0, 0, 0};
                        byte[] byOut = new byte[4]{1, 0, 0, 0}; //Capture outgoing packets
     
                        //Socket.IOControl is analogous to the WSAIoctl method of Winsock 2
                        mainSocket.IOControl(IOControlCode.ReceiveAll,              //Equivalent to SIO_RCVALL constant
                                                                                    //of Winsock 2
                                             byTrue,                                    
                                             byOut);
     
                        //Start receiving the packets asynchronously
                        mainSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None,
                            new AsyncCallback(OnReceive), null);

    En fait, peut être que je me prends la tête pour rien.

    Mon besoin est trés simple en fait.

    Je cherche à récupérer les packets (sortant de mon PC) http de type POST (vers une IP particuliere).

    A part en snifant, je voit pas trop.

    @+
    RG

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Re,

    Je viens de faire le test avec mon ordinateur portable.

    En wireless, j'ai la même erreur.
    et la carte est une intel 2200

    En ethernet, aucun problème, je récupère bien les packets.

    Alors une idée sur comment contourner le problème ?

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Juste pour dire que j'ai esayé avec différentes "cartes" wireless :
    PCI wireless card : OvisLink Evo-W108 PCI/PCM
    intel pro/wireless 2200 bg
    USB wireless adaptor : Asus WL 167-G

    Et c'est toujours le même problème.

    Par contre, si on remplace ReceiveAll par ReceiveAllMulticast, ca fonctionne très bien, mais alors on ne voit que les packets à destination d'une IP locale(donc aussi tous les entrants si notre IP est locale (derrière routeur))

Discussions similaires

  1. Write, Socket et erreurs "EILSEQ"
    Par zigoo dans le forum Réseau
    Réponses: 3
    Dernier message: 22/03/2006, 17h19
  2. std ::vector [erreur que je ne comprend pas]
    Par aaronw dans le forum SL & STL
    Réponses: 8
    Dernier message: 05/03/2006, 21h00
  3. [Débutant] Message d'erreur que je ne comprends pas
    Par Le Furet dans le forum Langage
    Réponses: 2
    Dernier message: 25/02/2006, 17h37
  4. [PostGreSQL] une erreur que je ne comprends pas
    Par flo78 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/02/2006, 10h18
  5. erreur que j ai pas comprise ds mon pg informix
    Par zineb dans le forum Informix
    Réponses: 2
    Dernier message: 16/07/2003, 13h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo