Telnet-Client는 하루 종일 SSH 클라이언트보다 훨씬 더 소진되며 가능한 한 많이 사용될 수 있으며 여전히 수정해야합니다.
org.apache.commons.net.telnet.telnetclien- 커먼즈 네트 패키지, Commons-net-3.0.1-bin.zip.
코드 사본은 다음과 같습니다.
패키지 org.sl.util;
import org.apache.commons.net.telnet.telnetclient;
java.io.*;
import java.nio.bytebuffer;
공공 수업 telnetutil {
문자열 charset = null;
바이트 [] buff = 새로운 바이트 [2048];
TelnetClient TelnetClient = 새로운 TelnetClient ();
bufferedReader telnetReader = null;
완충 작가 TelnetWirter = null;
입력 스트림 telnetin = null;
outputStream telnetout = null;
public telnetutil () {
TelnetClient = 새로운 TelnetClient ();
}
/**
* 서버에 연결합니다
* @param ip
* @param 포트
* @throws UnsupportedEncodingException
* @throws ioexception
*/
public void connect (String IP, Int Port)는 UnsupportedEncodingException, ioException {
TelnetClient.connect (IP, 포트);
setioStream ();
}
/**
* 서버에 연결합니다
* @param ip
* @throws UnsupportedEncodingException
* @throws ioexception
*/
Public Void Connect (String IP)는 UnsupportedEncodingException, ioexception {
TelnetClient.connect (IP);
setioStream ();
}
void setioStream ()가 UnsupportedEncodingException을 던졌습니다.
telnetin = telnetclient.getInputStream ();
Telnetout = TelnetClient.getOutputStream ();
if (null == charset) {
TelnetReader = New BufferedReader (new inputStreamReader (TelnetIn));
TelnetWirter = New BufferedWriter (New OutputStreamWriter (Telnetout));
}또 다른{
TelnetReader = New BufferedReader (new inputStreamReader (Telnetin, charset));
TelnetWirter = New BufferedWriter (New OutputStreamWriter (Telnetout, Charset));
}
}
/**
* 로그인하십시오
* @param 사용자
* @param passwd
* 로그인이 성공했는지 여부.
* @throws ioexception
*/
공개 부울 로그인 (String user, String Passwd)은 ioexception {
문자열 read = readString ();
for (int i = 0;; i ++) {
if (-1 == read.indexof ( "login")) {
read = readString ();
}또 다른{
부서지다;
}
}
WriteText (사용자);
read = readString ();
for (int i = 0;; i ++) {
if (-1 == read.indexof ( "password")) {
read = readString ();
}또 다른{
부서지다;
}
}
WriteText (passwd);
을 위한(;;){
read = readString ();
//system.out.println("last:"+read);
if (-1! = read.indexof ( "last")) {
진실을 반환하십시오.
} else if (-1! = read.indexof ( "emporrect")) {
거짓을 반환합니다.
}
}
}
/**
* 이것은 테스트 방법입니다. 자연스럽게 쓰십시오.
* @throws ioexception
*/
public void show ()는 ioexception {
// system.out.println (readString ());
// system.out.println (readString ());
// bytebuffer tmp = bytebuffer.allocate (1024);
// byte [] buff = new Byte [1024];
// while (telnetin.available ()> 0) {
// int readlen = readBytes (buff, 0,1024);
// tmp.put (buff, 0, readlen);
//}
// system.out.println (new String (tmp.array ());
System.out.println ( "1"+readstring ());
System.out.println ( "2"+readstring ());
System.out.println ( "3"+readstring ());
WriteText ( "루트");
System.out.println ( "4" + readstring ());
WriteText ( "123456");
System.out.println ( "5"+readstring ());
// system.out.println ( "6"+readstring ());
// system.out.println ( "7"+readstring ());
}
public int readbytes (byte [] buff, int offset, int len)는 ioexception {
Return TelnetIn.read (버프, 오프셋, Len);
}
/**
* 문자열을 읽으십시오 <br/>
* readByte ()를 문자열로 변환하는 것과 같습니다
* @반품
* @throws ioexception
*/
public string readstring ()는 ioexception {
int readlen = readBytes (this.buff, 0, this.buff.length);
if (0 <readlen)
새 문자열 (buff, 0, readlen) .trim ();
또 다른
반품 "";
}
/**
* 라인을 읽으십시오 <br/>
* 서버와 클라이언트가 동일한 운영 체제가 아닌 경우이 방법이 라인을 계산하지 못할 수 있습니다.
* @반품
* @throws ioexception
*/
public string readline ()는 ioexception {
문자열 read = telnetReader.Readline ();
return null == read? "": read.trim ();
}
public void writeBytes (byte [] buff, int offset, int len)는 ioexception {
telnetout.write (Buff, Offset, Len);
}
/**
* 서버에 문자열을 쓰십시오
* @param 텍스트
* @throws ioexception
*/
public void writeetext (문자열 텍스트)는 ioexception {
TelnetWirter.Write (텍스트);
TelnetWirter.write ( '/r');
TelnetWirter.write ( '/n');
TelnetWirter.flush ();
}
/**
* 명령을 실행하고 결과 <br/>를 반환하십시오
* 동등한 : <br>
* WriteText (); <br/>
* return readString ();
* @param cmd
* @반품
* @throws ioexception
*/
public string exec (String CMD)는 ioException {
WriteText (CMD);
return readString ();
}
문자열 login1 (문자열 user, String passwd)은 ioexception {
문자열 읽기 = null;
readString ();
readString ();
read = readString ();
if (-1! = read.indexof ( "login")) {
WriteText (사용자);
}
read = readString ();
if (-1! = read.indexof ( "password")) {
WriteText (passwd);
}
read = readString ();
read += readString ();
리턴 읽기;
// StringBuffer sb = new StringBuffer ();
// while (while! = (read = readString ())) {
// sb.append (읽기);
//}
//
// 반환 sb.toString ();
}
/**
* 폐쇄
*/
public void close () {
노력하다{
WriteText ( "종료");
WriteText ( "종료");
WriteText ( "종료");
} catch (예외) {
}
노력하다 {
if (null! = telnetin) telnetin.close ();
} catch (예외 e) {
}
노력하다 {
if (null! = telnetout) telnetout.close ();
} catch (예외 e) {
}
노력하다 {
if (null! = telnetclient) telnetclient.disconnect ();
} catch (예외 e) {
}
}
/**
* Telnet Communication <br/> 중에 설정된 문자를 설정하십시오
* 참고 :이 문자 세트는 서버 측 문자 세트 <br/>와 필요한 관계가 없습니다.
*이 방법은 connect () 전에 호출해야합니다.
* @param charset
*/
public void setcharset (String charset) {
this.charset = charset;
}
/**
* 버프 크기를 기본적으로 2048 바이트로 재설정하십시오.
* @param 크기
*/
public void setbuffersize (int size) {
this.buff = 새로운 바이트 [크기];
}
}
테스트 클래스
코드 사본은 다음과 같습니다.
정적 void t4 () {
telnetutil tu = 새로운 telnetutil ();
노력하다 {
tu.connect ( "192.168.2.154");
System.out.println (tu.login ( "root", "123456"));
//tu.show ();
//system.out.println (tu.readstring ());
//system.out.println(tu.exec("pwd ");
System.out.println (tu.exec ( "echo /"123456789/">1.txt"));
System.out.println (tu.exec ( "cat 1.txt"));
} catch (ioexception e) {
e.printstacktrace ();
}
tu.close ();
}
정적 void t1 () {
telnetutil tu = 새로운 telnetutil ();
노력하다 {
tu.connect ( "192.168.2.154");
System.out.println (tu.login ( "SL1", "Coffee8215"));
//tu.show ();
//system.out.println (tu.readstring ());
System.out.println (tu.exec ( "pwd"));
} catch (ioexception e) {
e.printstacktrace ();
}
tu.close ();
}