背景:我现在了解如何编写一个 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.Receive
或 Socket.BeginReceive
读取原始 IP 数据包。
关于c# - 如何在不依赖 WinPCap 的情况下嗅探应用程序中的数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3485768/