如何从 Android 应用向 MAC 地址发送 UDP 数据包?

How to send UDP packets to a MAC address from an Android app?

有没有办法将 UDP 数据包发送到网络 MAC 地址? DatagramSocket nor DatagramPacket 似乎都没有这样做的机制。

简短的回答是否定的。网络 stack 设置为硬件地址可在 OS 的媒体层中寻址,只有定义的接口与传输层公开给应用程序。您需要利用低级别 OS。看起来您正试图在 Java 内进行此调用,您不太可能完成此操作。

由于分层网络堆栈,第一个响应是您无法将 UDP 消息发送到 MAC 地址。我的陈述意味着您无法在 UDP 数据报字段中设置 MAC 地址。您可以将 UDP 数据报发送到 IP 地址和端口。此 IP 地址可以是单播、多播或广播。

如果您打算将 UDP 数据报发送到特定的 MAC 地址,则需要实施更复杂的解决方案(DHCP 是更复杂解决方案的一个示例)。您可以应用不同的策略:

  • 如果您只需要将数据报发送到 MAC 地址而没有从该 NIC 收到任何数据报,并且知道 MAC 地址,则首先您需要发送第 2 层帧到 MAC 地址(第 2 层协议允许您设置 MAC 地址)。您可以实施一个协议来侦听该 MAC 地址帧,并能够发回响应,为您提供相应的 IP 地址。 RARP 是一种协议,可让您在给定 MAC 地址
  • 的情况下获得 IP
  • 您可以实施使用多播组的协议。从您的 PC 发送一条多播消息,其中包含您要定位的 MAC 地址。订阅该多播组的所有节点(节点中的应用程序)都会收到该消息。具有目标 MAC 地址的人可以响应。一旦它响应,您就拥有了它的 IP 地址并可以发送单播 UDP 数据报。