当我的用户提供本地和远程IP:端口对时,我需要提供一个汇编UDP数据包的功能。我有以太网卡API 为我发送以太网帧,我是否必须填写一个完整的以太网帧,其中包含MAC地址,IP和UDP。
问题:考虑到互联网上的IPV4地址,如何找出IP对应的MAC地址,以便我可以将其填入以太网帧头。如何使用C从路由器的ARP表中查找它。我应该向我的路由器发送一个ARP数据包(我不知道该怎么做)。
当我调用UDP sendto()时,谁填写以太网帧中的MAC地址?这是如何实现的?
答案 0 :(得分:4)
简短的回答是:你不能。
MAC地址仅在本地网络上有意义。无法询问远程IPv4端点(不在您的网络上),其MAC地址是什么。如果要将UDP数据包发送到远程端点,请使用OS套接字接口发送到该IPv4地址。它会处理细节。
根据您的评论,如果您有一个发送以太网帧的接口,那么您需要查找本地IPv4网关地址的MAC地址(通过发送ARP请求)。网关的MAC地址是您放入以太网帧的地址。目标端点的MAC地址不进入以太网帧。
答案 1 :(得分:0)
您的操作系统会执行此操作。怎么样?: 操作系统将向您发送邮件的主机或主机之间的路由器填充macaddress。
在本地网络中发送邮件时,macadress是什么
那是主机的计算机macadress。如何仅从ipaddress获取macaddress?
您将ipadress广播到网络以获取macadress。使用您的ipadress将ARP数据包发送到macadress FF:FF:FF:FF:FF:FF并等待响应。您网络上的每个人都会看到您的数据包。除了具有目标ip的计算机外,其他任何人都忽略该数据包。他将使用macaddress进行响应。看一下wireshharp如何构造ARP数据包。为了提高速度,将macaddress和ipaddress一起缓存以备后用非常重要。
在网络外发送/接收内容时,MAC地址是什么
您无法从网络外部的计算机获取macaddress。而且没有理由这样做。如果在本地网络外部发送数据包,则MAC地址是NAT路由器的地址,也是网络外部的ipadress的地址。如何获取NAT路由器的MAC地址,您只需发送带有路由器IP地址的ARP数据包即可。在响应中包含NAT mac地址。如果您具有路由器的macaddress,则可以在网络外部发送数据包。然后,NAT路由器将通过路由器的WAN端将数据包发送出去。