像crt或者ssh、甚至是cmd命令中使用window的telnet命令连接交换机。都可以起到控制交换机的作用。
telnet说白了就是一个tcp的长连接。你向交换机输入一组命令,其实就是你使用socket连接上交换机,把你的命令out出去。
如果你想看你执行的命令,返回了什么,你就是用io流直接读取socket中的长连接流中的内容即可。telnet其实就是这么简单。
使用java连接telnet进行操作的注意
1.telnet有VT100 VT52 VT220 VTNT ANSI等协议。
我用vt100。
2.vt100控制码(ansi控制码)过滤的问题,可以过滤,也可以在服务设置不要。
不过滤都是一些乱码。是以\033[***一个字母结尾的格式。
3.中文乱码的问题。
new String(old.getBytes("ISO8859-1"),"GBK")。
4.如何判断读取到最后了。
一有readUntil(),二有使用线程。
5.选择telnet的java包问题,包有很多,比如appache(commons-net-3.0.jar), ganymed(ganymed-ssh2-build210.jar),javaexpect(smart-0.1-SNAPSHOT-jar-with-dependencies.jar)
我使用appache。javaexpect有带的vt100控制码过滤,我没有仔细研究。
telnet说白了就是一个tcp的长连接。你向交换机输入一组命令,其实就是你使用socket连接上交换机,把你的命令out出去。
如果你想看你执行的命令,返回了什么,你就是用io流直接读取socket中的长连接流中的内容即可。telnet其实就是这么简单。
使用java连接telnet进行操作的注意
1.telnet有VT100 VT52 VT220 VTNT ANSI等协议。
我用vt100。
2.vt100控制码(ansi控制码)过滤的问题,可以过滤,也可以在服务设置不要。
不过滤都是一些乱码。是以\033[***一个字母结尾的格式。
3.中文乱码的问题。
new String(old.getBytes("ISO8859-1"),"GBK")。
4.如何判断读取到最后了。
一有readUntil(),二有使用线程。
5.选择telnet的java包问题,包有很多,比如appache(commons-net-3.0.jar), ganymed(ganymed-ssh2-build210.jar),javaexpect(smart-0.1-SNAPSHOT-jar-with-dependencies.jar)
我使用appache。javaexpect有带的vt100控制码过滤,我没有仔细研究。
6.write要flush()才发送。
看代码吧:
package com.telnet.test; import java.io.InputStream; import java.io.PrintStream; import org.apache.commons.net.telnet.TelnetClient; import com.telnet.constant.TelnetConstant; public class TelnetMain { private TelnetClient telnet = new TelnetClient("VT100"); private InputStream in; private PrintStream out; private static final String DEFAULT_AIX_PROMPT = "#"; private static final String ENTER_COMMAND_ARROW = ">"; private static final String ENTER_COMMAND_BRACKETS = "]"; private static final String ENTER="\n"; /** * telnet 端口 */ private String port; /** * 用户名 */ private String user; /** * 密码 */ private String password; /** * IP 地址 */ private String ip; public TelnetMain(String ip, String user, String password) { this.ip = ip; this.port = String.valueOf(23); this.user = user; this.password = password; } public TelnetMain(String ip, String port, String user, String password) { this.ip = ip; this.port = port; this.user = user; this.password = password; } /** * @return boolean 连接成功返回true,否则返回false */ private boolean connect() { boolean isConnect = true; try { telnet.connect(ip, Integer.parseInt(port)); in = telnet.getInputStream(); out = new PrintStream(telnet.getOutputStream()); telnet.setKeepAlive(true); write(password); String msg=readUntil(ENTER_COMMAND_ARROW); System.out.println(msg); write("system-view"); msg=readUntil("\n"); System.out.println(msg); msg=readUntil("\n"); System.out.println(msg); write("display interface "); msg=readUntil("\n"); System.out.println(msg); msg=readUntil(ENTER_COMMAND_BRACKETS); System.out.println(msg); } catch (Exception e) { isConnect = false; e.printStackTrace(); return isConnect; } return isConnect; } public void su(String user, String password) { try { write("su" + " - " + user); readUntil("Password:"); write(password); readUntil(DEFAULT_AIX_PROMPT); } catch (Exception e) { e.printStackTrace(); } } public String readUntil(String pattern) { try { char lastChar = pattern.charAt(pattern.length() - 1); StringBuffer sb = new StringBuffer(); char ch = (char) in.read(); while (true) { //System.out.print(ch);// ---需要注释掉 sb.append(ch); if (ch == lastChar) { if (sb.toString().endsWith(pattern)) { return sb.toString(); } } ch = (char) in.read(); } } catch (Exception e) { e.printStackTrace(); } return null; } public void write(String value) { try { out.println(value); out.flush(); } catch (Exception e) { e.printStackTrace(); } } public String sendCommand(String command) { try { write(command); return readUntil(DEFAULT_AIX_PROMPT); } catch (Exception e) { e.printStackTrace(); } return null; } private void disconnect() { try { telnet.disconnect(); } catch (Exception e) { e.printStackTrace(); } } private String getNowDate() { this.connect(); String nowDate = this.sendCommand("date|awk '{print $2,$3,$4}'"); String[] temp = nowDate.split("\r\n"); // 去除命令字符串 if (temp.length > 1) { nowDate = temp[0]; } else { nowDate = ""; } this.disconnect(); return nowDate; } public static void main(String[] args) { try { TelnetMain telnet = new TelnetMain("10.10.2.249", "Huawei", "Huawei"); System.setOut(new PrintStream("D:/telnet.txt")); telnet.connect(); telnet.disconnect(); } catch (Exception e) { e.printStackTrace(); } } }输出的内容在telnet.txt文件中,我贴出来给大家看看!
如有疑问,请加qq群:135430763 共同学习!