2008-11-14 6 views
10

Ich versuche, eine kleine Java-Anwendung zu schreiben, um den Inhalt einer pcap-Datei (von Wireshark) zu lesen und die Daten im Netzwerk auf einer Linux-Box abzuspielen. Die Datei enthält nur UDP-Broadcast-Pakete, so dass meine Anwendung nur den Zeitstempel, die Portnummer und die Daten aus dem Paket benötigt, um das zu tun, was ich brauche. Mein Problem ist, dass die Anwendung, die ich mit diesem Code testen möchte, auf IPv4 UDP-Broadcasts unter Windows wartet. Meine Testanwendung öffnet weiterhin einen IPv6-Socket, um die Daten zu senden.Mit Java 6, unter Linux, wie kann ich sicherstellen, einen IPv4-Socket zu verwenden?

Ich verwende netstat -a -u -p, um festzustellen, dass der Socket ein Udp6-Socket ist. An Fenstern weiß ich es nicht.

Was ist der einfachste oder beste Weg, um die Test-App auf Linux in Java zu erzwingen, stattdessen ein Udp oder Udp4-Socket zu öffnen? Ich möchte nicht gezwungen werden, jedes Mal die IPv4-Netzwerkadresse anzugeben. Ich möchte in der Lage sein, diesen Code auf einen anderen Computer zu verschieben, ohne daran zu denken, dass es sich um eine Konfiguration handelt, die geändert werden muss.

Antwort

17

Fügen Sie -Djava.net.preferIPv4Stack = true zu den Laufzeiteigenschaften Ihrer Java-Anwendung hinzu.

+3

Fühlst du nicht, dass ein "sigblock" in deiner Antwort ein bisschen viel ist? Ihr Name ist schließlich genau dort in der unteren rechten Ecke Ihrer Antwort, anklickbar und alles ... – unwind

+0

Wie kann das unter Android gemacht werden? – user239558

3

Auch können Sie diesen Befehl (als root) verwenden und Sie werden nicht die -Djava.net.preferIPv4Stack = true Parameter in jeder Java-Anwendung hinzufügen müssen:

# echo 0 > /proc/sys/net/ipv6/bindv6only 

Wenn Sie diese Konfiguration beibehalten möchten Für immer können Sie es in ein erstes Skript schreiben.

Verwandte Themen