Java Serversocket и Bash Connection - PullRequest
       22

Java Serversocket и Bash Connection

0 голосов
/ 27 января 2011

Мне было интересно, есть ли способ открыть канал между java serversocket и bash tcp pipe. Если так, как бы вы это сделали? Я знаю, как настроить серверную часть java, но как открыть соединение через сокет через bash или даже приглашение Windows cmd. По сути, я хочу передать стандартный ввод в TCP-соединение и получить от него стандартный вывод.

Любые примеры оценены!

-TJ

Ответы [ 4 ]

0 голосов
/ 27 января 2011

Вот пример - классы Connection, Session и т. Д. Определены в импорте. В то время, когда мы использовали trilead SSH, и я не думаю, что он более доступен публично, но вы можете найти множество других библиотек в Интернете, например, http://linuxmafia.com/ssh/java.html

Дело в том, что нам не нужно было открывать сокет сервера, чтобы (1) установить сеанс SSH, (2) выполнить аутентификацию по паролю, (3) выполнить некоторую команду в командной оболочке пользователя и (4) захватить ее стандартный вывод. Я верю, что большинство библиотек SSH дадут вам эту функциональность. Надеюсь, это поможет, - М.С.

public void runCommand (String uName, String pWord, String cmd) throws Exception {

    Connection conn = new Connection ("localhost");
    conn.connect();
    boolean authenticated = conn.authenticateWithPassword (uName, pWord);

    if (!authenticated)
        throw new Exception ("Authentication failure");
    Session sess = connection.openSession();
    sess.execCommand (cmd);

    BufferedReader br = new BufferedReader (new InputStreamReader (
                new StreamGobbler (sess.getStdout())));

    for (String s = br.readLine() ; s != null ; s = br.readLine()) {
          // do stuff with s
    }
    br.close();
    sess.close();
    conn.close();
}
0 голосов
/ 27 января 2011

Используйте любой из инструментов SSH (есть несколько открытых источников, например, ganymade). Ссылка:

http://java -source.net / open-source / network-clients / ganymed-ssh-2-для-java

Я не использовал этот конкретный, но другие ssh-клиенты делают то, что вы хотите.

PS: вам действительно не нужен ServerSocket для этого, но использование потоков полезно.

0 голосов
/ 27 января 2011

Netcat обычно используется для открытия TCP-соединений из оболочки Unix.Bash (или любая другая известная мне оболочка) не поддерживает ее напрямую.Похоже, существует порт Windows для Netcat, но я не использовал его.

Но гораздо лучше использовать SSH, так как в этом случае не требуется никакой специальной настройки на стороне Javaвы просто получите стандартные потоки ввода / вывода, перенаправленные на клиент SSH автоматически, со свободным шифрованием и дополнительным сжатием (ssh -C) в качестве бонусов.Недостатком является то, что для этого потребуется установить SSH-сервер на стороне Java и SSH-клиент на стороне подключения.

0 голосов
/ 27 января 2011

ServerSocket не может ничего делать, кроме как принимать входящие соединения и создавать новые сокеты, которые вы используете в качестве конечных точек (вы не используете ServerSocket для каких-либо операций отправки или получения). Это нормально, но помните, какая сторона соединения должна принимать соединения. Я бы предположил, что это будет Bash, так как кажется, что он «владеет» каналом, поэтому вместо него вы использовали бы Socket и подключили его.

...