c# - 如何在不依赖 WinPCap 的情况下嗅探应用程序中的数据包?

标签 c# .net winpcap packet-sniffers sharppcap

背景:我现在了解如何编写一个 C# 应用程序来监控进出运行该应用程序的 PC 上的网卡的数据包。我知道的方法依赖于 http://www.winpcap.org/但是已经安装在 PC 上,然后我使用 C# 包装器,例如 http://pcapdotnet.codeplex.com/http://sourceforge.net/projects/sharppcap/ .

问题:但是,我的问题是,我需要做什么才能拥有可以嗅探数据包且不需要预安装第 3 方应用程序/驱动程序的 C# 应用程序?

澄清:那是我真的想要我目前拥有的应用程序,但我不需要告诉用户必须去下载/安装 XYZ 才能使用该应用程序。出于问题的目的,假设也不允许自动下载和安装第 3 方应用程序/驱动程序。 (对于 WinPCap,我不确定你是否可以捆绑它,但不幸的是,我相信你无论如何都不应该这样做)

谢谢

最佳答案

我个人会坚持使用 WinPCap。但是既然你问了,就可以使用以下代码从网络中嗅探数据包以启用原始套接字。

Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
s.Bind(new IPEndPoint(IPAddress.Parse("<IP Address Here of NIC to sniff>"), 0));
s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1);
byte[] inBytes = new byte[] { 1, 0, 0, 0 };
byte[] outBytes = new byte[] { 0, 0, 0, 0 };
s.IOControl(IOControlCode.ReceiveAll, inBytes, outBytes);

完成此操作后,您可以使用 Socket.ReceiveSocket.BeginReceive 读取原始 IP 数据包。

关于c# - 如何在不依赖 WinPCap 的情况下嗅探应用程序中的数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3485768/

相关文章:

c# - Unity 引擎 WaitForSeconds 是如何工作的?

c# - 使用线程时检查条件失败

C# 如何对静态方法使用 AOP?

c# - 用 ASP .NET 重写 HTTP 方法

java - 无法使用 jpcap 打开设备

c# - 如何创建可重用的 Entity Framework 投影表达式?

c# - .Net 中使用套接字通信的点对点相互 SSL 身份验证

ASP.NET 无法访问 Windows 临时文件夹?

c# - 将 UDP 数据包转发到多个保持原始源地址的 IP

c++ - NDIS版本与Windows版本的兼容性问题