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

由于 2000 年代初期病毒的滥用,Microsoft 已限制在所有比 XP SP2 更新的操作系统上的非服务器版本的 windows 操作系统上使用原始套接字。

您可以从MSDN 上的TCP/IP Raw Sockets页面了解更多关于存在哪些限制的信息。

于 2017-03-06T02:45:41.370 回答
-2

WSAEINVAL 10022

无效的论点。

提供了一些无效参数(例如,为 setsockopt 函数指定无效级别)。在某些情况下,它还指代套接字的当前状态——例如,在未侦听的套接字上调用接受。

在此处查看此错误:http: //msdn.microsoft.com/en-us/library/ms740668 (v=vs.85).aspx

于 2011-02-28T18:26:39.540 回答