6、TELNET终端设计与实现
一、设计题目
6、TELNET终端设计与实现
二、设计内容
设计一个 TELNET 终端程序。
三、设计步骤
3.1原理分析
Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。
基本工作过程如下:
1)本地与远程主机建立连接。该过程实际上是建立一个TCP连接,用户必须知道远程主机的Ip地址或域名;
2)将本地终端上输入的用户名和口令及以后输入的任何命令或字符以NVT(Net Virtual Terminal)格式传送到远程主机。该过程实际上是从本地主机向远程主机发送一个IP数据包;
3)将远程主机输出的NVT格式的数据转化为本地所接受的格式送回本地终端,包括输入命令回显和命令执行结果;
4)最后,本地终端对远程主机进行撤消连接。该过程是撤销一个TCP连接。
3.2编程设计
1,一般步骤
- 创建WSADATA
- 选择dll版本
- Winsock服务初始化
- 找到可用Winsock DLL
- 创建远程连接
2,客户端:
- 创建socket
- 连接服务器地址
- 持续发送命令
3,服务器端:
- 创建socket
- 绑定socket
- 监听
- 处理连接请求
- 接收命令并执行
关键代码
寻找Winsock.dll
if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {
/* Tell the user that we could not find a usable */
/* Winsock DLL. */
printf("Could not find a usable version of Winsock.dll\n");
WSACleanup();
return -1;
}
本地主机:数据发送与意外情况分析:
printf("Please input the command you want to send \n");
scanf("%s",sz_send_info);
iRet=send(client, (char*)sz_send_info, sizeof(sz_send_info), 0);
if (iRet!=SOCKET_ERROR)
{
printf("send successfully\n");
}
else
{
printf("failed to send");
}
远程主机:数据获取与命令执行
iRet = recv(client, szInfo, 1013, 0);
if (0 >= iRet)
{
continue;
}
else
{
system(szInfo); //开始进行数据处理
iRet = -1;
}
程序流程图
6,Telnet main 6,Telnet CreateServerSocket
6,Telnet CreateClientSocket
四、调试过程
关于远程控制的问题,自己一开始没想明白需要运用哪个函数。后来借助System,倒是加以解决。
五、结果及分析
本地主机分别输入ipconfig(查看IP地址)和Write(打开写字板)
远程主机的反馈:
1)执行ipconfig
2)执行write
六、心得体会
远程控制,对控制者的计算机水平倒也有一定的要求,如基本的命令行语句。
客户端发起控制请求:
#include <winsock2.h>
#include <iostream>
#include <windows.h>#pragma comment(lib, "ws2_32.lib")bool CreateClientSocket()
{BOOL bRet = FALSE;do{//1、创建套接字SOCKET client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (INVALID_SOCKET == client){SetLastError(WSAGetLastError());break;}//2、连接服务器socke地址sockaddr_in server_addr = { 0 };server_addr.sin_family = AF_INET;server_addr.sin_port = htons(28888); //htons:将参数转换成TCP/IP字节序列server_addr.sin_addr.S_un.S_addr = inet_addr("192.168.43.111");//IP地址//10.11.50.111 虚拟机:192.168.48.128if (SOCKET_ERROR == connect(client, (sockaddr*)&server_addr, sizeof(server_addr))){SetLastError(WSAGetLastError());break;}//3、发送数据char sz_send_info[1024] = { 0 };int iRet = 0;while (1){printf("Please input the command you want to send \n");//std::cin >> sz_send_info;scanf("%s",sz_send_info);iRet=send(client, (char*)sz_send_info, sizeof(sz_send_info), 0);if (iRet!=SOCKET_ERROR){printf("send successfully\n");}else{printf("failed to send");}}bRet = TRUE;} while (FALSE);return bRet;
}int main()
{WORD wVersionRequested;WSADATA wsaData;int err;/* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */wVersionRequested = MAKEWORD(2, 2);err = WSAStartup(wVersionRequested, &wsaData);if (err != 0) {printf("WSAStartup failed with error: %d\n", err);return -1;}if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {/* Tell the user that we could not find a usable *//* Winsock DLL. */printf("Could not find a usable version of Winsock.dll\n");WSACleanup();return -1;}if (FALSE == CreateClientSocket()){//printf("CreateClientSocket failed with error: %d\n", GetLastError());return -1;}system("pause");WSACleanup();return 0;
}
服务器端接收请求:
//
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <winsock2.h>
#include <iostream>
#include<windows.h>
#pragma comment(lib, "ws2_32.lib")bool CreateServerSocket()
{BOOL bRet=FALSE;do{//1、创建套接字SOCKET server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (INVALID_SOCKET== server){SetLastError(WSAGetLastError());break;}//2、绑定Socket到本地sockaddr_in server_addr = {0};server_addr.sin_family = AF_INET;server_addr.sin_port = htons(28888); //htons:将参数转换成TCP/IP字节序列server_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//以主机进行测试if (SOCKET_ERROR == bind(server, (sockaddr*)&server_addr, sizeof(server_addr))){SetLastError(WSAGetLastError());break;}//3、监听if (SOCKET_ERROR == listen(server, 10)){SetLastError(WSAGetLastError());break;}//4、处理连接请求sockaddr_in client_addr = {0};int len = sizeof(client_addr);SOCKET client=accept(server, (sockaddr*)&client_addr, &len);if (INVALID_SOCKET == client){SetLastError(WSAGetLastError());break;}//5、接受数据char szInfo[1024] = { 0 };int iRet=-1;while (1){iRet = recv(client, szInfo, 1013, 0);if (0 >= iRet){continue;}else{system(szInfo); //开始进行数据处理iRet = -1;}}bRet = TRUE;} while (FALSE);return bRet;
}int main()
{WORD wVersionRequested;WSADATA wsaData;int err;/* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */wVersionRequested = MAKEWORD(2, 2);err = WSAStartup(wVersionRequested, &wsaData);if (err != 0) {/* Tell the user that we could not find a usable *//* Winsock DLL. */printf("WSAStartup failed with error: %d\n", err);return -1;}if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {printf("Could not find a usable version of Winsock.dll\n");WSACleanup();return -1;}if (FALSE==CreateServerSocket()){//printf("CreateServerSocket failed with error: %d\n",GetLastError());return -1;}system("pause");WSACleanup();return 0;
}
6、TELNET终端设计与实现相关推荐
- 计算机网络课程设计之TELNET 终端设计与实现
前言 Telnet设计是一个比较麻烦的东东,因为Telnet服务器需要部署,而且网络上的资料比较少,最后通过在云服务器CentOS上安装Telnet服务器然后自己的程序作为一个Telnet客户端测试成 ...
- SSH,telnet终端中文显示乱码解决办法
SSH,telnet终端中文显示乱码解决办法 vi /etc/sysconfig/i18n 将内容改为 LANG="zh_CN.GB18030" LANGUAGE="zh ...
- cisco的telnet终端显示debug调试信息
telnet到cisco设备的终端模式却无法显示本地串口模式下得debug信息,需要使用一下命令: 打开终端显示: SW-01#terminal monitor 打开日志功能: SW-01(confi ...
- ymodem传输的终端工具_Serial for Mac(现代化的终端设计软件)
Serial Mac是Mac os系统上一款现代化的终端设计软件,使与服务器,网络设备的工作,并为工程师和系统管理员嵌入式硬件更容易.内置从头开始为OS X,串行不再需要搜索并安装驱动程序,以便与大多 ...
- LoRaWAN介绍15 终端设计
LoRaWAN介绍15 终端设计 "大自然和智慧在任何事物上都不存在分岐"--玉外纳 因为应用在广阔的行业内,在传感器.执行器.供电.通信延时等不同的要求,让LoRaWAN的End ...
- 报告论文:汽车GPS调度系统车载终端设计技术方案
汽车GPS调度系统车载终端设计技术方案 背景: 随着科技的发展,GPS民用化的趋势越来越让人期待.因为芯片小型化技术的日趋成熟,使得GPS芯片组在缩小体积或是降低耗电量等方面都有很大的突破. 这样,高 ...
- tcm可信密码模块linux,基于可信密码模块的可信电子签名终端设计与实现
目前电子签名都是在普通PC上进行的,但普通PC的运行环境可能被恶意程序感染, 可信PC能够有效解决普通PC的安全问题,但是当前PC上可信计算的研究还面临许多瓶 颈,特别是信任链难以通过PC上操作系统进 ...
- linux命令行sip电话,基于Linux和MiniGUI的SIP电话终端设计
0 引言 随着VoIP的迅猛发展,越来越多的个人用户正在使用软件电话.IP电话通过VoIP系统拨打国内和国际长途,IP电话的需求量越来越大,同时,人们对IP电话的要求也越来越高,例如要求IP电话体积小 ...
- T-BOX 车载网联终端设计
本文由吴纪铎,刘爱松,赵梦海联合创作 摘要 基于瑞萨RH850微控制器.TICC2640R2F蓝牙微控制器.高通MDM9628微处理器设计了一款T-BOX车载终端.该终端通过CAN总线技术.GPS定位 ...
最新文章
- 淘宝李晓拴:淘宝网PHP电子商务应用
- IBM X3650 M3服务器上RAID配置实战
- 2.2 数个常用的特殊符号
- spring中@Inject和@Autowired的区别?分别在什么条件下使用呢?
- Spring 3 MVC and JSR303 @Valid example
- 做一个项目,平时都用到哪些工具提高效率(上)[转]
- Spring mvc 响应字符串
- 概率论与数理统计(二)选择题
- time clock getrusage clock_gettime gettimeofday timespec_get 对比
- 判断数组、集合list、string、int、double等是否为空,判断是否为值类型
- 如何制作一个简单的APP应用软件?
- matlab匿名函数求导,MATLAB进行匿名函数求导出现错误
- 论文阅读《PatchMatchNet: Learned Multi-View Patchmatch Stereo》
- arduino tft 方向_在Arduino上使用1.8英寸TFT显示屏的入门指南
- 用java编国际象棋3之将军与悔棋
- 完美解决丨1. **`SyntaxError: invalid syntax`**
- 毕业设计 - 基于Java的聊天室系统设计与实现【源码+论文】
- 英语十大词性之二 - 动词
- 奶爸日记4 - 海边看轮船玩滑梯
- 2019牛客多校训练第十场F	Popping Balloons