我正在编写一个数据包嗅探器作为在 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;
}
}