JAVA如何实现跟TELNET一样
我写了程序实现TELNET,有握手的过程,如下:
import java.io.*;
import java.net.Socket;
public class TelnetExample {
///TELNET握手过程
public static int hand(InputStream is, OutputStream os) throws
IOException {
while(true) {
int ch = is.read();
if(ch < 0 || ch != 255)
return ch;
int cmd = is.read();
int opt = is.read();
switch(opt) {
case 1: // echo协商选项,本程序未处理
break;
case 3: // supress go-ahead(抑制向前选项)
break;
case 24: // terminal type(终端类型选项)
if(cmd == 253) {
os.write(255);
os.write(251);
os.write(24);
os.write(255);
os.write(250);
os.write(24);
os.write(0);
os.write("dumb".getBytes());
os.write(255);
os.write(240);
} else if (cmd == 250) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int svr = is.read();
while(svr != 240) {
baos.write(svr);
svr = is.read();
}
System.out.println("Svr:" + baos.toString());
}
break;
default:
if (cmd == 253) {
os.write(255);
os.write(252);
os.write(opt);
}
}
}
}
public static void main(String[] args) throws Exception {
Socket s = new Socket("host",23);
InputStream is = s.getInputStream();
OutputStream os = s.getOutputStream();
System.out.println(hand(is,os)); //TELNET握手
os.write("user\n".getBytes());
os.write("password\n".getBytes());
BufferedReader br = new BufferedReader(new InputStreamReader(is));
char[] buf = new char[1024];
int read = br.read(buf);
while(read > 0) {
System.out.println(new String(buf,0,read));
read = br.read(buf);
}
}
}
TELNET登录是成功了,但是发一些指令比如:ps -ef,却发现回送过来的信息(收到什么就显示什么)常有一些奇怪的字符,而这些字符在实际的TELNET中应该是不可见的,而且信息的分割很乱,如何做的跟TELNET中的回显一模一样呢(即过滤了那些不可见字符同时又分行显示),请赐教,万分感谢。分不是问题。
------解决方案--------------------
我有一个完整的telnet的程序,不知道怎么发给你。留下你QQ吧
------解决方案--------------------
不懂,帮不了你,没鼓捣过
不过你可以参考 http://commons.apache.org/net/
已经有现成的类库实现了各种常见的协议,我们何必自己写一个呢?
如果为了研究,可以参考他的源代码。
------解决方案--------------------
------解决方案--------------------
有现成的telnet工具吧?叫telnetd。我一直用
搂住可以看看源代码研究