1

我想获取 telnet 会话的登录用户的 IP 地址

所以我写了以下代码:

Process p1 = Runtime.getRuntime().exec(new String[] {"/usr/bin/who", "-m"});
p1.waitFor();

BufferedReader reader = new BufferedReader(new InputStreamReader(p1.getInputStream()));
String line = reader.readLine();

System.out.println("line=" + line);
reader.close();

但我得到的输出为“null”。

预期输出为:linus pts/1 Dec 10 03:48 (172.21.235.48)

4

5 回答 5

1

在这种情况下,您不应传递该-m选项。

这对我有用:

Process p1 = Runtime.getRuntime().exec(new String[] {"/usr/bin/who"});
于 2012-12-10T07:48:56.723 回答
0

在调用waitFor().

于 2012-12-10T07:54:02.663 回答
0

您可以创建一个 shell 脚本,该脚本将从您的 java 程序接收参数(选项)。然后你可以像这样从java运行你的shell脚本 -

  ProcessBuilder pb = new ProcessBuilder("/PATH/test.sh","-m");
    String line; 
    Process process=pb.start(); 
    java.io.InputStream is = process.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);

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

现在在 test.sh 中,你 cab 获取参数并运行命令 -

/usr/bin/who $1 (needs to check, not sure)

希望这可以帮助。

于 2012-12-10T07:59:14.360 回答
0

谢谢大家的回复。

从“dystroy”的回复中,我了解到-m正在制造问题。

我试过--m并且它有效:)

于 2012-12-11T03:55:31.837 回答
0

请尝试此代码。它对我有用,并返回与who -mUNIX 命令相同的输出。

import java.io.*;
public class UserPB
{
        public static void main(String[] args)
        {

                try {
                //      ProcessBuilder pb = new ProcessBuilder("/u01/app/chdir/user.sh");
                        ProcessBuilder pb = new ProcessBuilder("who");
                        Process p;
                        p = pb.start();
                        BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
                        System.out.println("Your Host Details--->"+input.readLine());

                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }

        }
于 2016-06-25T02:56:51.970 回答