Je ne sais pas pourquoi je reçois le code d’erreur 10022 (argument invalide) lors de la définition des options de socket dans mon renifleur C #

J’écris un renifleur de paquet comme un exercice d’apprentissage du développement de sockets .Net 4 en C #. Mon objective est de détecter les paquets IP entrant et sortant de mon ordinateur.

Mon problème est que je reçois le code d’erreur 10022, argument invalide, lors de mon appel à SetSocketOption. Je ne vois pas où j’ai un argument invalide. J’ai quelques privilèges d’administrateur sur mon ordinateur, mais je n’en ai peut-être pas assez. C’est mon ordinateur de travail et le service informatique est assez ssortingct. Cela dit, s’il s’agissait d’un problème d’permissions, j’attendrais une exception différente.

Je ne suis pas sûr de ce que ma prochaine étape devrait être de résoudre ce problème. Quelqu’un a une idée?

Voici le code qui suit:

public Sniffer() { try { socket = new Socket( AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP); IPAddress[] ipAddresses = Dns.GetHostEntry( Dns.GetHostName()).AddressList; socket.Bind(new IPEndPoint(ipAddresses[0], 0)); socket.SetSocketOption( SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true); byte[] inputData = new byte[4] { 1, 0, 0, 0 }; byte[] outValue = new byte[4]; socket.IOControl(IOControlCode.ReceiveAll, inputData, outValue); } catch (SocketException ex) { ssortingng ErrorMessage = ex.Message; } } 

En raison de l’utilisation abusive de virus au début des années 2000, Microsoft a restreint l’utilisation de sockets bruts sur les éditions non serveur du système d’exploitation Windows de tous les systèmes d’exploitation plus récents que XP SP2.

Vous pouvez en savoir plus sur les ressortingctions en vigueur à partir de la page sur les sockets brutes TCP / IP sur MSDN.

WSAEINVAL 10022

Argument invalide.

Un argument non valide a été fourni (par exemple, en spécifiant un niveau non valide pour la fonction setsockopt). Dans certains cas, il fait également référence à l’état actuel du socket, par exemple, en appelant accept sur un socket qui n’écoute pas.

Examinez cette erreur ici: http://msdn.microsoft.com/en-us/library/ms740668(v=vs.85).aspx