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/...

InformationsquelleAutor Don | 2011-02-28