有没有办法通过C#发送原始数据包以太网到其他主机?在Windows 7中,如果它有所作为。如何用C#发送原始以太网数据包?
回答
低:
我发现可能是更好的解决方案 - 类似SharpPcap。它是Pcap.Net - WinPcap的.NET包装。现在我可以随意修改我的数据包。
我有一些资源,你也许有帮助。我不尝试在Windows 7中的解决方案,但也许它包含一些很好的信息开始。
Raw Ethernet Packet Manipulation或mirror on CodeProject
本文的这个目的是介绍如何使用C#在微软平台上发送原始以太网数据包。原始以太网数据包是发送到物理线路的完整第2层网络帧。像这样发送一个帧允许您操作目标和源MAC地址以及第3层协议字段。
而且对原始套接字的一些信息(以防万一你有趣太):
Client (and Server) Sockets Communication取整章,但这里的关键部位一看:
- C# Raw UDP Socket Program Example
- C#原始套接字Ping程序示例part A | part B
- All examples
不发送数据包,但也许有趣:A Network Sniffer in C#,SharpPcap - A Packet Capture Framework for .NET
我认为原始以太网数据包从CodeProject发送将帮助我。顺便说一句,我想这是唯一的方式,我发现通过C#发送以太网数据包,例如更改的MAC地址。 – Saint 2010-10-19 10:21:09
原始的以太网操作是非常低的水平。为了以良好的水平完成您的任务,您当然需要一些关于网络驱动程序接口规范和理解设备驱动程序(及其API)的知识。不要跳过它。单靠C#在这个任务中并没有给你足够的权力。 – 2010-10-19 15:06:54
我发现可能更好的解决方案 - 类似于SharpPcap。它是http://pcapdotnet.codeplex.com/ - WinPcap的.NET包装。现在我可以随意修改我的数据包。 Thanx :) – Saint 2010-10-23 14:54:42
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);
这是一个TCP数据包,而不是以太网数据包......你是2层太高的堆栈;) – 2010-10-18 23:04:53
啊我明白了。理解失败。 – bufferz 2010-10-19 01:32:17
此外,这不适用于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
iphelper API有一些低层次的东西 - 但可能并不像你想Saint_pl基础上建议,获取
- 1. 使用pcapdotnet发送原始以太网数据包
- 2. 如何发送原始数据包
- 3. 接收原始以太网数据包c
- 4. 从内核模块发送一个原始以太网数据包
- 5. 我如何发送python中的原始以太网帧
- 6. PHP发送原始数据包
- 7. 在类型字段中发送带有数据字段长度的原始以太网数据包
- 8. 如何发送原始数据到API
- 9. SBApplication:如何发送原始数据
- 10. 如何在Ruby中将以太网数据包发送到网络中?
- 11. 如何使用以太网预告片发送数据报?
- 12. 如何使用sendto通过原始以太网套接字发送数据而不使用sockaddr_ll?
- 13. 执行发送和接收原始以太网帧的C程序的问题
- 14. 在定义的以太网接口上发送数据包
- 15. 通过以太网发送UDP数据包到fpga spartan 3e
- 16. PHP如何发送原始HTTP数据包
- 17. 如何将wireshark数据包重新发送到原始文件?
- 18. 用原始数据发送Angular2表格
- 19. 如何使用python发送原始发布数据?
- 20. 发送原始发布数据
- 21. 在Unity3D中使用网络对象发送原始数据
- 22. 如何在C#中发送数据包?
- 23. 在Winsock中实现原始以太网
- 24. 原始以太网的Java库
- 25. 是否可以从Android向Arduino以太网盾发送UDP/TCP数据包?
- 26. 使用Go语言发送带有以太网报头的Raw数据包
- 27. 如何使用socket.io发送原始数据
- 28. 如何使用Java将原始数据发送到打印机
- 29. 如何使用boost :: asio发送原始二进制数据
- 30. 如何使用cURL发送原始POST数据? (PHP)
你有什么期望在另一端发生的呢?原始呢?制定你自己的协议?我们都用什么错,你的硬件知道如何路由,你的局域网管理员知道如何支持? – 2010-10-19 00:38:28
我只是想发送以太网数据包与一些更改字段像MAC地址 – Saint 2010-10-19 09:57:47
SharpPcap和Pcap.net是要走的路。您需要一个WinPcap包装器框架,因为出于安全原因,Windows不允许访问较低级别的协议标头。 WinPcap提供了自己的网络驱动程序,允许您绕过该限制。 – 2010-11-10 08:44:16