2009-02-26 7 views
5

J'utilise des sockets TCP pour communiquer des données entre un programme de serveur et client à l'aide d'un numéro de port spécifique sur le même ordinateur (localhost).Java TCP Socket reniflage

je besoin d'un logiciel qui permet de capturer les données envoyées/reçues par cette prise?

(ou)

Quelle est la façon la plus simple de renifler des paquets d'un port spécifié à Java?

Répondre

7

Je suggère d'utiliser Wireshark. Il est facile à utiliser et fonctionne sur de nombreuses plateformes.

http://www.wireshark.org/

+0

Malheureusement, cela ne fonctionnera pas lorsque client et serveur sur la même machine. –

+1

Il le fera. Sélectionnez simplement l'interface de bouclage pour la capture. –

+1

http://wiki.wireshark.org/CaptureSetup/Loopback (section 'Alternatives') - une alternative consiste à ajouter une route à votre machine locale passant par la passerelle réseau – mjn

1

La façon la plus simple est de remplacer le InputStream/OutputStream d'une prise dans l'un des programmes avec une mise en œuvre de procuration, soit imprimés/journaux ou « t-shirts » à l'original et une impression/flux connecter .

Mais il y a beaucoup de renifleurs là-bas si vous voulez vraiment obtenir en désordre.

1

Si vous ne me dérange pas descendre et sale avec la ligne de commande, vous pouvez essayer netcat. Il vous permettra d'écouter sur un port et de vider la sortie vers un fichier si vous le souhaitez.
Vous pouvez également lui faire envoyer de fausses données et enregistrer la réponse.

Je l'utilise souvent comme proxy HTTP faire semblant (et configurer Firefox pour l'utiliser) pour découvrir ce qui est envoyé sur le fil.

4

Si vous êtes à un certain codage (et pas seulement en cours d'exécution Wireshark/tcpdump) alors vous avez peu de choix. (?) Si vous voulez coller à Java, la seule possibilité d'utiliser des raw sockets est via JNI et il y a peu de bibliothèques qui peuvent aider, par exemple:

  • jNetPcap - wrapper autour des bibliothèques natives libpcap/WinPcap, exposer toutes leurs fonctions et structures
  • RockSaw - API pour l'utilisation raw sockets
0

vous pouvez utiliser tcpdump qui vous donne une variété d'options. Vous enregistrez la capture dans un fichier .pcap avec l'option -w et lorsque vous avez terminé, vous ouvrez ce fichier avec wireshark. L'avantage de cette façon est que vous pouvez capturer un taux élevé de paquets par seconde sans affecter les performances globales de votre PC (même si c'est bas de gamme).

1

Tcpdump peut également être utilisé directement, si le volume de trafic n'est pas élevé, ce qui évite d'avoir à utiliser wireshark. Juste quelque chose comme

tcpdump -ni lo0 port 1234 

devrait être tout ce dont vous avez besoin (lo0 est l'interface loopback sur tous les systèmes Unix/Linux; aussi changer le numéro de port bien sûr).

1

exécuter votre programme comme ceci:

java -Djavax.net.debug=all helloworld.java

Le commutateur est entièrement documenté sur les Oracle JSSE page

Plus:

  • beaucoup plus simple que les autres solutions proposées (ne nécessite aucun logiciel externe Peut également décrypter/vider la connectivité TLS/SSL.
  • ns :)

Moins:

  • Cela ne fonctionnera si vous utilisez des classes de java.net.* par exemple OutputStream ou InputStream Cela ne fonctionnera pas si vous utilisez des sockets raw. Ceci est documenté dans le lien.
  • Croyez que cela ne fonctionne que sur Oracle JDK.
Questions connexes