我正在编写一个数据包嗅探器作为学习 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;
}
}
由于 2000 年代初期病毒的滥用,Microsoft 已限制在所有高于 XP SP2 的操作系统上的 Windows 操作系统的非服务器版本上使用原始套接字。
您可以从以下页面阅读有关哪些限制的更多信息TCP/IP 原始套接字 https://msdn.microsoft.com/en-us/library/windows/desktop/ms740548(v=vs.85).aspx在 MSDN 上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)