我正在写一个应用程序,将使用数据包 SharpPcap.

然而,由于我是构建该数据包在我自己的并且只知道目的地的IP地址,我已确定的物理地址的下一跳。我可以随时发送平的远程 IP地址, ,嗅,并得到的 MAC地址 从闻包。然而,我希望有一个小错综复杂的方式这样做 C#.

显然,得到下一跳的IP地址也将是非常有帮助的,因为然后我就可以使用SendArp确定其MAC地址。

让路由表将做的事。我将如何得到使用的代码?

有帮助吗?

解决方案

我有一些麻烦与WMI(似乎一个不能在Win32_IP4RouteTable一个接口索引之间与实际设备相关联; MSDN文档是错误的,以及其它更多的hackish技术不能在某些计算机)。

所以,我选择使用的非托管 GetBestRoute ,这实际上为我节省了很多时间,因为它允许Windows做自己的路由决定,并返回下一跳的IP地址和网卡的标识,导致该地址。它也比对WMI运行查询快了不少。

然后,您可以寻找通过的 GetAdaptersInfo

希望它可以帮助...

其他提示

物理地址由地址解析协议 - 只是发的 ARP Reuest 的与IP地址来解决。

如果目的地不在本地网络中,数据包必须被发送到标准网关和一个必须执行的ARP请求的标准网关。标准网关可以通过使用从 System.Net获得.NetworkInformation 命名空间。

 NetworkInterface.GetAllNetworkInterfaces()[0].GetIPProperties().GatewayAddresses

完全予以解决了办法就是执行命令"arp-a"和阅读和分析结果的命令(使用 ARP 高速缓存已经举办的Windows)。

否则,需要包括ARP在你的协议栈。这是你的系统本身的工作来找出发送的框架。或者最后,如果你不担心被低效率,可以将以太网络的目标为:FF:FF:FF:FF:FF:FF和洪水每个人都在同一个局域网,因为你。当一些反应或者你会得到一个分组,缓自己有适当的目的地。

就个人而言,如果你没有的洪水每个人的方法在我的网络,我会伤害你,但是这取决于你的情况这可能是一个相当容易破解。但是,做一个100%完整堆的落实是相当复杂,因为有很多边缘的情况下,应以及支持(诸如装卸代理ARP,免费ARP,等等)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top