3

C#で.Net 4ソケットの開発を学ぶための演習として、パケットスニファを作成しています。私の目標は、コンピューターに出入りするIPパケットをスニッフィングすることです。

私の問題は、SetSocketOptionの呼び出しでエラーコード10022、無効な引数が発生することです。無効な引数がある場所がわかりません。コンピューターに管理者権限がありますが、十分ではない可能性があります。それは私の仕事用コンピューターであり、IT部門はかなり厳格です。そうは言っても、それが権限の問題である場合、私は別の例外を期待します。

この問題をデバッグするための次のステップはどうあるべきかわかりません。誰かアイデアがありますか?

コードは次のとおりです。

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;
    }
}
4

2 に答える 2

1

Microsoftは、2000年代初頭のウイルスによる悪用のため、XPSP2より新しいすべてのOSのWindowsOSの非サーバーエディションでのrawソケットの使用を制限しました。

MSDNのTCP/IP Raw Socketsのページから、どのような制限が適用されているかについて詳しく読むことができます。

于 2017-03-06T02:45:41.370 に答える
-2

WSAEINVAL 10022

無効な引数。

いくつかの無効な引数が指定されました(たとえば、setsockopt関数に無効なレベルを指定しました)。場合によっては、ソケットの現在の状態も参照します。たとえば、リッスンしていないソケットでacceptを呼び出します。

ここでこのエラーについて見てください:http: //msdn.microsoft.com/en-us/library/ms740668 (v = vs.85).aspx

于 2011-02-28T18:26:39.540 に答える