在本地网络之外发送数据包时,目标mac地址应设置为什么?

在本地网络之外发送数据包时,目标mac地址应设置为什么?,c,network-programming,sockets,C,Network Programming,Sockets,如果我在本地网络的机器上使用arp和arp,我会从它们那里得到mac地址。以同样的方式,我可以构造并发送ARP请求,并收集对这些机器的响应。这是因为我完全从scratchy构建原始数据包(允许欺骗每个可能的字段,包括mac地址,如果需要的话)。但是,当我在外部ip和主机(如google.com)上尝试arp或arp时,没有得到任何回复。向本地网络以外的目标发送数据包时,目标mac地址应设置为什么?我猜是路由器,因为那是传递它的东西。。。我说得对吗?ANSI C中有没有一种快速的方法来收集计算机正

如果我在本地网络的机器上使用arp和arp,我会从它们那里得到mac地址。以同样的方式,我可以构造并发送ARP请求,并收集对这些机器的响应。这是因为我完全从scratchy构建原始数据包(允许欺骗每个可能的字段,包括mac地址,如果需要的话)。但是,当我在外部ip和主机(如google.com)上尝试arp或arp时,没有得到任何回复。向本地网络以外的目标发送数据包时,目标mac地址应设置为什么?我猜是路由器,因为那是传递它的东西。。。我说得对吗?ANSI C中有没有一种快速的方法来收集计算机正在使用的路由器的mac地址?或者至少是IP,这样我可以向它发送ARP请求


Thanx提前

它应该设置为网关(假设该链路上有以太网…。

MAC操作仅限于直接连接到子网内的机器。因此,您应该将路由器的MAC地址用于子网外主机的数据包

有许多方法可以获得路由器的IP地址

  • 如果接口是静态配置的,则可以解析本地主机上的配置文件

  • 您可以查看您的计算平台是否具有允许您直接访问接口配置信息的API。这在静态和dhcp情况下都有效

  • 您可以编写套接字代码将ICMP消息发送到外部地址,然后解析传入的响应。它们将来自路由器。在这种情况下,堆栈将为您找到路由器


  • 是的,这是一个普通的以太网。我知道网关地址,但如果我要在另一台计算机上安装此应用程序,最好不必手动输入网关地址。ANSI C中是否有快速检索默认网关地址的功能?ANSI C中没有处理网络的功能。你必须使用特定于操作系统的东西。那么,您使用的是什么操作系统呢?ICMP方法似乎是一种明智的方法。感觉这应该适用于静态和dhcp情况,对吗?当应用程序启动时,将网关ip和arp存储到mac地址。它可以用于静态和DHCP。你甚至不需要ARP,因为数据包将从路由器转发,它的源MAC地址将是你正在寻找的。所以非常正确。。。这是一个非常简单的解决方案。塔克斯!当然,这不一定是因为1)传出数据包的路由器与传入数据包的路由器相同,或者2)在程序运行时路由器不会改变,或者3)所有目的地都应该使用相同的路由器。理想情况下,您每次都可以查阅路由表。@caf:有没有一种好的、快速的方法可以使用ANSI C编程实现这一点?