2010-10-18 81 views
25

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

+2

你有什么期望在另一端发生的呢?原始呢?制定你自己的协议?我们都用什么错,你的硬件知道如何路由,你的局域网管理员知道如何支持? – 2010-10-19 00:38:28

+0

我只是想发送以太网数据包与一些更改字段像MAC地址 – Saint 2010-10-19 09:57:47

+1

SharpPcap和Pcap.net是要走的路。您需要一个WinPcap包装器框架,因为出于安全原因,Windows不允许访问较低级别的协议标头。 WinPcap提供了自己的网络驱动程序,允许您绕过该限制。 – 2010-11-10 08:44:16

回答

17

低:

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


我有一些资源,你也许有帮助。我不尝试在Windows 7中的解决方案,但也许它包含一些很好的信息开始。

Raw Ethernet Packet Manipulationmirror on CodeProject

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

而且对原始套接字的一些信息(以防万一你有趣太):

Client (and Server) Sockets Communication取整章,但这里的关键部位一看:

不发送数据包,但也许有趣:A Network Sniffer in C#SharpPcap - A Packet Capture Framework for .NET

+0

我认为原始以太网数据包从CodeProject发送将帮助我。顺便说一句,我想这是唯一的方式,我发现通过C#发送以太网数据包,例如更改的MAC地址。 – Saint 2010-10-19 10:21:09

+0

原始的以太网操作是非常低的水平。为了以良好的水平完成您的任务,您当然需要一些关于网络驱动程序接口规范和理解设备驱动程序(及其API)的知识。不要跳过它。单靠C#在这个任务中并没有给你足够的权力。 – 2010-10-19 15:06:54

+2

我发现可能更好的解决方案 - 类似于SharpPcap。它是http://pcapdotnet.codeplex.com/ - WinPcap的.NET包装。现在我可以随意修改我的数据包。 Thanx :) – Saint 2010-10-23 14:54:42

-3
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); 
+11

这是一个TCP数据包,而不是以太网数据包......你是2层太高的堆栈;) – 2010-10-18 23:04:53

+3

啊我明白了。理解失败。 – bufferz 2010-10-19 01:32:17

+0

此外,这不适用于Windows 7. [只有服务器版本的Windows允许使用原始TCP套接字](http://msdn.microsoft.com/en-us/library/windows/desktop/ms740548%28v=vs。 85%29.aspx#LIMITATIONS_ON_RAW_SOCKETS)由于恶意软件滥用在过去。 – 2013-07-12 23:39:51

0

iphelper API有一些低层次的东西 - 但可能并不像你想Saint_pl基础上建议,获取

相关问题