向网络内的计算机发送 UDP 消息

向网络内的计算机发送 UDP 消息

假设我有网络内一台计算机的 ip 和 mac 地址,我想向他发送一条 UDP 消息。通过将发送消息的 mac 和 ip 地址初始化为给定值,当网络路由器收到该消息时,他应该将其传递给具有相同 mac 地址的计算机...对吗?

我之所以问这个问题,是因为我编写的程序似乎无法处理这个限制。当它在同一个网络上时,它运行良好,但除此之外......什么都没有。

谢谢

答案1

如果您正在创建一个打开 UDP 套接字并向特定目标发送流量的应用程序,那么您唯一需要关注的就是 IP 地址。如果您的侦听器在第 2 层工作。即当两个系统位于同一子网时,那么当您移动到第 3 层时,只要您的网络设置正确,它应该以完全相同的方式工作。如果失败,请尝试使用您知道可以正常工作的东西来测试它。有很多诊断应用程序,但最简单的可能是网猫,安装并尝试这个:

在目标系统上:

nc -l -u -p 1234 

在源系统上

nc -u -p 1234

将端口号更改为您用于应用程序的端口号,并且如果您的第三层网络设置正确并且没有阻止该端口上的 UDP,那么您应该能够看到在源上键入的任何内容出现在目标控制台上。

如果您将 MAC 地址嵌入有效负载中,那么这是一回事,但以太网帧中嵌入的源(和目标)MAC 地址将被路由器更改,这就是它的工作原理。如果您的应用程序希望它们在对话的两端保持不变,那么它将失败,但一般来说,您不应该深入研究网络堆栈。您使用什么来构建它?

答案2

你有两种情况:

1-如果您将数据包发送到同一子网内的主机,则会使用目标机器的 MAC 和 IP 地址直接将其发送给该主机。

2- 如果您要将其发送到另一个子网中的主机,则应将其发送到您的路由器。 因此,目标 MAC 将是路由器的 MAC,而目标 IP 将是最终目标的 MAC。

通过检查 IP 和子网掩码,您可以知道哪一个是您的情况。

答案3

如果您的计算机位于同一子网中,则无需路由器即可进行通信。如果您跑到路由器,路由器会将源 MAC 地址更改为路由器 MAC。当路由器收到数据包时,它会改回内部 MAC。

相关内容