2016-05-10 30 views
1

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

+1

他们没有。你为什么认为你需要这个? – EJP

+0

@EJP根据我的理解,DHCP客户端有时会在DHCP服务器获取IP地址之前,通过将广播标志设置为0来请求单播响应。DHCP服务器应该将响应发送到其在DISCOVER消息中传送的MAC地址。喜欢听到你对此的解释。 – Hong

回答

1

由于分层网络堆栈,第一个响应是您无法将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数据报。
+0

非常感谢您的澄清。我已经读过关于将UDP数据包发送到MAC地址的原始套接字。我猜这是不可能用Java for Android来完成的。 – Hong

1

简短的回答是否定的。网络stack被设置为使硬件地址在OS的媒体层中可寻址,仅具有暴露给应用的传输层的定义接口。您需要使用低级别操作系统。看起来你正在尝试在Java中进行这种调用,而且你很难完成这个任务。

相关问题