从C中的IP获取MAC地址

Pen*_*ang 2 c sockets arp

当我的用户提供本地和远程 IP:Port 对时,我需要提供一个组装 UDP 数据包的函数。我有一个以太网卡 API,它为我发送一个以太网帧,我是否必须填充一个包含 MAC 地址、IP 和 UDP的完整以太网帧

问题:给定互联网上的一个IPV4地址,如何找出该IP对应的MAC地址,以便填入以太网帧头。我如何使用 C 从路由器的 ARP 表中查找它。我是否应该向我的路由器发送一个 ARP 数据包(我也不知道该怎么做)。

当我调用UDP sendto()时,以太网帧中的MAC地址是谁填写的?这是如何实现的?

Gre*_*ill 5

简短的回答是:你不能。

MAC 地址仅在本地网络上有意义。无法询问远程 IPv4 端点(不在您的网络上)其 MAC 地址是什么。如果要将 UDP 数据包发送到远程端点,请使用操作系统套接字接口发送到该 IPv4 地址。它将处理细节。

根据您在下面的评论,如果您有发送以太网帧的接口,那么您将需要查找本地 IPv4 网关地址的 MAC 地址(通过发送 ARP 请求)。网关的 MAC 地址是您放入以太网帧的内容。目的端点的 MAC 地址不在以太网帧中。

  • @PengZhang:操作系统套接字层从 ARP 表中填写 MAC 地址(如果存在)。如果不是,则套接字层向网络发送 ARP 请求,以请求网关 IPv4 地址的 MAC 地址。然后它使用网关的 MAC 地址发送包含 UDP 数据包的以太网帧。 (2认同)