⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 telnetthread.cpp

📁 telnet_server实现telent的简单功能
💻 CPP
字号:
///////////////////////////////////////////////////////////////////////
// Filename: telnetthread.cpp
//
// Date    : 27-May-2001
// Author  : J.Hogendoorn ( jeroenhog@gmx.net )
//
// Note    : this code may be used anywhere as long
//         : as this comment remains. 
//
///////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "telnet.h"

//////////////////////////////////////////////////////////////////////
// Function: TelnetThread
// In      : pointer to CTelnet instance
// Out     : none
// Purpose : uses CTelnet and CTelnetSocket to implement a telnet service
// Note    : runs as a seperate thread
void TelnetThread(void* telnet)
{
	// get pointer to telnet class
	CTelnet* tel = (CTelnet*)telnet;

	// if initialize fails, we'd better stop
	if ( !tel->getTelnetSocket()->initialize( tel->getPortNumber() ) )
	{
		tel->setLastError( "starting telnet server failed: " + tel->getTelnetSocket()->getLastError() );

		// signal event ( makes main thread run )
		SetEvent( tel->getThreadStartupFailedEvent() );
		return;
	}

	// signal event ( makes main thread run )
	SetEvent( tel->getThreadStartupSucceededEvent() );

	// loop forever
	while(1)
	{
		// we are not logged on yet
		tel->setNotLoggedOn();

		if ( !tel->getTelnetSocket()->waitForConnection() )
		{
			continue;
		}

		////////////////////////////////////////////////////////////////////////////////
		// login sequence 
		////////////////////////////////////////////////////////////////////////////////

		// we got a connection now, send the intro screen
		if ( !tel->getTelnetSocket()->sendData( tel->getIntroScreen() ) )
		{
			tel->getTelnetSocket()->closeClientSocket();
			continue;
		}

		CString sUserId;
		if ( tel->getUserId().GetLength() != 0 )
		{
			// ask for userid (send)
			if ( !tel->getTelnetSocket()->sendData( tel->getUserIdPrompt() ) )
			{
				tel->getTelnetSocket()->closeClientSocket();
				continue;
			}

			// ask for userid (receive)
			if ( !tel->getTelnetSocket()->waitForData( sUserId ) )
			{
				tel->getTelnetSocket()->closeClientSocket();
				continue;
			}
		}

		CString sPasswd;
		if ( tel->getPassword().GetLength() != 0 )
		{
			// ask for password (send)
			if ( !tel->getTelnetSocket()->sendData( tel->getPasswordPrompt() ) )
			{
				tel->getTelnetSocket()->closeClientSocket();
				continue;
			}

			// ask for password (receive)
			if ( !tel->getTelnetSocket()->waitForData( sPasswd , true ) )
			{
				tel->getTelnetSocket()->closeClientSocket();
				continue;
			}

		}

		// check for correct password or userid
		if ( tel->getUserId().GetLength() != 0 )
		{
			if ( tel->getUserId() != sUserId )
			{
				// make brute force attack more difficult
				Sleep(5000);

				tel->getTelnetSocket()->closeClientSocket();
				continue;
			}
		}
		if ( tel->getPassword().GetLength() != 0 )
		{
			if ( tel->getPassword() != sPasswd )
			{
				// make brute force attack more difficult
				Sleep(5000);

				tel->getTelnetSocket()->closeClientSocket();
				continue;
			}
		}

		// logged on now
		tel->setLoggedOn();

		///////////////////////////////////////////////////////////////////////////
		// handle commands
		///////////////////////////////////////////////////////////////////////////
		while(1)
		{

			// send the prompt
			if ( !tel->getTelnetSocket()->sendData( tel->getPrompt() ) )
			{
				tel->getTelnetSocket()->closeClientSocket();
				continue;
			}

			// handle commands
			CString sCommand;
			if ( !tel->getTelnetSocket()->waitForData( sCommand ) )
			{
				tel->getTelnetSocket()->closeClientSocket();
				continue;
			}

			CString sArgs;
			callback fun = tel->matchFunction( sCommand , sArgs );
			if ( fun != NULL )
			{
				CString sDataBack = fun( sArgs );
				if ( !tel->getTelnetSocket()->sendData( sDataBack ) )
				{
					tel->getTelnetSocket()->closeClientSocket();
					continue;
				}
			}
		}
	}
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -