Comment utiliser un programme en java pour exécuter les commandes d'invite de commandes?
c'est ma première fois de poster ici, donc je ne suis pas vraiment sûr de ce que pour dire/demander.
De toute façon, je suis en train de faire un simple programme java qui s'exécute invite de commandes à partir du programme java, principalement utilisé pour l'inondation de ping (ping inondations moi-même).
Voici mon code actuel
public class Core extends JFrame {
JTextField ipTextField;
int packets = 0;
boolean running = false;
public Core() {
super("Fatique");
Container container = getContentPane();
JButton bAttack = new JButton("Start Attack");
JButton bStop = new JButton("Stop Attack");
JPanel jPanel = new JPanel();
container.setLayout(new FlowLayout());
ipTextField = new JTextField("IP Address", 30);
container.add(ipTextField);
bAttack.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String input = ipTextField.getText();
String[] value = input.split(":");
int amountOfPackets = Integer.parseInt(value[1]);
exec("cmd /c" + input + " -t -n " + amountOfPackets);
running = true;
}
});
bStop.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
stop();
}
});
if(!running) {
jPanel.add(bAttack);
} else {
jPanel.add(bStop);
}
add(jPanel);
}
public void exec(String cmd) {
try {
Process p = Runtime.getRuntime().exec(cmd);
System.out.println(getOutput(p) + " - " + getPacketsSent());
} catch (IOException e) {
e.printStackTrace();
}
}
public String getOutput(Process p) {
String output = null;
try {
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
output = line;
packets++;
}
return output;
} catch (IOException e) {
System.err.println(e.getStackTrace());
}
return null;
}
public int getPacketsSent() {
return packets;
}
public void stop() {
exec("cmd /c break");
running = false;
}
public static void main(String[] args) {
Core c = new Core();
c.setSize(500, 300);
c.setVisible(true);
c.setResizable(false);
c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
c.setLocationRelativeTo(null);
}
Je suis assez nouveau à java, de sorte que ne pourrait pas faire ce que je veux faire.
Ce que je veux faire c'est que je entrer une adresse ip dans le champ, et le diviser par ":", et après que le nombre de paquets, par exemple
127.0.0.1:100
Bien que maintenant, quand j'essaye d'utiliser la propriété intellectuelle et de la quantité de paquet, il retourne "null " 0" (à partir de la méthode exec), et je ne suis même pas sûr si elle a fait tout ce qui est lié à la commande ping.
Ce que je suis en train d'accomplir, c'est comme je l'ai déjà dit, ping flood moi-même, et ensuite de sortie ce que je reçois comme réponse, mais je n'ai aucune idée si ce code n'est rien encore par rapport à cela, j'utilise principalement la logique lors du codage java.
public String getOutput(Process p) {
String output = null;
try {
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
output = line;
packets++;
}
return output;
} catch (IOException e) {
System.err.println(e.getStackTrace());
}
return null;
}
Quelqu'un pourrait-il m'expliquer pourquoi mon code ne fonctionne pas comment je veux qu'il fonctionne? Merci de ne pas juger, comme je l'ai déjà dit, je suis assez nouveau à la programmation java.
EDIT: Voici un rapide "informatif", explication de ce que je suis en train d'accomplir.
- Je tape une adresse ip et le nombre de paquets que je veux envoyer. Dans cette explication, je suis en utilisant ip localhost, et 5 paquets.
-
J'ai lancer l'attaque. Dans cette partie, je veux que le programme à exécuter cmd invite de commande
ping 127.0.0.1 -t -n 5
127.0.0.1 étant l'adresse ip que j'ai mis dans le textfield dans mon programme, et le 5 est le nombre de paquets que j'ai mis dans le textfield.
-
J'ai commencé l'attaque, c'est ce qui devrait se produire dans l'invite de commande:
La langue est le finnois, mais toujours la même chose.
C'est l'explication fondamentale de ce que je suis en train d'accomplir, j'espère que quelqu'un a compris et peut aider à/dire pourquoi mon code ne fonctionne pas, ou travailler en mais pas d'impression les lignes appropriées dans eclipse console.
Toujours null, cependant, je probablement ne pas faire ce que vous m'avez dit de faire. Système..println(en.readLine()); c'est ce Que j'ai essayé, maintenant, il retourne "null null - 1"
OriginalL'auteur Woobie | 2013-04-06
Vous devez vous connecter pour publier un commentaire.
Il y a un problème avec votre méthode getOutput. Il semble que vous l'intention de recueillir de chaque ligne de sortie. Mais en fait, depuis que vous êtes à l'attribution
line
àoutput
, vous ne retourne la dernière ligne avant la fin du flux.Pour résoudre ce problème, modifiez
à
Ou, pour être plus exact:
où vous avez précédemment déclaré en dernier:
Qui n'est pas directement expliquer pourquoi vous obtenez
null
, mais ce pourrait être parce que la commande que vous êtes en cours d'exécution est l'écriture de la sortie de la "erreur" de flux plutôt que de la "production" de flux."Ping-pyynt": tuntematon est"nt" 127.0.0.1:2."
OriginalL'auteur Stephen C
Essayer quelque chose comme cela:
Ensuite, vous aurez à lire les
out
variable à analyser lesping
de commande de sortie en continu.^ Exactement, merci. Je viens de remarquer que j'ai oublié de mettre "ping" dans la commande.. maintenant paquets int augmente de 1 à chaque fois que j'appuie sur le bouton démarrer, ce qui n'est pas ce que j'allais pour. La sortie est toujours null.
OriginalL'auteur Pablo Santa Cruz
Juste une petite modification de votre code. obtenez de sortie est:
Ici la sortie est JTextArea j'ai pris pour afficher le résultat de processus de PING. Je ne peux pas vous montrer la sortie parce que je manque de réputation.
Je ne sais pas pourquoi, la première ligne est nulle. De toute façon, il fonctionne.
Espère que cela vous aidera. Avoir du bon temps de codage.
OriginalL'auteur Rushi M Thakker