2009-07-01 5 views
1

Я не могу войти на хост HPUX, используя telnet , когда процесс telnet создается с помощью Java-программы.Почему «конечная скорость» собственного клиента telnet linux 0,0, когда порождена с Java (и как я могу ее исправить)?

Когда я подключаюсь к хосту HPUX из командной строки (из bash), я могу войти в систему и использовать сеанс.

Когда я запускаю процесс telnet с Java, происходит что-то странное. Мне предлагается ввести имя пользователя и отправить его. Я также получаю подсказку для пароля. Но по какой-то причине сервер telnet не ждет пароля; он завершает сеанс перед его отправкой.

Рассматривая обмен в wirehark, я вижу, что, как только клиент telnet отправит ACK для запроса пароля, сервер отправляет пакет FIN, завершая сеанс инициализации.

Одно из различий, которое я вижу в рукопожатии, ведущем к подсказке пароля, - это то, что сервер запрашивает скорость терминала. При запуске telnet из командной строки скорость отправки терминала составляет 38400,38400. При запуске telnet с Java скорость терминала равна 0,0.

Рассматривая исходный код клиента telnet, я обнаружил, что одним из источников «конечной скорости», отправленным клиентом telnet, является выход API cfgetospeed()/cfgetispeed(). Согласно this, значение скорости передачи в 0 раз «зависает», и это похоже на то, как процесс telnetd HPUX интерпретирует его.

Я бегу от Linux Fedora Core 6.

ответ

1

Я подозреваю, что переменная окружения $ TERM косвенно используется для определения скорости, и не устанавливается при порождении его из Java.

Если это не так, вы также можете попробовать запустить telnet через bash, то есть запустить bash с Java и отправить ему командную строку telnet. Это должно обеспечить точно такую ​​же среду, как при ее запуске вручную.

+0

Параметр TERM устанавливается и не влияет на это. Нерест telnet от bash также не помогает. Я обнаружил, что вызов telnet из «ожидаемого» делает трюк, хотя мне все еще интересно понять основную проблему здесь. –

+0

Мне тоже интересно, это звучит довольно странно. Я искал в Интернете, так что посмотрим, откуда вызов cfgetospeed() может получить свои данные, но ничего не нашел. –

+0

$ TERM не влияет на скорость терминала. Скорость терминала устанавливается независимо. – dolmen

 Смежные вопросы

  • Нет связанных вопросов^_^