2008-11-14 10 views
10

Próbuję napisać małą aplikację Java do odczytu zawartości pliku pcap (z Wireshark) i odtwarzać dane z powrotem w sieci na skrzynce linuksowej. Plik będzie zawierał tylko pakiety emisji UDP, więc moja aplikacja potrzebuje tylko znacznika czasu, numeru portu i danych z pakietu, aby zrobić to, czego potrzebuję. Mój problem polega na tym, że aplikacja, którą próbuję przetestować za pomocą tego kodu, nasłuchuje emisji IPv4 UDP w systemie Windows. Moja aplikacja testowa ciągle otwiera gniazdo IPv6, aby wysłać dane.Używanie Java 6, w systemie Linux, w jaki sposób mogę się upewnić, że korzystam z gniazda ipv4?

Używam netstat -a -u -p do określenia, czy gniazdo jest gniazdem udp6. W oknach wiem, że tak nie jest.

Jaki jest najprostszy lub najlepszy sposób wymuszenia testowej aplikacji na Linuksie w Javie, aby zamiast tego otworzyć gniazdo udp lub udp4? Nie chcę być zmuszany do podania adresu sieciowego IPv4 za każdym razem. Chcę móc przenieść ten kod na inną maszynę bez konieczności pamiętania, że ​​jest to konfiguracja, która wymaga zmiany.

Odpowiedz

17

Dodaj -Djava.net.preferIPv4Stack = true do właściwości środowiska wykonawczego aplikacji Java.

+3

Czy nie uważasz, że posiadanie "sigblock" w twojej odpowiedzi jest trochę za dużo? Twoje imię jest w końcu w prawym dolnym rogu odpowiedzi, klikalne i wszystko ... – unwind

+0

Jak to zrobić w systemie Android? – user239558

3

Również można użyć tego polecenia (jako root) i nie trzeba będzie dodać -Djava.net.preferIPv4Stack = true parametru w każdej aplikacji Java:

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

Jeśli chcesz zachować tę konfigurację na zawsze możesz napisać to w jakimś początkowym skrypcie.

Powiązane problemy