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

3

1
他们不需要。你为什么认为你需要这个? - user207421
根据我的理解,DHCP客户端有时会在将广播标志设置为0之前向DHCP服务器请求单播响应以获取IP地址。 DHCP服务器应该向其DISCOVER消息中传递的MAC地址发送响应。很想听听您对此的阐述。 - Hong
2个回答

4
由于网络分层结构,首先需要说明的是您无法向MAC地址发送UDP消息。我的意思是在UDP数据报字段中没有任何设置MAC地址的方式。您可以将UDP数据报发送到IP地址和端口。该IP地址可以是单播、多播或广播。
如果您打算向特定的MAC地址发送UDP数据报,那么您需要实现更复杂的解决方案(如DHCP)。以下是您可以采用的不同策略:
- 如果您只需要向尚未从该NIC接收过任何数据报并知道该MAC地址的地址发送数据报,则首先需要向该MAC地址发送一个第2层帧(第2层协议允许您设置MAC地址)。您可以实现一个协议来侦听该MAC地址帧并能够发送响应以提供相应的IP地址。 RARP是一种协议,可让您根据MAC地址获取IP。 - 可以实现使用多播组的协议。从您的电脑发送一个包含您要定位的MAC地址的多播消息。所有订阅该多播组的节点(节点中的应用程序)都会接收到该消息。具有目标MAC地址的节点可以做出响应。一旦它响应,您就有了它的IP地址,并且可以发送单播UDP数据报。

非常感谢您的阐述。我已经了解到原始套接字可以发送UDP数据包到MAC地址。我猜在Android上使用Java做这件事是不可能的。 - Hong

1
短答案是否定的。网络堆栈的设置是为了让硬件地址在操作系统的媒体层中可寻址,只有定义接口与传输层暴露给应用程序。您需要接触底层操作系统。看起来您正在尝试在Java中进行此调用,但很可能无法实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接