java使用telnet连接远程计算机

来源:互联网 发布:c语言在线学习网站 编辑:程序博客网 时间:2024/05/13 17:40

net use :http://www.jb51.net/article/24734.htm

源代码:  http://commons.apache.org/proper/commons-net/


/*

 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


package com.uu.telnet;


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.util.StringTokenizer;


import org.apache.commons.net.telnet.TelnetClient;
import org.apache.commons.net.telnet.TelnetNotificationHandler;
import org.apache.commons.net.telnet.SimpleOptionHandler;
import org.apache.commons.net.telnet.EchoOptionHandler;
import org.apache.commons.net.telnet.TerminalTypeOptionHandler;
import org.apache.commons.net.telnet.SuppressGAOptionHandler;
import org.apache.commons.net.telnet.InvalidTelnetOptionException;


/***
 * This is a simple example of use of TelnetClient. An external option handler
 * (SimpleTelnetOptionHandler) is used. Initial configuration requested by
 * TelnetClient will be: WILL ECHO, WILL SUPPRESS-GA, DO SUPPRESS-GA. VT100
 * terminal type will be subnegotiated.
 * <p>
 * Also, use of the sendAYT(), getLocalOptionState(), getRemoteOptionState() is
 * demonstrated. When connected, type AYT to send an AYT command to the server
 * and see the result. Type OPT to see a report of the state of the first 25
 * options.
 * <p>
 * 
 * @author Bruno D'Avanzo
 ***/
public class TelnetClientExample implements Runnable, TelnetNotificationHandler {
static TelnetClient tc = null;


/***
* Main for the TelnetClientExample.
***/
public static void main(String[] args) throws Exception {
FileOutputStream fout = null;
// 没有参数,退出
if (args.length < 1) {
System.err
.println("Usage: TelnetClientExample1 <remote-ip> [<remote-port>]");
System.exit(1);
}
// 数组第一个为ip
String remoteip = args[0];
// 数组第二个为端口
int remoteport;


if (args.length > 1) {
remoteport = (new Integer(args[1])).intValue();
} else {
remoteport = 23;
}
//将要输出的文件
try {
fout = new FileOutputStream("spy.log", true);
} catch (IOException e) {
System.err.println("Exception while opening the spy file: "
+ e.getMessage());
}


tc = new TelnetClient();


TerminalTypeOptionHandler ttopt = new TerminalTypeOptionHandler(
"VT100", false, false, true, false);
EchoOptionHandler echoopt = new EchoOptionHandler(true, false, true,
false);
SuppressGAOptionHandler gaopt = new SuppressGAOptionHandler(true, true,
true, true);


try {
tc.addOptionHandler(ttopt);
tc.addOptionHandler(echoopt);
tc.addOptionHandler(gaopt);
} catch (InvalidTelnetOptionException e) {
System.err.println("Error registering option handlers: "
+ e.getMessage());
}


while (true) {
boolean end_loop = false;
try {
tc.connect(remoteip, remoteport);
Thread reader = new Thread(new TelnetClientExample());
tc.registerNotifHandler(new TelnetClientExample());
System.out.println("TelnetClientExample");
System.out.println("Type AYT to send an AYT telnet command");
System.out
.println("Type OPT to print a report of status of options (0-24)");
System.out
.println("Type REGISTER to register a new SimpleOptionHandler");
System.out
.println("Type UNREGISTER to unregister an OptionHandler");
System.out
.println("Type SPY to register the spy (connect to port 3333 to spy)");
System.out.println("Type UNSPY to stop spying the connection");


reader.start();
OutputStream outstr = tc.getOutputStream();


byte[] buff = new byte[1024];
int ret_read = 0;


do {
try {
ret_read = System.in.read(buff);
if (ret_read > 0) {
if ((new String(buff, 0, ret_read))
.startsWith("AYT")) {
try {
System.out.println("Sending AYT");


System.out.println("AYT response:"
+ tc.sendAYT(5000));
} catch (IOException e) {
System.err
.println("Exception waiting AYT response: "
+ e.getMessage());
}
} else if ((new String(buff, 0, ret_read))
.startsWith("OPT")) {
System.out.println("Status of options:");
for (int ii = 0; ii < 25; ii++) {
System.out.println("Local Option " + ii
+ ":" + tc.getLocalOptionState(ii)
+ " Remote Option " + ii + ":"
+ tc.getRemoteOptionState(ii));
}
} else if ((new String(buff, 0, ret_read))
.startsWith("REGISTER")) {
StringTokenizer st = new StringTokenizer(
new String(buff));
try {
st.nextToken();
int opcode = Integer.parseInt(st
.nextToken());
boolean initlocal = Boolean.parseBoolean(st
.nextToken());
boolean initremote = Boolean
.parseBoolean(st.nextToken());
boolean acceptlocal = Boolean
.parseBoolean(st.nextToken());
boolean acceptremote = Boolean
.parseBoolean(st.nextToken());
SimpleOptionHandler opthand = new SimpleOptionHandler(
opcode, initlocal, initremote,
acceptlocal, acceptremote);
tc.addOptionHandler(opthand);
} catch (Exception e) {
if (e instanceof InvalidTelnetOptionException) {
System.err
.println("Error registering option: "
+ e.getMessage());
} else {
System.err
.println("Invalid REGISTER command.");
System.err
.println("Use REGISTER optcode initlocal initremote acceptlocal acceptremote");
System.err
.println("(optcode is an integer.)");
System.err
.println("(initlocal, initremote, acceptlocal, acceptremote are boolean)");
}
}
} else if ((new String(buff, 0, ret_read))
.startsWith("UNREGISTER")) {
StringTokenizer st = new StringTokenizer(
new String(buff));
try {
st.nextToken();
int opcode = (new Integer(st.nextToken()))
.intValue();
tc.deleteOptionHandler(opcode);
} catch (Exception e) {
if (e instanceof InvalidTelnetOptionException) {
System.err
.println("Error unregistering option: "
+ e.getMessage());
} else {
System.err
.println("Invalid UNREGISTER command.");
System.err
.println("Use UNREGISTER optcode");
System.err
.println("(optcode is an integer)");
}
}
} else if ((new String(buff, 0, ret_read))
.startsWith("SPY")) {
tc.registerSpyStream(fout);
} else if ((new String(buff, 0, ret_read))
.startsWith("UNSPY")) {
tc.stopSpyStream();
} else {
try {
outstr.write(buff, 0, ret_read);
outstr.flush();
} catch (IOException e) {
end_loop = true;
}
}
}
} catch (IOException e) {
System.err.println("Exception while reading keyboard:"
+ e.getMessage());
end_loop = true;
}
} while ((ret_read > 0) && (end_loop == false));


try {
tc.disconnect();
} catch (IOException e) {
System.err.println("Exception while connecting:"
+ e.getMessage());
}
} catch (IOException e) {
System.err.println("Exception while connecting:"
+ e.getMessage());
System.exit(1);
}
}
}


/***
* Callback method called when TelnetClient receives an option negotiation
* command.
* <p>

* @param negotiation_code
*            - type of negotiation command received (RECEIVED_DO,
*            RECEIVED_DONT, RECEIVED_WILL, RECEIVED_WONT)
*            <p>
* @param option_code
*            - code of the option negotiated
*            <p>
***/
// @Override
public void receivedNegotiation(int negotiation_code, int option_code) {
String command = null;
if (negotiation_code == TelnetNotificationHandler.RECEIVED_DO) {
command = "DO";
} else if (negotiation_code == TelnetNotificationHandler.RECEIVED_DONT) {
command = "DONT";
} else if (negotiation_code == TelnetNotificationHandler.RECEIVED_WILL) {
command = "WILL";
} else if (negotiation_code == TelnetNotificationHandler.RECEIVED_WONT) {
command = "WONT";
}
System.out.println("Received " + command + " for option code "
+ option_code);
}


/***
* Reader thread. Reads lines from the TelnetClient and echoes them on the
* screen.
***/
// @Override
public void run() {
InputStream instr = tc.getInputStream();


try {
byte[] buff = new byte[1024];
int ret_read = 0;


do {
ret_read = instr.read(buff);
if (ret_read > 0) {
System.out.print(new String(buff, 0, ret_read));
}
} while (ret_read >= 0);
} catch (IOException e) {
System.err.println("Exception while reading socket:"
+ e.getMessage());
}


try {
tc.disconnect();
} catch (IOException e) {
System.err.println("Exception while closing telnet:"
+ e.getMessage());
}
}
}
原创粉丝点击