如何使用java程序运行命令提示符命令?

Woo*_*bie 8 java command prompt ping command-prompt

这是我第一次在这里发帖,所以我不确定该说什么/问什么.无论如何,我正在尝试创建一个简单的java程序,它运行来自java程序的命令提示符命令,主要用于ping flood(ping flooding own).

这是我目前的代码

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);
}
Run Code Online (Sandbox Code Playgroud)

我是java的新手,所以可能不会做我想做的事.我想要它做的是我在文本字段中输入一个IP地址,并用":"拆分它,然后在那之后分配数据包,例如

127.0.0.1:100
Run Code Online (Sandbox Code Playgroud)

虽然现在当我尝试使用该ip和数据包数量时,它返回"null - 0"(来自exec方法),我甚至不确定它是否做了与ping相关的任何事情.

我想要完成的是正如我已经说过的那样,ping我自己,然后输出我得到的任何响应,虽然我不知道这个代码是否做了与此相关的任何事情,我主要在编写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;
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下为什么我的代码不起作用,我希望它如何工作?请不要判断,正如我已经说过的,我对java编程很新.

编辑:这是我想要完成的一个快速"信息"解释.

  1. 我键入一个IP地址和我想要发送的数据包.在这个解释中,我使用的是localhost ip和5个数据包. 即将发送5个数据包到localhost ip
  2. 我开始攻击了.在这一部分,我希望程序运行cmd prompt命令

    ping 127.0.0.1 -t -n 5

    127.0.0.1是我在程序中的文本字段中输入的ip,5是我在文本字段中放入的数据包数量.

  3. 我开始攻击,所以这是命令提示符中应该发生的事情: 5包发送到locahost

    语言是芬兰语,但仍然是一样的.

    这是我想要完成的基本解释,希望有人理解并可以帮助/说明我的代码无法正常工作,或者正在工作但不能在eclipse控制台中打印正确的行.

Pab*_*ruz 4

尝试这样的事情:

try {
       Runtime rt = Runtime.getRuntime();
       Process p = rt.exec("ping 192.168.16.67");
       InputStream in = p.getInputStream();
       OutputStream out = p.getOutputStream ();
       InputStream err = p.getErrorStream();
       p.destroy();
} catch(Exception exc) {}
Run Code Online (Sandbox Code Playgroud)

然后,您必须读取out变量以连续解析ping命令输出。