Gibt es eine Möglichkeit, UDP-Pakete an eine Netzwerk-MAC-Adresse zu senden? Weder DatagramSocket noch DatagramPacket scheint einen Mechanismus zu haben, dies zu tun.Wie sende ich UDP-Pakete von einer Android-App an eine MAC-Adresse?
Antwort
Aufgrund des geschichteten Netzwerkstapels besteht die erste Antwort darin, dass Sie keine UDP-Nachricht an eine MAC-Adresse senden können. Meine Anweisung bedeutet, dass Sie keine Möglichkeit haben, eine MAC-Adresse in einem UDP-Datagrammfeld festzulegen. Sie können ein UDP-Datagramm an eine IP-Adresse und einen Port senden. Diese IP-Adresse kann Unicast, Multicast oder Broadcast sein.
Wenn Sie ein UDP-Datagramm an eine bestimmte MAC-Adresse senden möchten, müssen Sie eine komplexere Lösung implementieren (DHCP ist ein Beispiel für eine komplexere Lösung). Es gibt verschiedene Strategien, die Sie anwenden können:
- Wenn Sie nur ein Datagramm an eine MAC-Adresse müssen senden, ohne dass Datagramm von der NIC empfangen hat, und zu wissen, dass die MAC-Adresse, zuerst müssen Sie eine Schicht senden 2 Frame zu dieser MAC-Adresse (ein Layer-2-Protokoll ermöglicht das Einstellen einer MAC-Adresse). Sie können ein Protokoll implementieren, das diese MAC-Adressrahmen abgehört und in der Lage ist, eine Antwort zurückzusenden, die Ihnen die entsprechende IP-Adresse liefert. RARP ist ein Protokoll, mit dem Sie eine IP mit der MAC-Adresse
- erhalten können Sie können Ihr Protokoll, das eine Multicast-Gruppe verwendet, implementieren. Von Ihrem PC aus senden Sie eine Multicast-Nachricht mit der MAC-Adresse, auf die Sie ausgerichtet sind. Alle Knoten (Anwendungen in Knoten), die diese Multicast-Gruppe abonniert haben, empfangen diese Nachricht. Derjenige mit der gezielten MAC-Adresse kann antworten. Sobald es antwortet, haben Sie seine IP-Adresse und können ein Unicast-UDP-Datagramm senden.
Vielen Dank für die Aufklärung. Ich habe über rohe Sockets gelesen, die UDP-Pakete an MAC-Adressen senden. Ich denke, es ist unmöglich, es mit Java für Android zu tun. – Hong
Die kurze Antwort ist nein. Die Netzwerkverbindung stack ist so eingerichtet, dass die Hardwareadresse in der Medienschicht des Betriebssystems adressierbar ist und nur eine definierte Schnittstelle mit der Transportschicht besteht, die der Anwendung ausgesetzt ist. Sie müssten das Low-Level-Betriebssystem anzapfen. Es sieht so aus, als ob Sie versuchen, diesen Aufruf innerhalb von Java auszuführen, und es ist sehr unwahrscheinlich, dass Sie dies erreichen können.
Sie nicht. Warum denkst du, dass du das brauchst? – EJP
@EJP Wie ich weiß, fragen DHCP-Clients manchmal nach Unicast-Antworten vom DHCP-Server, bevor sie IP-Adressen erhalten, indem sie das Broadcast-Flag auf 0 setzen. DHCP-Server sollen Antworten an ihre MAC-Adressen in ihren DISCOVER-Nachrichten senden. Liebe, deine Erklärung darüber zu hören. – Hong