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

时间:2010-10-18 22:43:14

标签: c# .net windows-7 network-programming raw-ethernet

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

3 个答案:

答案 0 :(得分:19)

根据Saint_pl的建议:

  

我发现可能更好的解决方案 - 类似于SharpPcap。它是Pcap.Net - WinPcap的.NET包装器。现在,无论我想要什么,我都可以修改我的数据包。


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

Raw Ethernet Packet Manipulationmirror on CodeProject

  

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

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

Client (and Server) Sockets Communication查看整章,但这里有关键部分:

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

答案 1 :(得分:0)

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

答案 2 :(得分:-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);