powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Телнет клиент для cisco роутера.
1 сообщений из 1, страница 1 из 1
Телнет клиент для cisco роутера.
    #37734573
fordil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Очень нужна помощь!
Пишу telnet клиент для циско роутера. Но уже на начальном этапе возникли проблемы.
Вот пример:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
package smallexampleforforum;

import java.io.IOException;
import java.util.ArrayList;
import org.apache.commons.net.telnet.*;

public class SmallExampleForForum {

    static TelnetClient telnetClient = new TelnetClient();
    
    public static void main(String[] args) throws IOException {
        setOptionHandlers();
        telnetClient.connect("192.168.127.100");
        read();
        telnetClient.disconnect();
    }
    
    private static void setOptionHandlers() throws IOException {
        ArrayList<TelnetOptionHandler> optionHandlers = 
            new ArrayList<TelnetOptionHandler>();
        optionHandlers.add(new TerminalTypeOptionHandler("VT100", false, false, true, false));
        optionHandlers.add(new EchoOptionHandler(true, false, true, false));
        optionHandlers.add(new SuppressGAOptionHandler(true, true, true, true));
        for (TelnetOptionHandler handler : optionHandlers) {
            try {
                telnetClient.addOptionHandler(handler);
            }
            catch (InvalidTelnetOptionException e) {
                System.err.println("Error registering option handler "
                        + handler.getClass().getSimpleName());
            }
        }
    }
    
    public static void write(byte[] data) throws IOException {
        telnetClient.getOutputStream().write(data);
        telnetClient.getOutputStream().flush();
    }
    
    public static void read() throws IOException {
        System.out.println("Read");
        byte[] buff = new byte[1024];
        int read;
        if((read = telnetClient.getInputStream().read(buff)) > 0) {
            System.out.println(new String(buff, 0, read));
        }
        System.out.println("read="+read);
    }
}



В некоторых случаях он отрабатывает и показывается предложение ввести пасворд. В остальных случаях пример виснет на чтении из потока telnetClient.getInputStream().read(buff). Как я чуть позже выяснил с помощью wireshark'а роутер данные отсылает, но функция чтения из потока почему-то не возвращает управление довольно продолжительное время, после чего выводит сразу три предложения ввести пароль, после каждого из них сообщение 'Timeout exceeded', а затем 'Bad password error'. Выглядит, как будто telnetClient.getInputStream().read(buff) сохраняет полученные данные во внутреннем буфере и продолжает читать, и возвращает все прочитанное только после получения bad password error'a.
Собственно вопрос, почему так происходит? Условия при запусках кода не меняются. Почему он срабатывает по-разному, не понимаю..

P.S. Срадостью принимаются любые советы по написанию телнет клиента вообще и для циско роутера в частности.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Телнет клиент для cisco роутера.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]