代码之家  ›  专栏  ›  技术社区  ›  r0u1i

确定C中的下一个跃点MAC地址#

  •  0
  • r0u1i  · 技术社区  · 16 年前

    我正在编写一个应用程序,它使用 SharpPcap .

    但是,由于我自己构建数据包,并且只知道目的地的IP地址,所以我必须确定下一个跃点的物理地址。我总是可以给遥控器发送一个ping信号 IP address 闻一闻,然后 MAC address 从嗅探到的包中。不过,我希望在 C# .

    显然,获取下一个跃点的IP地址也是非常有用的,因为我可以使用sendarp来确定它的MAC地址。

    获取路由表就行了。我将如何使用代码获得它?

    3 回复  |  直到 11 年前
        1
  •  2
  •   r0u1i    16 年前

    我在使用WMI时遇到了一些问题(似乎无法将win32 ip4routeTable中的接口索引与实际设备相关联;msdn文档错误,某些计算机上的其他黑客技术失败)。

    所以,我选择使用非托管 GetBestRoute 这实际上节省了我很多时间,因为它让Windows自己做路由决定,并返回下一个跃点的IP地址和指向该地址的NIC标识符。它也比针对WMI运行查询快得多。

    然后,通过在返回的列表中查找该标识符,可以找到NIC本身。 GetAdaptersInfo .

    希望有帮助…

        2
  •  0
  •   Daniel Brückner    16 年前

    物理地址由 Address Resolution Protocol -只发送一个 ARP-鲁斯特 要解析的IP地址。

    如果目的地不在本地网络中,则必须将数据包发送到标准网关,并且必须对标准网关执行ARP请求。标准网关可通过以下方法获得: System.Net.NetworkInformation 命名空间。

     NetworkInterface.GetAllNetworkInterfaces()[0].GetIPProperties().GatewayAddresses
    
        3
  •  0
  •   Peter Mortensen Pieter Jan Bonestroo    11 年前

    完全黑客的方法是运行命令“arp-a”,读取和解析命令的结果(使用 ARP 缓存已由Windows保存)。

    否则,您需要在协议栈中包含arp。这就是系统本身的工作方式,以确定将帧发送到何处。最后,如果您不担心效率低下,可以将以太网目的地设置为:ff:ff:ff:ff:ff:ff:ff,并将所有人都淹没在同一个局域网中。当有什么响应或者你得到一个包时,你自己缓存它以获得正确的目的地MAC地址。

    就个人而言,如果你在我的网络上对所有人都进行攻击,我会伤害你,但根据你的情况,这可能是一个相当容易的攻击。但是,执行100%全栈实现相当复杂,因为有许多边缘情况需要很好地支持(例如处理代理ARP、免费的ARP等)。

    推荐文章