Bonjour tout le monde
je dois réaliser une application réseaux en java sous ubuntu où il y'a une partie qui doit détécté les points d'accés adjacent au terminal en cours pour ceci il faut tout d'abord détécter les networkinterface qui existe sur le pc pour que je puisse ouvrir une et l'utiliser pour la capture des packets .
le probléme c'est quand je met :
NetworkInterface[] devices = JpcapCaptor.getDeviceList(); System.out.println("nbr de device :" + devices.length);
j'obtiens :
nbr de device : 0
pourtant j'ai eth0 et eth1 (j'ai vérifié à l'aide du java.net.NetworkInterface)
je ne sais pas ou est le probléme et d'ou provient t'il ?
si quelqu'un peut m'aider je lui serais reconnaissante
Et si tu lances ton programme sous root, c'est pareil ?
ok j vais essayer
merci
j connais pas le mot de pass du root sous ubuntu
mais je fais dans un terminal : sudo su et je tape le mot de pass de ma session il donne root@emmi..
je fais java test.class ca donne :
Exception in thread "main" java.lang.NoClassDefFoundError: jpcap.JpcapCaptor
pourtant j'ai installé je jpcap j'ai ajouté le jar au librairie en eclipce
et quand je compile sous eclipce aucune erreur n'est détéctée
!!!
En eclipse comme tu dis.
Mais quand tu essaies de lancer toon application en dehors d'Eclipse (root ou pas root) il faut évidemment que le jar soit dans le CLASSPATH, ce qui n'est pas le cas pour l'instant.
Configure ton CLASPPATH et ré-essaie
ou lance comme ceci:
java -cp .:$CLASSPATH:le_repertoire_du_jar/jpcap.jar test
(test et non test.class ...)
ok je le ferrais tout de suite :wink:
java -cp .:$CLASSPATH:usr/java/packages/lib/ext/jpcap.jar Mesure
Exception in thread "main" java.lang.NoClassDefFoundError: jpcap.JpcapCaptor
at Mesure.scanner(Mesure.java:44)
at Mesure.run(Mesure.java:17)
at Mesure.(Mesure.java:11)
at Mesure.main(Mesure.java:75)
voila le résultat
:(
bah je vais explique mieux ce que je veux aujuste
une application qui capture des packets des réseaux voisin pour en extraire juste les adresses mac et la puissance d'emission
alors est ce qu'il y'a autre solution que cette api par exemple des commandes unix que je pourrais executer sous java
au moin :(
bah j'essaye de trouvez une solution rapide car je commence ç déséspérer
:(
Et bien quoi :!:
Faut lire les messages d'erreurs.
java.lang.NoClassDefFoundError
Comme le nom l'indique, la classe n'a toujours pas été trouvée. Parce que (forcément) tu t'es trompée avec ton CLASSPATH. Tiens, à moins que tu ais un répertoire usr sous home, moi j'aurais plutôt donné comme commande:java -cp .:$CLASSPATH:/usr/java/packages/lib/ext/jpcap.jar Mesure
Avec :/usr et non :usr donc...
Mieux vaut tard que jamais :evil:
Je dois te gronder là. Tu m'as demandé de t'aider en privé sans même prendre le temps de m'écrire une question complète. :evil:
C'est d'ailleurs, en dehors d'évidents problèmes de temps, une des raisons pour lesquelles je refuse toute aide en privé depuis un bon moment maintenant.
Bref...
Houlà là, rien que ça ...
D'abord ce que tu veux faire, c'est de la programmation système. C'est quelque chose qu'il est contre nature d'entreprendre avec ce #### Java à la ####
Normalement la librairie C libpcap fait ce que tu veux.
Quant à savoir qui jpcap qui est sans doute un wrapper autour de libpcap le fait aussi. Je ne sais pas. Faut essayer.
Encore ce #### Java. ca tourne à l'idée fixe. :evil:
b=Bon tu peux faire avec un ping suivi d'un arp (faut le ping avant le arp hein)
Soit une des machines de mon réseau. Elle s'appelle lune.
Je fais
puis
Mais le mieux est sans doute dans un premier d'essayer de voir ce que donne jpcap. Sans se gourrer dans le CLASSPATH hein....
:oops:
a vous ordre chef
maintenant pour la premiére suggestion :
java -cp .:$CLASSPATH:/usr/java/packages/lib/ext/jpcap.jar Mesure
entrer
java.lang.NullPointerException
<>
Exception in thread "main" java.lang.NullPointerException
<>
la fonction qui fait prob :
:cry:
maintenant pour la 2éme suggestion
le ping avant le arp :wink:
je vois que tu donne le nom de la machine moi je les ignore n'importe quel point daccée wifi sur le réseaux je dois l détécter tu vois
sauf s'il y a une méthode pour les connaitre
Et bien au moins le programme a démarré :lol:
Et comment tu sais que c'est cette fonction qui pose problème, puisque tu n'as pas de trace de pile ? (no stacktrace available)
Corrige donc ton code pour supprimer cette référence nulle.
Faite à ta demande...
Décidément... :evil:
Ah maintenant c'est du wifi... :evil:
Bon déjà ce que tu risques de récupérer c'est l'adresse MAC de la borne et pas forcément celle de l'interface qui est au delà...
Enfin bon je te laisse te débrouiller.
Parce que chaque fois que tu postes une question, la donne du problème est changée, et mon temps est compté.
Si tu regardes ta première question, tu demandais de détecter les interfaces réseau de ton PC. On en est bien loin maintenant :evil:
Mais au moins tu auras appris une chose: A ne pas prendre le temps une fois pour toutes d'expliquer ta question en détail, tu uses les patiences de ceux tentent la périlleuse aventure de t'aider sur un forum.
pardon
je suis vraiment désolée
mais le premiér prob que j'ai rencontré c'étais de trouver les interfaces réseaux sur mon pc une fois je me suis trouvé entrain de chercher une autre solution j'ai commencé a penser a toute l'application.
j'ai perdu le bou d fil
maintenant que j'ai fait un flash back je vois ce que tu veux dir
pardon
:cry:
pour ta question comment j'ai su que cette fonction pose prob et bien c'est parceque c'est la seul fonction que j'execute et je fais un affichage a l'entrée de la fonction une fois le message "Entrée" est affiché l'erreur apparrait tout de suite et c'est toujour le JpcapCaptor.getDeviceList()
Et main, tu ne l'exécutes pas peut être :?: :twisted: :lol:
Et peut être que ce tout de suite veut dire après être sorti de la fonction, donc plus loin dans le programme.
Alors peut être bien JpcapCaptor.getDeviceList(); retourne effectivement null.
Mais alors dans ce cas comme tu expliques que quand tu ne pouvais pas trouver d'interfaces du tout (ta toute première question) JpcapCaptor.getDeviceList(); ne renvoyait pas null mais un tableau de longueur 0. C'est bien ce que tu disais en tout cas.
euh oui
quand j'execute sous eclipce il donne nbr d'interface = 0
mais avec la méthode que tu m'a dis il donne l'erreur
et mon programme c'est :
tu vois ! donc une fois le "entrer" est afficher l'erreur apparait
je me suis dis que peut être le devices=null donc le devices.length va donner une erreur alors j'ai fait un simple affichage :
le "OK" n'apparait pas dooonc
NetworkInterface[] devices = JpcapCaptor.getDeviceList();
pose prob
tu crois qu'il y a un prob en installationou qq chose comme ça?
Bonjour,
Ce que je vais te dire ne va pas forcément t'aider mais
au moins ca va éliminer une possiblité.
J'ai installé une librairie jpcap sur mon poste et j'ai éxécuté ton
code, il fonctionne bien et me trouve 3 interfaces.
Donc si le tien ne fonctionne pas normalement je pencherais pour
un problème d'installation.
La ou ca ne va pas t'aider c'est que je l'ai exécuté sous windows xp
avec ma jvm : (loin du ubuntu).
Je te laisse le lien du site su lequel j'ai récupéré ma librairie :
http://netresearch.ics.uci.edu/kfujii/jpcap/doc/install.html
Bonne chance
Je corrige mon post précédent, s'il t'as affiché 0 interfaces
ce n'est peut être pas un problème d'installation.
Je te fournis ceci qui fait partie de la faq du site que j'ai pointé sur
mon post précedent :
Q : I cannot obtain the list of network interfaces or cannot capture any packets. Why?
On Linux/UNIX, you need to become a super user by using 'su' command , or use 'sudo' command to run Jpcap-based applications.
J'espère que ca pourra t'aider.
moi aussi j'ai installé de ce site mais moi aussi je doute qu'il y'a un prob d'installation et j'ignore comment faire pour le régler
j'ai installé juste via le gestionnaire de paquets synaptiques et puis j'ai ajouté le jar au build path d'eclipce et j'ai fait export CLASSPATH="/usr/java/packages/lib/ext" comme il est indiqué sur le site
et bien je fais sudo su je tape le mot de passe de ma session pour avoir root@emmi....
et ca marche pas
:(
et
Si le Ok n'apparaît pas c'est que l'appel à JpcapCaptor.getDeviceList(); a carrément planté et non pas simplement retourné un pointeur null.
A mon avis, c'est la librairie native sur laquelle la librairie Java (JpCap) s'appuie qui a fait une faute de segmentation, ou quelque chose de ce genre, pour une raison à déterminer. Peut être une incompatibilité sur ta plate-forme, avec la glibc ou quelque chose d'autre. Par contre pourquoi ça le fait pas si tu n'es pas root ? Mystère...
Je vais essayer moi même sur un de mes Linux dès que j'aurais un moment (si j'ai un moment). Mais ce ne sera pas Ubuntu, mais Gentoo.
ok merci
de toute façon je ne cesserais pas de chercher jusqu'a ce que je trouve une solution a ce prob
merci encore une fois :wink:
Tu as bien vu ce que dit Niroken:
Tu dois être root
Je fais un essai. Je te tiens au courant
wé j' ai essayé sous root même prob
Bon alors voilà. J'ai fait un essai.
J'ai vu qu'il faut être root effectivement sinon on obtient un tableau vide.
Sous root pour essayer ton code j'ai donné la commande:
et ça m'a sorti:
Ce qui vu mon système me semble correct :)
Maintenant deux choses.
- j'ai utilisé la dernière version de jpcap et pour cela une jdk 1.6 est nécessaire. Si tu utilises la dernière version, tu dois donc aussi avoir une jdk 1.6
- second point et celui qui t'embêtes, je pense. Pour ma Gentoo j'ai du compiler jpcap depuis les sources, puisque je ne peux pas utiliser le package pour Debian/Ubuntu.
Et lors de cette compilation j'ai vu que libpcap DOIT être présente sur le système, ce qui est fort logique. Java ne sachant rien faire, faut bien qu'il demande à libpcap de le faire.
Et là je me suis dit: sois emmi n'a pas libpcap sur son système. Alors elle devra l'installer et ça va marcher. Ou bien elle là, mais il y a un problème de version. Alors elle devra compiler libjpcap.so elle même. Aucune difficulté. C'est expliqué comment faire dans doc/install.html de la distribution de jpcap. Et après quoi ça va marcher. ***SI*** je dis bien si la librairie libjpcap.so peut être vue par la JVM. Regarde comment j'ai fait avec ma commande ci-dessus.
Voilà :D
Enjoy comme on dit :D
je vais essayer tout de suite je veux pas soter de joie maintenant de peur d'une décéption
;)
et je suis sur que j'ai tout bien installé comme il est indiqué sur le tuto
Si tu fais comme je t'ai dis, ça va marcher. Tuto ou pas. D'ailleurs moi le tuto je l'ai pas regardé :)
Frédéric ca maaaaaaaaaaaaaaaaaaaaarche
t'es adorable adoraaaaaaaaable
tu sais ou étais le prob?
il ne prenais pas le jdk 1-6
j'ai cherché son chemain comme tu m a montré ettttttttttttttt ça marche imagineeeeeeee
ca marche :D :D :D :D :D :D :D :D :D :D :D
merci infiniment t'es mon héros :wink:
euuuh une petite question :oops:
sous eclipce j'ai ajouter le jdk-1.6.0
ca marche toujour pas
donc ce -Djava.library.path ?? comment le traduire sous eclipce
tu m comprend ?
parce que s'ils démarent mon apllication sous eclipce ca marche pas
tantpis pour eux ils ont un terminal non
l'important c'est que ça marche
merci beaucouuuuup
Tu devrais faire comme moi: utiliser un outil de développement sérieux: Emacs :!:
Bon sinon sous Eclipse, je crois me souvenir que tu dois créer une configuration de lancement (tu sais faire je pense). Et dans la configuration de la configuration de lancement tu vas dans l'onglet "Arguments" et dans "VM argument" tu mets:
-Djava.library.path=le_repertoire_qui_contient_libjpcap.so
ok merci beaucoup je ne sais pas quoi dire mon programme fonctionne a merveille
et c'est grace a toi et ta patiennnnnce :wink:
merci encore une fois
Tu peux dire que ton programme fonctionne à merveille ;)
Je sais pas si Flexx va être de ton avis :)
Bon je suis fatigué moi. Dodo maintenant :)