to jest mój pierwszy wpis tutaj, więc nie jestem pewien, co powiedzieć/zapytać. W każdym razie, próbuję utworzyć prosty program java, który uruchamia polecenia wiersza polecenia z programu java, głównie używane do ping flood (sam ping powodzi).Jak używać programu java do uruchamiania poleceń wiersza poleceń?
Tu jest mój bieżący kod
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);
}
Jestem zupełnie nowy w Javie, tak że nie może robić to, co chcę robić. Co chcę zrobić, to wprowadzić adres IP w polu tekstowym i podzielić ją z „:”, a potem ilość pakietów, na przykład
127.0.0.1:100
Choć teraz, gdy próbuję użyć tego ip i ilość pakietów, zwraca "null - 0" (z metody exec) i nie jestem nawet pewien, czy zrobił coś związanego z pingiem.
To, co próbuję osiągnąć, to tak, jak już powiedziałem: ping się zalewam, a następnie wyprowadzam cokolwiek otrzymuję jako odpowiedź, chociaż nie mam pojęcia, czy ten kod robi coś z tym związanego, w większości korzystam z logiki podczas kodowania Jawa.
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;
}
Czy ktoś mógłby mi wyjaśnić, dlaczego mój kod nie działa tak, jak chcę, aby działał? Proszę nie osądzać, jak już powiedziałem, jestem całkiem nowy w programowaniu java.
EDYCJA: Oto szybkie "informacyjne" wyjaśnienie tego, co próbuję osiągnąć.
- Podaję adres IP i liczbę pakietów, które chcę wysłać. W tym wyjaśnieniu używam localhost ip i 5 pakietów.
Rozpoczynam atak. W tej części, chcę, aby uruchomić program wiersza polecenia cmd
ping 127.0.0.1 -t -n 5
127.0.0.1 będąc ip, że mogę umieścić w polu tekstowym w moim programie, a 5 jest ilość pakietów umieszczonych w polu tekstowym.
zacząłem atak, więc to, co powinno się zdarzyć w wierszu poleceń:
Język jest fiński, ale nadal to samo.
To jest podstawowe wyjaśnienie tego, co próbuję osiągnąć, mam nadzieję, że ktoś zrozumiał i może pomóc/wyjaśnić, dlaczego mój kod nie działa lub działa, ale nie drukuje właściwych linii w konsoli Eclipse.
Spróbuj wydrukować nieprzetworzone dane wyjściowe strumienia wejściowego procesu. – Zyerah
Jeszcze nie, ale prawdopodobnie nie zrobiłem tego, co mi kazałeś. System.out.println (in.readLine()); Właśnie tego próbowałem, teraz zwraca "null null - 1" – Woobie