Пишу сюда впервые, поэтому не знаю, что сказать/спросить. В любом случае, я пытаюсь создать простую java-программу, которая запускает команды командной строки из java-программы, в основном используемой для ping-флуда (сам пинг-флуд).
Вот мой текущий код
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);
}
Я совсем новичок в java, так что это может не делать то, что я хочу. Что я хочу сделать, так это ввести IP-адрес в текстовое поле и разделить его с помощью «:», а после этого количество пакетов, например
127.0.0.1:100
Хотя теперь, когда я пытаюсь использовать этот ip и количество пакетов, он возвращает «null - 0» (из метода exec), и я даже не уверен, сделал ли он что-нибудь, связанное с пингом.
То, что я пытаюсь сделать, это, как я уже сказал, пинговать себя, а затем выводить все, что я получаю в качестве ответа, хотя я понятия не имею, делает ли этот код что-либо даже связанное с этим, я в основном использую логику при кодировании 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;
}
Может ли кто-нибудь объяснить мне, почему мой код не работает так, как я хочу, чтобы он работал? Пожалуйста, не судите строго, как я уже сказал, я совсем новичок в программировании на Java.
РЕДАКТИРОВАТЬ: Вот краткое «информативное» объяснение того, чего я пытаюсь достичь.
- Я ввожу IP-адрес и количество пакетов, которые хочу отправить. В этом объяснении я использую локальный IP-адрес и 5 пакетов.
Я начинаю атаку. В этой части я хочу, чтобы программа запускала команду приглашения cmd
пинг 127.0.0.1 -т -н 5
127.0.0.1 — это IP-адрес, который я указал в текстовом поле своей программы, а 5 — это количество пакетов, которые я поместил в текстовое поле.
Я начал атаку, вот что должно произойти в командной строке:
Язык финский, но все равно то же самое.
Это основное объяснение того, что я пытаюсь сделать, надеюсь, кто-то понял и может помочь/рассказать, почему мой код не работает или работает, но не печатает правильные строки в консоли eclipse.