如何使用C#发送原始以太网数据包?

有没有办法通过C#将原始数据包以太网发送到其他主机? 在Windows 7中,如果它有所不同。

根据Saint_pl的建议:

我发现可能更好的解决方案 – 类似于SharpPcap。 它是Pcap.Net – WinPcap的.NET包装器。 现在我可以随意修改我的数据包了。


我有一些资源可能对您有所帮助。 我不尝试在Windows 7中使用该解决方案,但它可能包含一些很好的信息。

CodeProject上的 原始以太网数据包操作或镜像

本文的目的是解释如何在Microsoft平台上使用C#发送原始以太网数据包。 原始以太网数据包是发送到物理线路的完整第2层网络帧。 发送这样的帧允许您操作目标和源MAC地址以及第3层协议字段。

还有一些关于原始套接字的信息(以防万一你也有趣):

客户端(和服务器)套接字通信看一下整章,但这里是关键部分:

  • C#Raw UDP套接字程序示例
  • C#Raw Socket Ping程序示例部分A | B部分
  • 所有例子

不发送数据包但可能很有趣: C#中的网络嗅探器 , SharpPcap – 用于.NET的数据包捕获框架

iphelper API有一些低级别的东西 – 但可能没有你想要的那么低

Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint ip = new IPEndPoint(IPAddress.Parse("10.25.184.11"), 4456); server.Connect(ip); byte[] sendData = new byte[] { 0, 8, 32, 64 }; server.Send(sendData); //done. now let's listen for data byte[] receiveData = new byte[1024]; int receivedDataLength = server.Receive(receiveData); //if the response is a string message string stringData = Encoding.ASCII.GetString(receiveData, 0, receivedDataLength); Console.WriteLine(stringData);