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 :

Extinction d'une machine sur le LAN depuis Java


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Par défaut Extinction d'une machine sur le LAN depuis Java
    Bonjour à tous j'aimerais à partir du code java un script qui permet d’éteindre une machine Linux connaissant son adresse IP dans le réseau

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Mouais... comme ça ça va pas être possible... si on pouvait éteindre une machine du réseau sans se logger dessus t'imagines un peu la cata...

    par contre, en ssh, un fois loggé root, on peut lancer "shutdown -h now"

    mais il faut passer par une lib (p.ex. http://www.jcraft.com/jsch/), et aussi connaître le pass root ou avoir un compte root-like sur la machine ciblée

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Par défaut
    Bonjour j'ai téléchargé la bibliothèque et j'ai obtenu le code suivant:
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    /* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */
    /**
    * This program enables you to connect to sshd server and get the shell prompt.
    * $ CLASSPATH=.:../build javac Shell.java
    * $ CLASSPATH=.:../build java Shell
    * You will be asked username, hostname and passwd.
    * If everything works fine, you will get the shell prompt. Output may
    * be ugly because of lacks of terminal-emulation, but you can issue commands.
    *
    */
    import com.jcraft.jsch.*;
    import javax.swing.*;
     
    	public class Shell{
    		public static void main(String[] arg){
    			try{
    				JSch jsch=new JSch();
     
    				//jsch.setKnownHosts("/home/foo/.ssh/known_hosts");
     
    				String host=null;
    				if(arg.length>0){
    					host=arg[0];
    				}
    				else{
    					host=JOptionPane.showInputDialog("Enter username@hostname",
    							System.getProperty("user.name")+
    							"@localhost");
    				}
    				String user=host.substring(0, host.indexOf('@'));
    				host=host.substring(host.indexOf('@')+1);
    				Session session=jsch.getSession(user, host, 22);
    				String passwd = JOptionPane.showInputDialog("Enter password");
    				session.setPassword(passwd);
    				UserInfo ui = new MyUserInfo(){
    					public void showMessage(String message){
    						JOptionPane.showMessageDialog(null, message);
    					}
    					public boolean promptYesNo(String message){
    						Object[] options={ "yes", "no" };
    						int foo=JOptionPane.showOptionDialog(null,
    								message,
    								"Warning",
    								JOptionPane.DEFAULT_OPTION,
    								JOptionPane.WARNING_MESSAGE,
    								null, options, options[0]);
    						return foo==0;
    					}					
    					// If password is not given before the invocation of Session#connect(),
    					// implement also following methods,
    					// * UserInfo#getPassword(),
    					// * UserInfo#promptPassword(String message) and
    					// * UIKeyboardInteractive#promptKeyboardInteractive()
    				};
    				session.setUserInfo(ui);			
    				// It must not be recommended, but if you want to skip host-key check,
    				// invoke following,
    				// session.setConfig("StrictHostKeyChecking", "no");				
    				//session.connect();
    				session.connect(30000); // making a connection with timeout.				
    				Channel channel=session.openChannel("shell");
    				// Enable agent-forwarding.
    				//((ChannelShell)channel).setAgentForwarding(true); 
    				channel.setInputStream(System.in);
    				/*
    				// a hack for MS-DOS prompt on Windows.
    				channel.setInputStream(new FilterInputStream(System.in){
    				public int read(byte[] b, int off, int len)throws IOException{
    				return in.read(b, off, (len>1024?1024:len));
    				}
    				});	*/ 
    				channel.setOutputStream(System.out); 
    				/*
    				// Choose the pty-type "vt102".
    				((ChannelShell)channel).setPtyType("vt102");
    				 */ 
    				/*
    				// Set environment variable "LANG" as "ja_JP.eucJP".
    				((ChannelShell)channel).setEnv("LANG", "ja_JP.eucJP");
    				 */ 
    				//channel.connect();
    				channel.connect(3*1000);
    			}
    			catch(Exception e){
    			System.out.println(e);
    			}
    		}
     
    		public static abstract class MyUserInfo
    		implements UserInfo, UIKeyboardInteractive{
    			public String getPassword(){ return null; }
    			public boolean promptYesNo(String str){ return false; }
    			public String getPassphrase(){ return null; }
    			public boolean promptPassphrase(String message){ return false; }
    			public boolean promptPassword(String message){ return false; }
    			public void showMessage(String message){ }
    			public String[] promptKeyboardInteractive(String destination,
    					String name,
    					String instruction,
    					String[] prompt,
    					boolean[] echo){
    				return null;
    			}
    		} 
    }
    Maintenant je ne comprend pas pourquoi on retourne null sur les méthodes prévues pour les paramètres de la machine et je ne sais toujours pas comment exécuter une commande?

  4. #4
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    hum hum... au vue de cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    channel.setInputStream(System.in);
    tu dois pouvoir la saisir dans la console, directement

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur de construction de réseaux
    Inscrit en
    Août 2012
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur de construction de réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 406
    Par défaut
    Citation Envoyé par Pill_S Voir le message
    hum hum... au vue de cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    channel.setInputStream(System.in);
    tu dois pouvoir la saisir dans la console, directement
    J'aimerais passer en paramètre la commande et je ne sais pas comment renseigner l'adresse IP, le login et le mot de passe?

  6. #6
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    http://www.jcraft.com/jsch/examples/Sudo.java.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Channel channel=session.openChannel("exec");
    
    // man sudo
    // -S The -S (stdin) option causes sudo to read the password from the
    // standard input instead of the terminal device.
    // -p The -p (prompt) option allows you to override the default
    // password prompt and use a custom one.
    ((ChannelExec)channel).setCommand("sudo -S -p '' "+command);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lister les processus d'une machine sur un réseau local
    Par Grosbenji dans le forum Windows
    Réponses: 2
    Dernier message: 29/11/2007, 17h59
  2. executer une commande sur un serveur depuis une page web
    Par nico33410 dans le forum Général Conception Web
    Réponses: 12
    Dernier message: 21/04/2007, 19h02
  3. Modifier l'heure et la date d'une machine sur le réseau -VB6
    Par GEGER dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 25/11/2005, 19h41
  4. Précense d'une machine sur le réseau
    Par ArkAng3 dans le forum MFC
    Réponses: 11
    Dernier message: 09/05/2005, 10h07
  5. probleme d'acces a une machine sur un réseau
    Par zorian dans le forum Développement
    Réponses: 3
    Dernier message: 09/06/2004, 13h04

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