2008-11-14 5 views
10

J'essaye d'écrire une petite application java rapide pour lire le contenu d'un fichier pcap (de Wireshark) et lire les données sur le réseau sur une boîte de linux. Le fichier ne contient que des paquets de diffusion UDP, mon application n'a donc vraiment besoin que de l'horodatage, du numéro de port et des données du paquet pour faire ce dont j'ai besoin. Mon problème est que l'application que j'essaie de tester avec ce code écoute les diffusions IPv4 UDP sous Windows. Mon application de test continue d'ouvrir une socket IPv6 pour envoyer les données.En utilisant Java 6, sur linux, comment puis-je m'assurer d'utiliser une socket ipv4?

J'utilise netstat -a -u -p pour déterminer que le socket est un socket udp6. Sur les fenêtres, je sais que ce n'est pas le cas. Quel est le moyen le plus simple ou le meilleur pour forcer l'application de test sur Linux à ouvrir une socket udp ou udp4 à la place? Je ne veux pas être obligé de fournir l'adresse réseau ipv4 à chaque fois. Je veux être en mesure de déplacer ce code sur une autre machine sans avoir à se rappeler que leur configuration doit être modifiée.

Répondre

17

Ajoutez -Djava.net.preferIPv4Stack = true aux propriétés d'exécution de votre application Java.

+3

Ne pensez-vous pas que le fait d'avoir un "sigblock" dans votre réponse est un peu trop? Votre nom est, après tout, juste là dans le coin inférieur droit de votre réponse, cliquable et tout ... – unwind

+0

Comment cela peut-il être fait sur Android? – user239558

3

vous pouvez utiliser cette commande (en tant que root) et vous aurez pas besoin d'ajouter le -Djava.net.preferIPv4Stack = true paramètre dans toutes les applications java:

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

Si vous voulez garder cette configuration Pour toujours, vous pouvez l'écrire dans un script initial.

Questions connexes