[résolu] JPcap sous ubuntu

emmi
[résolu] JPcap sous ubuntu

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
fredericmazue

Et si tu lances ton programme sous root, c'est pareil ?

emmi

ok j vais essayer
merci

emmi

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
!!!

fredericmazue

Quote:
pourtant j'ai installé je jpcap j'ai ajouté le jar au librairie en eclipce

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 ...)

emmi

ok je le ferrais tout de suite :wink:

emmi

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
:(

emmi

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
:(

fredericmazue

Quote:
voila le résultat

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...

fredericmazue

Quote:
bah je vais explique mieux ce que je veux aujuste

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...

Quote:

une application qui capture des packets des réseaux voisin pour en extraire juste les adresses mac et la puissance d'emission

Houlà là, rien que ça ...

Quote:
alors est ce qu'il y'a autre solution que cette api

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.

Quote:

par exemple des commandes unix que je pourrais executer sous java

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

ping lune
PING lune.at.localdomain (192.168.1.52) 56(84) bytes of data.
64 bytes from lune.at.localdomain (192.168.1.52): icmp_seq=1 ttl=64 time=4.45 ms
64 bytes from lune.at.localdomain (192.168.1.52): icmp_seq=2 ttl=64 time=0.155 ms

puis

 arp -a lune
lune.at.localdomain (192.168.1.52) at 00:02:44:4F:31:CF [ether] on eth1

Mais le mieux est sans doute dans un premier d'essayer de voir ce que donne jpcap. Sans se gourrer dans le CLASSPATH hein....

emmi

: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 :

public void scanner(){
		System.out.println("entrer");
		NetworkInterface[] devices = JpcapCaptor.getDeviceList();
		System.out.println("nb devices :"+devices.length);
}

:cry:
emmi

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

fredericmazue

Quote:
java.lang.NullPointerException

Et bien au moins le programme a démarré :lol:

Quote:
<>
la fonction qui fait prob :

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.

Quote:
maintenant pour la 2éme suggestion
le ping avant le arp

Faite à ta demande...

Quote:
n'importe quel point daccée wifi

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.

emmi

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()

fredericmazue

Quote:
c'est la seul fonction que j'execute

Et main, tu ne l'exécutes pas peut être :?: :twisted: :lol:

Quote:
une fois le message "Entrée" est affiché l'erreur apparrait tout de suite

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.

emmi

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 :


import jpcap.*;
public class Mesure{
 public Mesure(){
		System.out.println("entrer");
		NetworkInterface[] devices = JpcapCaptor.getDeviceList();
		System.out.println("nb devices :"+devices.length);
}
public static void main(String args[]){
new Mesure();
}

}

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 :
System.out.println("entrer");
		NetworkInterface[] devices = JpcapCaptor.getDeviceList();
               System.out.println("ok");
		System.out.println("nb devices :"+devices.length);

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?

Niroken

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

Niroken

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.

emmi

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

emmi

et bien je fais sudo su je tape le mot de passe de ma session pour avoir root@emmi....
et ca marche pas
:(

fredericmazue

Quote:
NetworkInterface[] devices = JpcapCaptor.getDeviceList();
System.out.println("ok");

et

Quote:
le "OK" n'apparait pas dooonc

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.

emmi

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:

fredericmazue

Tu as bien vu ce que dit Niroken:

Quote:
On Linux/UNIX, you need to become a super user by using 'su' command , or use 'sudo' command to run Jpcap-based applications.

Tu dois être root

Je fais un essai. Je te tiens au courant

emmi

wé j' ai essayé sous root même prob

fredericmazue

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:

/home/fred/jdk1.6.0/bin/java -cp .:/home/fred/libs/javalibs/jpcap/jpcap.jar -Djava.library.path=/home/fred/libs/javalibs/jpcap Mesure

et ça m'a sorti:
entrer
nb devices :4

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

emmi

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

fredericmazue

Quote:
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é :)
emmi

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:

emmi

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

emmi

tantpis pour eux ils ont un terminal non
l'important c'est que ça marche
merci beaucouuuuup

fredericmazue

Quote:
donc ce -Djava.library.path ?? comment le traduire sous eclipce

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

emmi

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

fredericmazue

Quote:
je ne sais pas quoi dire mon programme fonctionne a merveille

Tu peux dire que ton programme fonctionne à merveille ;)

Quote:
ta patiennnnnce

Je sais pas si Flexx va être de ton avis :)

Bon je suis fatigué moi. Dodo maintenant :)