2016-05-10 31 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中進行這種調用,而且你很難完成這個任務。

相關問題