IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Telnet avec du Java pour routeur Netopia


Sujet :

Java

  1. #1
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Par défaut Telnet avec du Java pour routeur Netopia
    Bonjour,

    Je suis actuellement en pleine réflexion pour développer un script qui récupère les différentes config de mes routeurs via du telnet.

    enfait dans un fichier txt j'ai les adresses de tous mes routeurs ==> ça j'arrive à récupérer les adresses IP et les mettre dans un tableau de type vecteur (car je ne connais pas la taille de mon tableau)

    Ensuite la ou je commence à bloquer c'est au niveau du telnet, j'ai vu plusieurs chose sur le net mais c'est assez flou pour moi...
    j'aimerais que lorsque je lance mon appli qu'il récupère les adresses inséré dans mon vecteur pour se connecter dessus (genre telnet x.x.x.x:23) et ensuite qu'il me fasse un teste sur le mot de passe qui peut être différent(disons 3 mot de passe différent). ==> Le problème c'est que si le mot de passe est faux, il ne me retourne pas de message d'erreur que je puisse lire, il me renvois directement sur "name:" qui correspond au login!

    Dernière question, comment fait-on pour simuler les flèches directionnel dans le telnet? et mettre des temps de pause pour être sur que la commande ais fini de s’exécuter?

    Merci d'avance pour votre aide,

    Cordialement SGBVida

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Tu ouvres une socket sur l'adresse et le port, puis tu envois tes commandes.
    Si tu lis "name:", c'est qu'il faut retenter le login/mot de passe.
    Pour les flèches, cherche dans la table ASCII.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Par défaut
    actuellement j'ai ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    public class ReadFile 
    {
    	static String chaine = "";
    	static String fichier = "adresseIP.txt"; // Fichier avec les adresses IP des netopia
    	static Vector tableau = new Vector(); // Tableau à taille variable
     
     
    	public static void lecture () 
    	{
    		//lecture du fichier texte	
    		try{
    			InputStream ips = new FileInputStream(fichier); 
    			InputStreamReader ipsr = new InputStreamReader(ips);
    			BufferedReader br = new BufferedReader(ipsr);
    			String ligne;
    			while ((ligne=br.readLine())!=null)
    			{
    				tableau.addElement(ligne);
    				System.err.println(tableau.lastElement());
     
    			}
    			br.close(); 
    		}		
    		catch (Exception e){
    			System.out.println("Problème 1");
    		}
    	}
     
     
    	public static void telnet() throws UnknownHostException, IOException
    	{
    		try
    		{
    			while (tableau != null )
    			{
    				int n = 0;
    				Socket socket = new Socket((String) tableau.elementAt(n) , 23); // 23 est le port telnet par défaut
    				// Input
    				InputStream is = socket.getInputStream();
    				InputStreamReader isr = new InputStreamReader(is, "ASCII");
    				BufferedReader br = new BufferedReader(isr);
    				// Output
    				OutputStream os = socket.getOutputStream();
    				OutputStreamWriter osw = new OutputStreamWriter(os, "ASCII");
    				PrintWriter pw = new PrintWriter(osw);
     
    				System.err.println(tableau.elementAt(n));
     
    				String line = br.readLine();
    				if ("name:".equals(line))
    					{
    					pw.println("admin"); pw.flush();
    					pw.wait(100);
    					pw.println("test"); pw.flush();
    					pw.wait(100);
     
    					}
    				n = n+1;
    			}
    		}
    		catch (Exception e)
    		{
    			System.out.println("Problème 2");
    		}
     
     
    	}
    Bon je sais pas si mon code est propre déjà, mais est ce que mon code est bon?
    la question que je me pose, c'est comment faire les flèche haut et bas (en ASCII donc) car je ne peut pas mettre juste comme ça?

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Ta condition de boucle while n'est pas bonne.
    Ta variable "n" est réinitialisée à chaque début de boucle.
    Tu devrais réfléchir et relire ton code : la structure n'est pas correcte.
    Commence par faire un programme à vide qui ne fait rien d'autre que parcourir ton Vector.
    Lorsque le fonctionnement sera correct, tu pourras jouer avec les socket et les entrées/sorties.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Par défaut
    Je ne comprend pas pourquoi la condition de mon while est mauvaise ?
    ensuite pour la variable n, j'ai compris qu'il fallais que je l'initialise avant le while!

    ensuite dans je fait

    int n = 0;
    while (tableau != null )
    {
    System.out.println(tableau.elementAt(n));
    n = n+1;
    }
    je reçois comme message:

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 >= 5
    at java.util.Vector.elementAt(Unknown Source)
    at Netopia.tableau.main(tableau.java:39)

    Sinon il parcours bien mon vecteur en affichant les adresses IP entré dans le fichier txt

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Bonjour,

    Le soucis avec ce que tu fais, c'est que tableau ne sera jamais null, puisque tu ne le modifies pas (s'il était pas nul au départ, il ne risque pas de l'être par la suite).

    Ce que tu veux, c'est arrêter une fois que tu as atteint le dernier élément du tableau. Il faut donc que tu te serves de la taille de ce dernier (tableau.length) d'une façon ou d'une autre dans ta condition de sortie.

    Mako.

  7. #7
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Par défaut
    effectivement, ça fonctionne mieux !

    j'ai fait

    while (n != tableau.size() )
    {
    System.out.println(tableau.elementAt(n));
    n = n+1;
    }
    Par contre pour écrire en telnet est-ce bien correct deja ?
    Socket socket = new Socket((String) tableau.elementAt(n) , 23); // 23 est le port telnet par défaut
    // Input
    InputStream is = socket.getInputStream();
    InputStreamReader isr = new InputStreamReader(is, "ASCII");
    BufferedReader br = new BufferedReader(isr);
    // Output
    OutputStream os = socket.getOutputStream();
    OutputStreamWriter osw = new OutputStreamWriter(os, "ASCII");
    PrintWriter pw = new PrintWriter(osw);

    String line = br.readLine();
    System.out.println(line);
    car cela ne fonctionne pas! enfin je pense car je n'arrive pas à lire...

  8. #8
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Par défaut
    Je bloque vraiment là!

    je n'arrive pas à lire le flux de la console pour savoir d’où viens le problème...
    Enfait je n'arrive même pas à lire quelque chose dans la console!!!

  9. #9
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Ca bloque au "readLine" ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  10. #10
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Par défaut
    Je crois oui.

    Enfait je pense qu'il arrive à se connecter en telnet, mais ensuite je n'arrive pas (ou le fait mal) à récupérer les messages dans le telnet (pour voir dans un premier temps si cela fonctionne, puis pour effectuer mon test)

  11. #11
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par SGBVida Voir le message
    Je crois oui.
    Un peu vague pour t'aider sur le debug
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  12. #12
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Par défaut
    Disons que quand je fait ça:

    String line = br.readLine();
    System.out.println(line);
    cela ne me retourne rien... donc soit j'ai une erreur dans mon programme soit je l'utilise mal !

  13. #13
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Affiche un "hello world" avant le readLine et un "Yeah c'est passé" juste après. Comme ça tu seras fixé.
    Si ça bloque à cet endroit, c'est que tu n'as pas envoyé les informations adéquates ou alors que la ligne affichée ne se termine pas par un retour chariot.
    En manuel, la demande de login s'affiche comment ? Ne passe pas par un readLine, mais plutôt par une lecture d'un tableau de caractères.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  14. #14
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Par défaut
    Donc en faisant ce que tu m'as dit,

    j'ai bien le "Hello world", mais pas le "Yeah".

    en manuel, la demande de login se fait "name: " ==> il attend un nom

    ma commande pour lire est elle bonne deja ?

  15. #15
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par SGBVida Voir le message
    ma commande pour lire est elle bonne deja ?
    Tu as déjà la réponse : je t'ai dit de changer de méthode puisque la ligne ne finit pas par un retour à la ligne. Le readLine est bloquant jusqu'à lire un retour à la ligne.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  16. #16
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Par défaut
    quand je fait ça:

    Socket socket = new Socket((String) "192.168.1.1" , 23);
    InputStream is = socket.getInputStream();
    InputStreamReader isr = new InputStreamReader(is, "ASCII");
    BufferedReader br = new BufferedReader(isr);
    OutputStream os = socket.getOutputStream();
    OutputStreamWriter osw = new OutputStreamWriter(os, "ASCII");
    PrintWriter pw = new PrintWriter(osw);

    System.out.println("hello world");
    String line = br.readLine();
    System.out.println(line);

    System.out.println("yeah");
    J'ai uniquement le Hello world, par contre quand je fait ça:

    int n = 0;
    System.out.println(tableau.size());
    while (n != tableau.size() )
    {
    System.out.println(tableau.elementAt(n));

    Socket socket = new Socket((String) tableau.elementAt(n) , 23);
    InputStream is = socket.getInputStream();
    InputStreamReader isr = new InputStreamReader(is, "ASCII");
    BufferedReader br = new BufferedReader(isr);
    OutputStream os = socket.getOutputStream();
    OutputStreamWriter osw = new OutputStreamWriter(os, "ASCII");
    PrintWriter pw = new PrintWriter(osw);

    pw.println("admin"); pw.flush();
    pw.println("test"); pw.flush();
    System.out.println("login réussie");

    String line = br.readLine();
    System.out.println(line);
    n = n+1;
    }
    }
    j'ai:
    5
    192.168.1.1
    login réussie
    ??????name:admin
    192.168.1.2

    Exception in thread "main" java.net.ConnectException: Connection timed out: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at Netopia.ReadFile.telnet(ReadFile.java:45)
    at Netopia.ReadFile.main(ReadFile.java:103)

    Disons que je ne suis pas un super pro de java et la je bloque car je ne vois pas trop comment changer ma méthode :s

  17. #17
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Tu obtiens un InputStream depuis l'objet Socket. Cet objet est suffisant pour lire. Regarde la méthode read. Tu déclare un buffer suffisamment grand puis tu peux lire les données avec cette méthode.
    ensuite, pour afficher ton buffer, tu peux chercher dans la classe java.lang.String.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  18. #18
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2011
    Messages : 12
    Par défaut
    la méthode read me demande de lire un entier, le InputStream est un tableau ?

    je comprend pas trop là...

  19. #19
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par SGBVida Voir le message
    la méthode read me demande de lire un entier, le InputStream est un tableau ?

    je comprend pas trop là...
    Ah pardon. Je voulais t'indiquer la méthode read suivante, celle qui prend un tableau en paramètre
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/04/2008, 17h49
  2. cherche java pour ouvrir nouvelle fenêtre avec dimension
    Par audax dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 06/01/2008, 16h36
  3. Réponses: 2
    Dernier message: 20/11/2007, 16h00
  4. Modification entête XML avec Java pour RSS
    Par Hyst76 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 27/09/2007, 16h58
  5. Réponses: 5
    Dernier message: 11/01/2007, 12h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo