c#-如何在不依赖WinPCap的情况下嗅探应用程序中的数据包?背景:我现在明白了如何编写一个C#应用程序来监控运行该应用程序的PC上进出网卡的数据包。我知道的方法依赖于已经安装在PC上的http://www.winpcap.org/,然后我使用像http://pcapdotnet.codeplex.com/或http://sourceforge这样的C#包装器。净/项目/sharppcap/。问题:我的问题是,我需要做什么才能拥有一个可以嗅探不需要预安装第3方应用程序/驱动程序的数据包的C#应用程序?澄清:那是我真的想要我目前拥有的应用程序,但没有要求我告诉用户他们必须先去下载/安装XYZ才能使用该应用程序。出于问题的目的,假设不允许自动下载和安装第三方应用程序/驱动程序。(对于WinPCap,我不确定您是否可以捆绑它,但我相信无论如何您都不应该倒霉)谢谢就我个人而言,我会坚持使用WinPCap。但是既然你问了,下面的代码可以用来嗅探来自网络的数据包以启用原始套接字。Sockets=newSocket(AddressFamily.InterNetwork,SocketType.Raw,ProtocolType.IP);s.Bind(newIPEndPoint(IPAddress.Parse(""),0));s.SetSocketOption(SocketOptionLevel.IP,SocketOptionName.HeaderIncluded,1);byte[]inBytes=newbyte[]{1,0,0,0};byte[]outBytes=newbyte[]{0,0,0,0};s.IOControl(IOControlCode.ReceiveAll,inBytes,outBytes);完成后,您可以使用Socket.Receive或Socket.BeginReceive读取原始IP数据包。有一种方法可以使用标准的winsocks实现在.NET上捕获传入/传出数据包。我看过一个博客示例,但我没有链接了。长话短说,这是一个极端的情况,因为这不是winsocks(标准Windows网络驱动程序)的用途。Pcap通常需要抓包的原因是它使用自己的NDIS网络驱动程序来解锁NIC的全部功能。除此之外,它还提供了一种简单的方法来设置过滤器以限制在指定接口上捕获的数据包数量。IE,驱动程序会在内核级别忽略某些类型的数据包,而不是在用户模式级别。因此,您将能够更有效地过滤数据包并在网络负载更大的情况下进行捕获。在.NET中,过滤包需要自己提供应用层包过滤方案,这样效率会低很多。Windows出于“安全原因”阻止对非标准协议的访问,因此它们并不真正支持使用RAW数据包进行联网(即使可能存在使其成为可能的代码)。RAW数据包总是用于研究新协议的设计,而不是一般用途。由于所有这些原因,Winpcap和特定语言的包装器通常是任何类型的捕获应用程序的最佳选择。注:我个人比较喜欢SharpPcap,但是我也偏向于项目的开发。Pcap.net的实现在捕获方面非常相似,主要区别在于如何解析数据包。以上是C#学习教程:c#-如何在不依赖WinPCap的情况下嗅探应用程序中的数据包?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
