java write netstat in cmd

2019-06-27 13:19发布

问题:

My goal is to print all the internet connections on my computer. When i type netstat on cmd i get the internet connections list. I wanted to do the same in java, automatically.

My code:

Runtime runtime = Runtime.getRuntime();

process = runtime.exec(pathToCmd);

byte[] command1array = command1.getBytes();//writing netstat in an array of bytes
OutputStream out = process.getOutputStream();
out.write(command1array);
out.flush();
out.close();

readCmd();  //read and print cmd

But with this code i get C:\eclipse\workspace\Tracker>Mais? instead of the list of connections. Obviously i'm working with eclipse, in windows 7. What am I doing wrong? I've looked in similar topics but i cound't find whats wrong. Thank you for the answers.

EDIT:

public static void readCmd() throws IOException {

    is = process.getInputStream();
    isr = new InputStreamReader(is);
    br = new BufferedReader(isr);
    String line;

    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
}

回答1:

Try this : I was able to create a file in my default temporary directory with all the connections

final String cmd = "netstat -ano";

        try {

            Process process = Runtime.getRuntime().exec(cmd);

            InputStream in = process.getInputStream();

            File tmp = File.createTempFile("allConnections","txt");

            byte[] buf = new byte[256];

            OutputStream outputConnectionsToFile = new FileOutputStream(tmp);

            int numbytes = 0;

            while ((numbytes = in.read(buf, 0, 256)) != -1) {

                outputConnectionsToFile.write(buf, 0, numbytes);

            }

            System.out.println("File is present at "+tmp.getAbsolutePath());


        } catch (Exception e) {
            e.printStackTrace(System.err);
        }


回答2:

You can also use an instance of java.util.Scanner to read the output of the command.

public static void main(String[] args) throws Exception {
    String[] cmdarray = { "netstat", "-o" };
    Process process = Runtime.getRuntime().exec(cmdarray);
    Scanner sc = new Scanner(process.getInputStream(), "IBM850");
    sc.useDelimiter("\\A");
    System.out.println(sc.next());
    sc.close();
}


回答3:

final String cmd = "netstat -ano";

    try {

        Process process = Runtime.getRuntime().exec(cmd);

        InputStream in = process.getInputStream();
        InputStreamReader isr = new InputStreamReader(in);
        BufferedReader br = new BufferedReader(isr);
        String line;

        while ((line = br.readLine()) != null) {
           System.out.println(line);
        }


    } catch (Exception e) {
        e.printStackTrace(System.err);
    } finally{
        in  = null;
        isr = null;
        br = null;
    }


标签: java cmd netstat