telnet指令研究—以网络聊天程序为例
一、telnet指令
Telnet取名自Telecommunications和Networks的联合缩写,是早期个人计算机上连接到服务器主机的一个网络指令,由于存在安全问题,现在已经很少被使用。在windows操作系统中仍然存在这个指令,但是默认被系统禁用,可以通过以下步骤来打开:
控制面板 》 程序和功能 》 启用或关闭Windows功能 》 勾选“Telnet Client”复选框 》 确定
在Windos Powershell中输入telnet是否已经启用:
~/userName > telnet
~/userName > 欢迎使用 Microsoft Telnet Client ! Escape 字符为 'CTRL+]'
Mirosoft Telnet >
使用 ?/help 查看可用操作:
Microsoft Telnet > ?/help
命令可能是缩写。支持的命令为:
c - close 关闭当前连接
d - display 显示操作参数
o - open hostname [port] 连接到主机(默认端口 23)。
q - quit 退出 telnet
set - set 设置选项(键入 'set ?' 获得列表)
sen - send 将字符串发送到服务器
st - status 打印状态信息
u - unset 解除设置选项(键入 'set ?' 获得列表)
?/h - help 打印帮助信息
Microsoft Telnet >
使用telnet指令登录到服务器之后,登录者就可以访问和使用服务器上的软硬件资源,登入者在终端输入的命令会在目标主机上运行,就像在使用本机一样。换句话说,telnet像是一个远程工具,它使你可以远程控制目标主机。
telnet基于TCP实现,它的默认端口是23。从协议层次上来说,它工作在应用层。
二、telnet访问远程服务器实例
首先我们需要一个服务端程序用来与telnet客户端互动,下面是一个基于java语言的简单的网络聊天程序:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner; /**
* Server
*/
public class Server {
private static final int PORT = 4000;
public final String END_OF_MESSAGE = "$$"; public void launch() throws IOException {
ServerSocket server = new ServerSocket(PORT);
Socket requSocket = server.accept(); InputStream inStream = requSocket.getInputStream();
OutputStream outputStream = requSocket.getOutputStream(); Scanner in = new Scanner(inStream);
PrintWriter out = new PrintWriter(outputStream, true /* autoFlush */); out.println("Welcome! Let talk.");
while (in.hasNextLine()) {
String line = in.nextLine();
if (line.equals("Hello")) {
out.println("Hi");
} else if (line.equals("Bye")) {
out.println("Bye");
out.println(END_OF_MESSAGE);
break;
} else {
out.println("Can't understand what you said!");
}
}
in.close();
out.close();
server.close();
} public static void main(String[] args) throws IOException {
new Server().launch();
}
}
为方便测试,我们直接使用本机环回地址127.0.0.1模拟远程地址,并且在服务程序中指定端口号为4000。编译该运行java文件以启动服务。在Windows Powershell中打开telnet客户端并连接到上面的地址和端口:
~/userName > telnet
服务程序打印问候语句,随后就可以按照预先设定的逻辑和服务程序对话:
三、telnet的安全问题
从上面的实例可以看出,使用telnet指令与远程服务端交互是非常方便的,然而这种便利性存在安全隐患。Telnet以明文的方式发送所有数据,对于那些要求要求提供用户名和登录密码的服务端程序来说,用户发来的信息在传输过程中很容易被截获。此外,telnet还存在对数据的完整性不关心的问题,telnet并不检查接收到的消息是否被正确的传输了,它不关心数据在传输过程中是否遭到了篡改。
不过,跟利用telnet进行恶意攻击相比,这些都是小问题。telnet在远程访问主机时具有较大的权限,例如它可以连接到服务器上任何一个开放的端口,对其中一些端口的恶意访问可能带来的安全问题。
针对telnet的安全问题,微软为telnet添加了一个身份验证——NTML,客户端不直接发送用户输入的密码,而是缓存一个对应的哈希值。服务器在接收到哈希值后返回一个随机数,客户端用缓存的哈希值对这个随机数进行加密,服务器再利用域控制器进行用户的验证。通过这种方式可以避免很多使用telnet恶意登录到目标主机的行为。
但是NTML也并不是无法突破的,长远看来,具有加密和身份验证的SSH协议在安全性更高。因此出现稍晚但可靠性更高的SSH比Telnet的应用更为广泛,不过,在某些特定的背景下,比如对安全性要求相对较低的应用场景下,使用telnet可能是个方便的选择。
telnet指令研究—以网络聊天程序为例的更多相关文章
- hello/hi的简单的网络聊天程序
hello/hi的简单的网络聊天程序 0 Linux Socket API Berkeley套接字接口,一个应用程序接口(API),使用一个Internet套接字的概念,使主机间或者一台计算机上的进程 ...
- 以您熟悉的编程语言为例完成一个hello/hi的简单的网络聊天程序
Socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信,应用程序通常通过"套接字"向网络发出 ...
- C# 异步通信 网络聊天程序开发 局域网聊天室开发
Prepare 本文将使用一个NuGet公开的组件技术来实现一个局域网聊天程序,利用组件提供的高性能异步网络机制实现,免去了手动编写底层的困扰,易于二次开发,扩展自己的功能. 在Visual Stud ...
- boost asio异步读写网络聊天程序client 实例具体解释
boost官方文档中聊天程序实例解说 数据包格式chat_message.hpp <pre name="code" class="cpp">< ...
- boost asio异步读写网络聊天程序客户端 实例详解
boost官方文档中聊天程序实例讲解 数据包格式chat_message.hpp <pre name="code" class="cpp">< ...
- python实现一个简单的网络聊天程序
一.Linux Socket 1.Linux Socke基本上就是BSD Socket(伯克利套接字) 伯克利套接字的应用编程接口(API)是采用C语言的进程间通信的库,经常用在计算机网络间的通信.B ...
- 用Java实现简单的网络聊天程序
Socket套接字定义: 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作.套接字允许应用程序将I/O插入到网络中,并与网络中的其他 ...
- 以C语言为例完成简单的网络聊天程序以及关于socket在Linux下系统调用的分析
套接字是网络编程中的一种通信机制,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程. 端 ...
- 使用Java实现hello/hi的简单网络聊天程序
Socket又称套接字,是基于应用服务与TCP/IP通信之间的一个抽象,它是计算机之间进行通信的一种约定或一种方式.通过socket这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送 ...
随机推荐
- spring cloud 面试题总结
前言,随着分布式的时代到来,现在微服务越来越火了,Spring Cloud已经成为一个面试必问的考点,下面我们就Cloud这一些列的组件来一个入门到面试的过程.开篇前,先让大家看几个常见的Spring ...
- 在移动硬盘中安装win10和macos双系统
本文通过在SSD移动硬盘中安装win10和macos双系统,实现操作系统随身携带 小慢哥的原创文章,欢迎转载 目录 ▪ 目标 ▪ 准备工作 ▪ Step1. 清空分区,转换为GPT ▪ Step2. ...
- 【Spring Boot】java.lang.NoSuchMethodError: org.springframework.web.util.UrlPathHelper.getLookupPathForRequest(Ljavax/servlet/http/HttpServletRequest;Ljava/lang/String;)Ljava/lang/String;
Digest:今天Spring Boot 应用启动成功,访问接口出现如下错误,不知到导致问题关键所在,记录一下这个问题. 浏览器报500错误 项目代码如下 Controller.java packag ...
- 机器学习笔记(一)· 感知机算法 · 原理篇
这篇学习笔记强调几何直觉,同时也注重感知机算法内部的动机.限于篇幅,这里仅仅讨论了感知机的一般情形.损失函数的引入.工作原理.关于感知机的对偶形式和核感知机,会专门写另外一篇文章.关于感知机的实现代码 ...
- 20190728_收集的一些链接_关于opencv
https://softwarebydefault.com/tag/pixel-neighbourhood-max/ https://www.cnblogs.com/happystudyeveryda ...
- android 7.0 pm install 失败问题
这两天,把app内置成系统文件或者系统签名取得系统权限,发现使用pm install path在低版本上可行,在高版本就安装失败 抛出 NullPointException,查看了一下源码,发现对包名 ...
- [考试反思]0820NOIP模拟测试27:幻影
注:某让我把“傻孩子”三个字全部删掉了语法不通之处自行脑补(这句本身就语法不通) skyhAK 我和以及milk_feng220 还真的没有考虑过如果我考前3的话这个颜色该怎么表示(自从不粘排行榜以来 ...
- NOIP模拟 1
NOIP模拟1,到现在时间已经比较长了.. 那天是6.14,今天7.18了 //然鹅我看着最前边缺失的模拟1,还是终于忍不住把它补上,为了保持顺序2345重新发布了一遍.. # 用 户 名 ...
- net core WebApi——April.Util更新之权限
目录 前言 权限 中间层 小结 前言 在之前已经提到过,公用类库Util已经开源,目的一是为了简化开发的工作量,毕竟有些常规的功能类库重复率还是挺高的,二是为了一起探讨学习软件开发,用的人越多问题也就 ...
- VMware虚拟机添加5个RAID10磁盘并挂载
1.打开虚拟机之前先添加硬盘设备 具体添加方法详见我https://www.cnblogs.com/Ghost-m/p/11707996.html这个博客 制作RAID需要用到madam命令 mdad ...