【问题标题】:how to broadcast ARP packet in C#如何在 C# 中广播 ARP 数据包
【发布时间】:2010-07-14 10:07:48
【问题描述】:

我想通过 C# 发送 ARP 数据包。 我不知道如何在 C# 中形成 ARP 数据包(格式)。有人可以帮忙吗? 加上如何发送arp数据包或广播它。

非常感谢任何示例代码。 提前致谢。

【问题讨论】:

    标签: c# arp


    【解决方案1】:

    这是您可能感兴趣的库:http://www.beesync.com/packetx/docs/html/index.html

    还有来自 send.cs 文件的 Snippit。

    // Get adapter hardware address and IP address
      Adapter oAdapter = (Adapter)oPktX.Adapter;
      string sHWAddr = oAdapter.HWAddress;
      string sIPAddr = oAdapter.NetIP;
      string sIPMask = oAdapter.NetMask;
      Console.WriteLine("MAC Addr = " + sHWAddr);
      Console.WriteLine("IP  Addr = " + sIPAddr);
    
      // Send ARP request for this IP address
      string sIPReso = "11.12.13.14";
      char [] aDelimiter = {'.'};
      string[] aIPReso = sIPReso.Split(aDelimiter, 4);
      string[] aIPAddr = sIPAddr.Split(aDelimiter, 4);
    
      // Build ARP packet
      Object[] oPacket = new Object[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
        Convert.ToByte("0x" + sHWAddr.Substring(0,2), 16),
        Convert.ToByte("0x" + sHWAddr.Substring(2,2), 16),
        Convert.ToByte("0x" + sHWAddr.Substring(4,2), 16),
        Convert.ToByte("0x" + sHWAddr.Substring(6,2), 16),
        Convert.ToByte("0x" + sHWAddr.Substring(8,2), 16),
        Convert.ToByte("0x" + sHWAddr.Substring(10,2), 16),
        0x08, 0x06, 0x00, 0x01,
        0x08, 0x00, 0x06, 0x04, 0x00, 0x01,
        Convert.ToByte("0x" + sHWAddr.Substring(0,2), 16),
        Convert.ToByte("0x" + sHWAddr.Substring(2,2), 16),
        Convert.ToByte("0x" + sHWAddr.Substring(4,2), 16),
        Convert.ToByte("0x" + sHWAddr.Substring(6,2), 16),
        Convert.ToByte("0x" + sHWAddr.Substring(8,2), 16),
        Convert.ToByte("0x" + sHWAddr.Substring(10,2), 16),
        Convert.ToByte(aIPAddr[0], 10),
        Convert.ToByte(aIPAddr[1], 10),
        Convert.ToByte(aIPAddr[2], 10),
        Convert.ToByte(aIPAddr[3], 10),
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        Convert.ToByte(aIPReso[0], 10),
        Convert.ToByte(aIPReso[1], 10),
        Convert.ToByte(aIPReso[2], 10),
        Convert.ToByte(aIPReso[3], 10),
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
    
      // Send 100 ARP requests      
      oAdapter.SendPacket(oPacket, 100);
    

    编辑:

    最好的方法是使用 WinPCap 库,现在它们正式使用 C 而不是 C#,但如果您已安装 winpcap,您可以导入 wpcap.ddl,以下是您可能想要查看的其他一些资源:

    http://geekswithblogs.net/dotnetnomad/archive/2008/01/31/119140.aspx

    http://bytes.com/topic/c-sharp/answers/278941-how-wrap-winpcap

    这是一个带有源代码的 GUI 嗅探器:

    http://www.codeproject.com/KB/IP/dotnetwinpcap.aspx

    【讨论】:

    • 谢谢,但 ARP 标头格式不正确,而且我不想使用第三方,此代码给出错误“无法识别的格式”请帮助解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 2016-09-17
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    • 2014-03-04
    相关资源
    最近更新 更多