2
我正在爲使用apache.commons.net.telnet的思科路由器編寫telnet客戶端。但我有問題。這裏是代碼示例:思科路由器的Telnet客戶端
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);
}
在某些情況下,它能正常工作,並顯示提示輸入密碼。但是,其他情況下它的工作不正確 - 通過從telnet輸入流讀取掛起。運行條件相同。爲什麼我會遇到這種情況? 如果有人有寫cisco telnet客戶端的提示,我會很高興聽到他們!
使用'tcpdump'或其他數據包嗅探器來找出原因。從這個級別的代碼是不可能的。 – 2012-03-31 19:47:42
你能更準確地描述問題嗎?你是說你根本沒有輸出?或者你得到一些輸出,然後掛起?或者是什麼? – 2012-03-31 20:43:55
我試過使用wireshark。它顯示,我的路由器發送telnet數據(提示輸入密碼),但我的應用程序不響應此數據包。收到三重提示後(如果發生超時錯誤,則發送新提示),我的應用程序將打印所有3個提示,然後輸入錯誤密碼錯誤。我不明白它何時發生。可能是在telnet選項? – DenisM 2012-03-31 20:56:17