import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class Telnet {
Socket serverSocket; // 连接用socket
public OutputStream serverOutput; // 用于网络输出的流
public BufferedInputStream serverInput; // 用于网络输入的流
String host; // 连接服务器的地址
int port; // 连接服务器的端口号
static final int DEFAULT_TELNET_PORT = 23; // telnet的端口号(23号)
// 构造器(1):指定地址和端口号时用
public Telnet(String host, int port) {
this.host = host;
this.port = port;
}
// 构造器(2)只指定地址时用
public Telnet(String host) {
this(host, DEFAULT_TELNET_PORT); // 假定为Telnet端口
}
// openConnection 方法
// 由地址和端口号虽构成Socket而开成流
public void openConnection() throws IOException, UnknownHostException {
serverSocket = new Socket(host, port);
serverOutput = serverSocket.getOutputStream();
serverInput = new BufferedInputStream(serverSocket.getInputStream());
// 若连接的是Telnet端口则进行协商
if (port == DEFAULT_TELNET_PORT) {
negotiation(serverInput, serverOutput);
}
}
// main_proc方法
// 启动进行网络处理的线程
public void main_proc() throws IOException {
try {
// 生成线程用streamConnector类的对象
StreamConnector stdin_to_socket = new StreamConnector(System.in,
serverOutput);
StreamConnector socket_to_stdout = new StreamConnector(serverInput,
System.out);
// 生成线程
Thread input_thread = new Thread(stdin_to_socket);
Thread output_thread = new Thread(socket_to_stdout);
// 启动线程
input_thread.start();
output_thread.start();
} catch (Exception e) {
System.err.print(e);
System.exit(1);
}
}
// 定义用于协商的命令
static final byte IAC = (byte) 255;
static final byte DONT = (byte) 254;
static final byte DO = (byte) 253;
static final byte WONT = (byte) 252;
static final byte WILL = (byte) 251;
// negotiation 方法
// 利用NVT进行协商通信
static void negotiation(BufferedInputStream in, OutputStream out)
throws IOException {
byte[] buff = new byte[3]; // 接收命令的数组
while (true) {
in.mark(buff.length);
if (in.available() >= buff.length) {
in.read(buff);
if (buff[0] != IAC) { // 协商结束
in.reset();
return;
} else if (buff[1] == DO) { // 对于DO命令......
buff[1] = WONT; // 用WONT作为应答
out.write(buff);
}
}
}
}
// main方法
// 建立TCP连接,开始处理
public static void main(String[] arg) {
try {
Telnet t = null;
// 由参数个数决定调用哪个构造器
// switch (arg.length) {
// case 1: //只指定服务器地址
// t = new Telnet(arg[0]);
// break;
// case 2: //指定地址和端口
// t = new Telnet(arg[0], Integer.parseInt(arg[1]));
// break;
// default: //使用方法不正确时
// System.out.println(
// "usage:java Telnet <host name> { <port number> } ");
// return;
// }
t = new Telnet("222.211.88.185", 23);
t.openConnection();
t.main_proc();
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
}
// StreamConnector类
// 接收流参数以二者结合实现数据传递
// StreamConnector类是用于构造线程序的类
class StreamConnector implements Runnable {
InputStream src = null;
OutputStream dist = null;
// 构造器 接收输入输出流
public StreamConnector(InputStream in, OutputStream out) {
src = in;
dist = out;
}
// 执行处理的函数体
// 无限循环进行流的读写
public void run() {
byte[] buff = new byte[1024];
while (true) {
try {
int n = src.read(buff);
if (n > 0) {
dist.write(buff, 0, n);
}
} catch (Exception e) {
e.printStackTrace();
System.err.print(e);
System.exit(1);
}
}
}
}
分享到:
相关推荐
### Telnet的Java实现 #### 一、简介 在计算机网络中,Telnet协议是一种用于远程登录的标准协议和应用程序,可以让我们在本地机器上完成对远程服务器的操作。它通过TCP/IP协议栈建立一个虚拟终端连接到远程主机。...
接下来,我们将详细讨论TELNET协议的关键组成部分:网络虚拟终端(NVT)、选项协商机制、对称性问题及其解决方案。 ### TELNET协议概述 TELNET协议定义了一种标准化的方法来实现不同类型的终端设备之间的交互。它...
《telnet协议与Java客户端源代码解析》 在IT领域,网络通信协议是构建网络应用的基础,其中telnet协议作为一款历史悠久的远程登录协议,它为用户提供了在不同主机之间进行交互的能力。本文将深入探讨telnet协议的...
在Java编程环境中,实现telnet-client工具主要是为了进行远程终端通信。Telnet协议是一种网络协议,允许用户通过网络连接到远程主机并执行命令,类似于SSH(Secure Shell)但不提供加密和安全性的保障。Apache ...
Java语言实现的Telnet客户端程序是一种能够连接到远程服务器并执行命令或进行交互的工具。在本资源中,开发者提供了一个具有图形用户界面(GUI)的实现,使得用户可以通过直观的界面来操作 Telnet 客户端,而不再...
这个“简易的telnet操作java.rar”资源可能包含了一个简单的Java程序示例,用于演示如何进行Telnet操作。 首先,我们来了解一下Java中的Telnet操作。在Java中,可以使用`jcraft`库的`jcpt`子包来处理Telnet协议。`...
### 使用Socket编程实现Telnet协议的关键知识点 #### 1. Telnet协议概述 Telnet协议是一种广泛应用于TCP/IP协议族中的远程登录协议。它允许用户(即Telnet客户端)通过网络与远程设备(如服务器)建立连接,并进行...
Java GUI实现Telnet登录交换机是一项常见的网络管理任务,它涉及到Java编程、图形用户界面(GUI)设计以及网络通信协议的使用。在这个过程中,开发者通常会利用Java的Swing库来构建GUI,Jsch库来处理Telnet通信,...
Java 实现模拟 SSH 和 Telnet 登陆,以及发送与接收命令是网络编程中常见的需求,主要应用于自动化测试、远程系统管理或数据交换等场景。在本文中,我们将深入探讨如何利用 Java 实现这一功能。 首先,SSH(Secure ...
总结来说,通过Java实现一个Telnet服务器涉及的关键技术包括TCP/IP协议、Java的Socket编程以及可能的协议扩展和安全增强。实际项目中,需要根据需求对上述代码进行相应的扩展和优化,以满足特定的业务场景。
在本文中,我们将使用 Wireshark 对 Telnet 协议进行抓包分析,了解 Telnet 协议的工作原理和实现机制。 首先,让我们了解 Telnet 协议的基本概念。Telnet 是一个基于 TCP/IP 协议族的远程登陆服务协议,允许用户在...
**Telnet**协议是一种广泛应用于互联网上的远程登录协议,其主要功能在于实现不同网络环境下的远程主机访问。该协议处于OSI七层模型的应用层,直接运行在传输层的TCP协议之上。Telnet协议允许用户通过简单的命令行...
根据提供的文件信息,本文将详细解析“C++实现Telnet代码”的相关知识点,包括Telnet协议的基本概念、C++编程语言的特点以及如何使用C++来实现一个简单的Telnet客户端。 ### Telnet协议简介 Telnet(Teletype ...
Java Telnet客户端是一种基于TCP协议的应用程序,它允许用户通过Java编程语言与远程服务器上的Telnet服务进行交互。在Java中实现一个Telnet客户端可以帮助开发者远程控制或测试其他支持Telnet的服务,例如网络设备...
### Java实现Telnet服务器执行脚本的关键知识点 在IT领域,远程访问和管理服务器是常见的需求,而Telnet协议提供了一种基于文本的网络通信方式,允许用户从远程客户端连接到服务器并执行命令。Java作为一种广泛应用...
重点介绍了网络虚拟终端、选项协商和对称性的基本原理和应用,以及如何在VC 6.0环境下利用WinSock进行网络编程,实现Telnet协议的相关功能。这对于网络协议的深入学习和实际应用开发具有重要的参考价值。
本文将深入探讨如何使用C#编程语言实现telnet功能,并结合提供的文件名称"ScriptingTelnet"来解析其可能包含的实现方式。 C#是一种强大的面向对象的编程语言,广泛应用于Windows应用程序开发,Web服务,游戏开发等...