【问题标题】:How send raw ethernet packet with C#? [closed]如何使用 C# 发送原始以太网数据包? [关闭]
【发布时间】:2011-04-27 05:07:54
【问题描述】:

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

【问题讨论】:

  • 您希望在另一端发生什么?也生的?制定自己的协议?我们都使用的有什么问题,您的硬件知道如何路由,您的 LAN 管理员知道如何支持?
  • 我只想发送带有一些更改字段(如 MAC 地址)的以太网数据包
  • SharpPcap 和 Pcap.net 是要走的路。您需要一个 WinPcap 包装框架,因为出于“安全原因”,Windows 不允许访问较低级别的协议标头。 WinPcap 提供了自己的网络驱动程序,允许您绕过该限制。

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


【解决方案1】:

根据 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

【讨论】:

  • 我认为从 CodeProject 发送原始以太网数据包会对我有所帮助。顺便说一句,我想这是我被发现发送以太网数据包的唯一方法,例如通过 C# 更改的 MAC 地址。
  • 原始以太网操作非常低级。要以良好的水平完成任务,您当然需要一些有关网络驱动程序接口规范的知识并了解设备驱动程序(及其 API)。不要跳过它。单独使用 C# 并不能让您充分发挥这项任务。
  • 我找到了可能更好的解决方案——类似于 SharpPcap。它是pcapdotnet.codeplex.com - WinPcap 的 .NET 包装器。现在我可以随心所欲地修改我的数据包。谢谢:)
  • 欢迎 :) 很高兴看到您为您的任务提供了很好的解决方案。
  • @NickMartyshchenko 我必须安装 winpcap 才能使用 pcap.net 吗?
【解决方案2】:

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

【讨论】:

    【解决方案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);
    

    【讨论】:

    猜你喜欢
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 2014-03-10
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    相关资源
    最近更新 更多