Je ne sais pas pourquoi j'obtiens le Code d'Erreur 10022 (Argument non Valide) lors de la configuration options de prise dans mon C# sniffer
Je suis en train d'écrire un renifleur de paquets comme un exercice d'apprentissage .Net 4 prise de développement en C#. Mon objectif est de renifleur de paquets IP venant dans et hors de mon ordinateur.
Mon problème est que j'obtiens le code d'erreur 10022, argument non valide, sur mon appel à SetSocketOption. Je ne vois pas où j'ai un argument non valide. J'ai quelques admin privs sur mon ordinateur, mais peut-être que je n'ai pas assez. C'est mon ordinateur de travail et le service informatique est assez strict. Cela dit, si c'était un problème d'autorisations je m'attends à une autre exception.
Je ne suis pas sûr de ce que ma prochaine étape devrait être de débogage ce problème. Quelqu'un a une idée?
Voici le code suivant:
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)
{
string ErrorMessage = ex.Message;
}
}
- Je ne vois pas l'IP comme l'un des arguments dans la présente documentation (?) msdn.microsoft.com/en-us/library/600stss7.aspx
- Vous êtes sous win7 ou vista? Si c'est le cas, vous pourriez juste besoin d'élever ses privilèges.
- Win7. Une idée de comment je trouver ce niveau j'ai besoin de pour obtenir d'?
- msdn.microsoft.com/en-us/library/... c'est la référence à SocketOptionLevel.
- Essayez d'exécuter l'application en vertu de la mode administrateur. dans Win 7, même si vous exécutez en tant qu'utilisateur admin par défaut, ils sont exécutés avec un compte standard mode.
- essayé, n'est-ce pas faire une différence, malheureusement.
- Vous pouvez voir plus d'informations d'erreur spécifique dans votre observateur d'événements de Windows puisque c'est à venir à partir de certaines Fenêtres d'erreur du système. FWIW, voici le code natif lorsque vous définissez les options de socket: github.com/dotnet/corefx/blob/...
Vous devez vous connecter pour publier un commentaire.
Microsoft a limité l'utilisation des raw sockets non-serveur éditions de l'OS de windows sur tous les OS plus récent que XP SP2, à cause de l'abus par le virus dans le début des années 2000.
Vous pouvez lire plus sur ce que les restrictions sont en place à partir de la page sur TCP/IP Raw Sockets sur la MSDN.
WSAEINVAL 10022
Argument non valide.
Certains argument non valide a été fournie (par exemple, en spécifiant un niveau non valide pour la fonction setsockopt). Dans certains cas, il se réfère également à l'état actuel de la prise, par exemple, l'appel accepter sur un support qui n'est pas à l'écoute.
Prendre un coup d'oeil sur cette erreur ici:
http://msdn.microsoft.com/en-us/library/ms740668(v=vs. 85).aspx