如何从Android应用程序将UDP数据包发送到MAC地址?

时间:2016-05-10 01:45:04

标签: network-programming android-networking

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

2 个答案:

答案 0 :(得分:2)

简短的回答是否定的。建立网络stack以使硬件地址能够在OS的媒体层中寻址,其中仅具有与传输层公开的应用程序的定义接口。您需要使用低级操作系统。看起来您正试图在Java中进行此调用,并且您很可能无法实现此目标。

答案 1 :(得分:2)

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

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

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