在开发中遇到这样的需求。使用中的系统(支持telnet的系统)因为某些原因不能做更改,而又需要增加一些功能。为了解决这个问题想了一办法,开发一个代理(注如果有更好的解决办法欢迎读者指出)将需要增加的需求在代理上消化。
下文就是代理的代码,代码用到apache commons net包:
package examples;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import org.apache.commons.net.telnet.EchoOptionHandler;
import org.apache.commons.net.telnet.InvalidTelnetOptionException;
import org.apache.commons.net.telnet.SuppressGAOptionHandler;
import org.apache.commons.net.telnet.TelnetClient;
import org.apache.commons.net.telnet.TerminalTypeOptionHandler;
public class TelnetClientExample implements Runnable {
static TelnetClient tc = new TelnetClient();
static Socket client;
public static void main(String[] args) throws IOException {
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());
}
try {
tc.connect("localhost", 21);
OutputStream outstr = tc.getOutputStream();
ServerSocket server = new ServerSocket(5678);
client = server.accept();
Thread reader = new Thread(new TelnetClientExample());
reader.start();
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream());
String str = null;
out.write("\n\r");
out.flush();
while ((str = in.readLine()) != null) {
outstr.write(str.getBytes());
outstr.write(13);
outstr.write(10);
outstr.flush();
}
client.close();
try {
tc.disconnect();
System.out.println("tc.disconnect()");
} catch (Exception e) {
System.err.println("Exception while connecting:" + e.getMessage());
}
} catch (Exception e) {
e.printStackTrace();
}
}
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) {
client.getOutputStream().write(buff, 0, ret_read);
System.out.print("ret_read : " + ret_read + " run() " + new String(buff, 0, ret_read));
}
} while (ret_read >= 0);
} catch (Exception e) {
System.err.println("Exception while reading socket:" + e.getMessage());
}
try {
tc.disconnect();
} catch (Exception e) {
System.err.println("Exception while closing telnet:" + e.getMessage());
}
}
}
ps:以上代码仅为sample,只支持单用户,有兴趣的朋友可以更改代码让其支持多用户
以下为字符窗口的输入输出情况(服务器为ftp服务器)
代码运行后:win+r弹出程序运行框,输入cmd回车,接着输入telnet localhost 5678
user admin
501 Invalid character in command
user admin
331 User name okay, need password for admin.
pass admin
230 User logged in, proceed.
pwd
257 "/" is current directory.
help
214-The following commands are implemented.
ABOR APPE CDUP CWD DELE HELP LIST MDTM
MKD MODE NLST NOOP PASS PASV PORT PWD
QUIT REST RETR RMD RNFR RNTO SITE SIZE
STAT STOR STOU STRU SYST TYPE USER
214 End of help.
分享到:
相关推荐
代理服务器软件SuperProxy客户端FlashFXP代理设置方法代理服务器 - 代理服务器软件SuperProxy客户端FlashFXP代理设置方法代理服务器是指使用代理服务器软件SuperProxy和客户端FlashFXP进行代理设置的方法。该方法...
代理服务器设置 代理服务器 代理服务器设置
### FTP代理服务器的研究与实现 #### 摘要与引言概述 《FTP代理服务器的研究与实现》一文,由南京理工大学计算机科学与工程系的徐斌和孙亚民撰写,发表于1999年的《小型微型计算机系统》期刊。文章首先分析了FTP...
### Socket 实现 HTTP 代理服务器的关键知识点 #### 一、HTTP 代理服务器的基本概念与工作原理 HTTP 代理服务器是一种中介服务,它位于客户端(如浏览器)与目标服务器之间,帮助客户端发送请求到目标服务器,并将...
代理服务器在此扮演的角色是中转站,允许用户通过代理服务器访问互联网,从而提高匿名性或解决网络访问限制。 描述中提到"支持配置",意味着该代理服务器代码允许用户自定义配置参数,例如端口号、连接超时时间、...
本主题将深入探讨如何使用Java语言来编写这样的代理服务器。以下是对这个主题的详细解析: 首先,理解HTTP代理服务器的基本原理是必要的。HTTP代理服务器作为客户端与目标服务器之间的中介,它接收客户端的HTTP请求...
用delphi编写设计一款自己的代理服务器软件,实现思路:当前流行的浏览器的系统选项中有一个参数,即“通过代理服务器连接”,经过编程测试,当局域网中一台工作站指定了该属性,再发出Internet请求时,请求数据将...
"vc++编写的基于socket5的代理服务器源代码" 指的是一项使用Microsoft Visual C++(vc++)编程语言开发的软件项目,该项目实现了基于Socket5协议的代理服务器功能。Socket5是一种通用的代理协议,允许客户端通过...
代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给...
3. 代理服务器原理:代理服务器作为一个中间人,接收客户端的请求,并转发到目标服务器,同时将响应返回给客户端。在此源码中,我们将学习如何构建一个能处理HTTPS请求的代理服务器,涉及网络套接字编程,如TCP连接...
目标服务器处理请求后,将响应返回给代理服务器,代理服务器再将这个响应转发回给客户端。 在这个描述中,提到了项目是用VC6(Visual C++ 6.0)开发的,这意味着它是用C++语言编写的,并且利用了MFC(Microsoft ...
在IT行业中,代理服务器是一种非常重要的网络工具,它在客户端和目标服务器之间充当中介,用于转发请求和响应。代理服务器可以用于多种用途,包括访问受限的网站、提高网络性能、提供安全过滤等。本项目标题为"代理...
C#代理服务器 支持Socket5、FTP、等多种协议的代理服务器 可运行决定真实
作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器), Last.fm 描述了成功并且美妙的使用经验. Nginx 是一个 安装非常的简单 , 配置文件 ...
易语言HTTPS代理服务器源码,HTTPS代理服务器,HTTP_HTTPS_启动代理服务器,HTTP_HTTPS_停止代理服务器,延时_超级延时,UnicodeToAnsi2,进程是否有效,进程创建,获取宽带帐号密码,文本_取文本中间,重拨_cmd,拨号_cmd,断开...
在IT领域,代理服务器是一种重要的网络工具,它作为客户端与目标服务器之间的中介,可以提供多种功能,包括数据缓存、安全防护以及匿名浏览等。在实际应用中,自动切换代理服务器的技术尤其受到重视,因为它能根据...
全球网络代理服务器精灵是一款专为网络用户设计的实用工具,其主要功能在于自动化地获取、查询、验证并保存网络代理服务器的信息。代理服务器在互联网世界中扮演着重要的角色,它作为一个中间媒介,允许用户通过其IP...
设计并实现一个基本 HTTP 代理服务器。要求在指定端口(例如 8080)接收来自客户的 HTTP 请求并且根据其中的 URL 地址访问该地址所指向的 HTTP 服务器(原服务器),接收 HTTP 服务器的响应报文,并将响应报文转发给...
"遥志代理服务器"是一款专为局域网设计的上网共享解决方案。它允许在局域网内的一台具有互联网访问权限的计算机上运行代理服务器,这样网络内的其他计算机可以通过配置浏览器的代理设置,来间接地通过这台代理服务器...
IE代理服务器设置被禁用问题 收藏 有时管理员为了限制上网,将IE代理服务器设置禁用了,我们只要通过组策略将其启用即可。 单击“开始->运行”,输入“gpedit.msc”打开组策略: 对于IE5.0/6.0 ,依次...