⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 moduletelnetimpl.java

📁 一个非常好的ssh客户端实现
💻 JAVA
字号:
/****************************************************************************** * * Copyright (c) 1999-2003 AppGate Network Security AB. All Rights Reserved. *  * This file contains Original Code and/or Modifications of Original Code as * defined in and that are subject to the MindTerm Public Source License, * Version 2.0, (the 'License'). You may not use this file except in compliance * with the License. *  * You should have received a copy of the MindTerm Public Source License * along with this software; see the file LICENSE.  If not, write to * AppGate Network Security AB, Otterhallegatan 2, SE-41118 Goteborg, SWEDEN * *****************************************************************************/package com.mindbright.application;import java.net.Socket;import java.io.OutputStream;import java.io.InputStream;import java.io.IOException;import java.awt.Frame;import com.mindbright.net.telnet.TelnetTerminalAdapter;import com.mindbright.ssh2.SSH2InternalChannel;import com.mindbright.ssh2.SSH2Channel;import com.mindbright.terminal.Terminal;import com.mindbright.terminal.TerminalWin;import com.mindbright.terminal.LineReaderTerminal;import com.mindbright.terminal.TerminalFrameTitle;public class ModuleTelnetImpl extends ModuleBaseTerminal {    private String                remoteHost;    private int                   remotePort;    private SSH2InternalChannel   channel;    private TelnetTerminalAdapter telnetAdapter;    private InputStream           telnetIn;    private OutputStream          telnetOut;    private LineReaderTerminal    lineReader;    private boolean               localConnect;    private Socket                socket;    protected class ChaffedTelnet extends TelnetTerminalAdapter {		public ChaffedTelnet(InputStream in, OutputStream out,			     Terminal terminal)	{	    super(in, out, terminal);	}	protected void sendFakeChar() {	    if(channel != null) {		/*		 * 5 bytes of "ignore-payload" makes packet same size as one		 * byte channel data (i.e. a key-press). 		 */		byte[] chaff = new byte[] { 1, 2, 3, 4, 5 };		channel.getConnection().getTransport().sendIgnore(chaff);	    }	}    }    public void runTerminal(MindTermApp mindterm, TerminalWin terminal,			    Frame frame, TerminalFrameTitle frameTitle)    {	try {	    remoteHost = mindterm.getProperty("module.telnet.host");	    remotePort = getPort(mindterm.getProperty("module.telnet.port"));	    localConnect = true;	    	    if(remoteHost == null) {		if(!(mindterm.isConnected() &&		     (mindterm.getConnection() != null))) {		    terminal.write("Not connected to ssh2 server, can only make direct connections.\r\n");		} else {		    terminal.write("Prefix hostname with '|' to make a tunneled connection.\r\n");		}		lineReader = new LineReaderTerminal(terminal);		remoteHost = lineReader.promptLine("\r\nremote host[:port] : ",						   null, false);		if(remoteHost.trim().length() == 0) {		    return;		}		if(remoteHost.charAt(0) == '|') {		    localConnect = false;		    remoteHost = remoteHost.substring(1, remoteHost.length());		}		lineReader.detach();	    }	    int i = remoteHost.indexOf(':');	    if(i != -1) {		remotePort = getPort(remoteHost.substring(i + 1));		remoteHost = remoteHost.substring(0, i);	    }	    if(localConnect) {		try {		    socket    = new Socket(remoteHost, remotePort);		    telnetIn  = socket.getInputStream();		    telnetOut = socket.getOutputStream();		} catch (Exception e) {		    mindterm.alert("Local connection failed: " +				   e.getMessage());		    return;		}	    } else {		channel =		    mindterm.getConnection().newLocalInternalForward(remoteHost,								     remotePort);		if(channel.openStatus() != SSH2Channel.STATUS_OPEN) {		    mindterm.alert("Failed to open tunnel for telnet");		    return;		}		telnetIn  = channel.getInputStream();		telnetOut = channel.getOutputStream();	    }	    frameTitle.setTitleName("telnet@" + remoteHost + (remotePort != 23 ?							      (":" + remotePort)							      : ""));	    telnetAdapter = new ChaffedTelnet(telnetIn, telnetOut, terminal);	    if(useChaff()) {		telnetAdapter.startChaff();	    }	    telnetAdapter.getTelnetNVT().getThread().join();	    if(telnetAdapter.isBuffered()) {		lineReader = new LineReaderTerminal(terminal);		lineReader.promptLine("\n\rTelnet session was closed, press <return> to close window", null,				      false);	    }	    telnetAdapter.stopChaff();	} catch (Exception e) {	    /* don't care */	}    }    protected boolean closeOnDisconnect() {	return !localConnect;    }    private int getPort(String port) {	int p;	try {	    p = Integer.parseInt(port);	} catch (Exception e) {	    p = 23;	}	return p;    }    public String getTitle() {	return mindterm.getAppName() + " - " + "Telnet (not connected)";    }    public boolean isAvailable(MindTermApp mindterm) {	return true;    }    protected boolean haveMenus() {	return Boolean.valueOf(mindterm.getProperty("module.telnet.havemenus")).	    booleanValue();        }    public void doClose() {	if(telnetOut != null) {	    try { telnetOut.close(); } catch (IOException ee) { }	}	if(telnetIn != null) {	    try { telnetIn.close(); } catch (IOException ee) { }	}	if(channel != null) {	    channel.close();	}	if(socket != null) {	    try { socket.close(); } catch (IOException ee) { }	}	if(lineReader != null) {	    lineReader.breakPromptLine("");	}    }    protected ModuleBaseTerminal newInstance() {	return new ModuleTelnetImpl();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -