Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2010, 13:26   #1
Mu$T@nG
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 19
По умолчанию telnet c++

нужно написать программу, которая в телнете выполняет нужные команды

Код:
#include <iostream>
#include <stdlib.h>
#include <windows.h>
using namespace std;
int main()
{
	cout<<"Welcome to the Direcway Restart Program" <<endl;
	cout<<"-----------------------------------------" << endl;
	system("telnet mail.belpak.by 110");
	cout<<"You have succesfully" <<endl;
	return 0;
}
вот мой код, а как дальше отправить, ну например "user mise", чтобы команду приняло
Mu$T@nG вне форума Ответить с цитированием
Старый 08.07.2010, 13:54   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

гляньте команды белпака тут: http://www.belhost.by/pop3smtp/p3telnet.shtml и также через system передавайте
NiCola999 вне форума Ответить с цитированием
Старый 08.07.2010, 13:58   #3
Mu$T@nG
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 19
По умолчанию

допустим если так, то он заходит в телнет, коннектится и всё, т.е. команда не проходит
Код:
#include <iostream>
#include <stdlib.h>
#include <windows.h>
using namespace std;
int main()
{
	cout<<"Welcome to the Direcway Restart Program" <<endl;
	cout<<"-----------------------------------------" << endl;
	system("telnet mail.belpak.by 110");
	Sleep(500);
	system("user mikola");
	cout<<"You have succesfully" <<endl;
	return 0;
}
Mu$T@nG вне форума Ответить с цитированием
Старый 08.07.2010, 14:03   #4
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

ааа не, так не получится... наверно надо через сокеты конектиться и отсылать сообщения, в винде вроде библиотека WinSock. Но я ей не пользовался. Просто понимаешь, system отсылает строку через поток командной строки, а когда ты конектишься к серверу, у него собственный поток, к которому надо подсоединиться

Последний раз редактировалось NiCola999; 08.07.2010 в 14:06.
NiCola999 вне форума Ответить с цитированием
Старый 08.07.2010, 14:10   #5
Mu$T@nG
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 19
По умолчанию

а как нибудь по другому через телнет можно? вы вроде сказали что через систем
Mu$T@nG вне форума Ответить с цитированием
Старый 08.07.2010, 14:11   #6
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

кстати, я тут подумал, а что если сымитировать нажатие клавиш на клавиатуре, чтоб команды писались =)

bat тоже не получится

Последний раз редактировалось NiCola999; 08.07.2010 в 14:14.
NiCola999 вне форума Ответить с цитированием
Старый 08.07.2010, 14:18   #7
Mu$T@nG
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 19
По умолчанию

а как сымитировать данное действие?
Mu$T@nG вне форума Ответить с цитированием
Старый 08.07.2010, 14:26   #8
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

самому интересно...

Последний раз редактировалось NiCola999; 08.07.2010 в 16:50.
NiCola999 вне форума Ответить с цитированием
Старый 08.07.2010, 16:31   #9
Mu$T@nG
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 19
По умолчанию

тема актуальна
Mu$T@nG вне форума Ответить с цитированием
Старый 08.07.2010, 17:46   #10
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

Цитата:
ааа не, так не получится... наверно надо через сокеты конектиться и отсылать сообщения, в винде вроде библиотека WinSock. Но я ей не пользовался. Просто понимаешь, system отсылает строку через поток командной строки, а когда ты конектишься к серверу, у него собственный поток, к которому надо подсоединиться
тоесть никак нельзя.

Цитата:
кстати, я тут подумал, а что если сымитировать нажатие клавиш на клавиатуре, чтоб команды писались =)
Цитата:
а как сымитировать данное действие?
Не вижу сложности в том, чтобы самому организовать передачу данных. Это проще чем имитировать нажатия клавиш.
Это мне нужно было для одной цели.. вообщем отличае от телнета в том, что телнет отправляет данные сразу же при нажатии клавиши.
Код:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <string>
#include <winsock.h>

#include <mem.h>

using namespace std;

typedef struct Dc_Handle{
	int Socket;
	bool ok;
}DC_HANDLE;

typedef struct Socket{
 int Sock;
 string DestHost;
 int RemotePort;
 BYTE * Buffer;
 int BufferSize;
 struct sockaddr_in server;
 HANDLE	hNetThread;
 DWORD	dwNetThreadId;
 struct hostent	*host;

 DC_HANDLE h;
}TSOCKET;

void CharToWChar(const char * Text,wchar_t * &res)
{
	size_t convert=0;
	size_t bytes = strlen(Text)*2;
	res = (wchar_t*) calloc(bytes,sizeof(wchar_t*));
	setlocale(LC_CTYPE, "Russian_Russia.1251");
	mbstowcs(res,Text,bytes);
	//return res;
}
void WCharToChar(const wchar_t * Text,char * &Res)
{
	size_t convert=0;
	size_t bytes = wcslen(Text)*2;
	Res = (char *)calloc(bytes,1);
	setlocale(LC_CTYPE, "Russian_Russia.1251");
	wcstombs(Res, Text, bytes);
}

void CommandLineToArgv(const char * line, char ** &argv, int &argc)
{
	wchar_t * res;
	CharToWChar(line,res);
	wchar_t ** wres = CommandLineToArgvW(res,&argc);
	free(res);

	argv = (char**)calloc(argc,sizeof(char**));
	for (int i=0;i<argc;i++)
	{
		WCharToChar(wres[i],argv[i]);
	//	free(wres[i]);
	}
	//free(wres);
}

HANDLE h;
DWORD hID;
bool end = false,wait = true;

DWORD WINAPI Recv(LPVOID lParam)
{
	char buff[1024];
	int sock = *(int*)lParam;
	while (1)
	{
		int ret = recv(sock,buff,1024,0);
		if (ret <= 0)
		{
			printf("Connection lost. Press ENTER to continue...\n");
			end = true;
			//keybd_event(13, 0, 0 ,0);
			//keybd_event(13, 0, KEYEVENTF_KEYUP,0);
			break;
		}
		else
		{
			buff[ret]=0;
			printf("%s\n",buff);
			wait = false;
		}
	}
	return 0;
}

void InitWSA()
{
 WSADATA wsd;
 WSAStartup(MAKEWORD(2,2), &wsd);
}


TSOCKET Connect(const char * adress,int Port)
{
	TSOCKET sSocket;
	sSocket.DestHost = string(adress);
	sSocket.RemotePort = Port;
	sSocket.Sock = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
	sSocket.h.Socket = sSocket.Sock;
	if (sSocket.Sock < 1)
	{
		sSocket.h.ok = false;
		return sSocket;
	}
	sSocket.server.sin_family = AF_INET;
	sSocket.server.sin_port = htons(Port);
	sSocket.server.sin_addr.s_addr = inet_addr(sSocket.DestHost.c_str());
	if (sSocket.server.sin_addr.s_addr == INADDR_NONE)
	{
		sSocket.host = gethostbyname(sSocket.DestHost.c_str());
		if (sSocket.host == NULL)
		{
			sSocket.h.ok = false;
			return sSocket;
		}
		memcpy(&sSocket.server.sin_addr, sSocket.host->h_addr_list[0],sSocket.host->h_length);
	}
	
	if (connect(sSocket.Sock,(struct sockaddr *)&sSocket.server,sizeof(sSocket.server)) == SOCKET_ERROR)
	{
		sSocket.h.ok = false;
		return sSocket;
	}
	h = CreateThread(NULL,0,Recv,&sSocket.Sock,0,&hID);
	Sleep(100);
	return sSocket;

}

int SendLongBuff(unsigned char * szBuff,int Len,int sock)
{
 int nSendSize = Len;
 int iCurrPos = 0;
 while(nSendSize >0)
 {
  int ret = send(sock, (char*)&szBuff[iCurrPos], nSendSize, 0);
  if (ret == 0)return -1;
  else if (ret == SOCKET_ERROR)return iCurrPos;
  nSendSize -= ret;
  iCurrPos += ret;
 }
 return 0;
}

void clear()
{
	system("cls");
}

int _tmain(int argc, _TCHAR* argv[])
{
	BEGIN:
	char * buff; New(buff,5000);
	printf("Telnet client v1.0\n");
	printf("Usage: [host] [port]\n");
	gets(buff);
	if (!strcmp(buff,"quit")) exit(0);

	char ** c_argv;
	int c_argc;
	CommandLineToArgv(buff,c_argv,c_argc);
	InitWSA();
	clear();
	TSOCKET sock = Connect(c_argv[0],atoi(c_argv[1]));
	if (sock.h.ok)
	{
		Free(buff);
		while (!end)
		{
			wait = true;
			New(buff,5000);
			gets(buff);
			SendLongBuff((BYTE*)buff,strlen(buff),sock.Sock);
		}
		end = false;
		goto BEGIN;
	}
	else
	{
		Free(buff);
		clear();
		goto BEGIN;
	}
	return 0;
}
подпись

Последний раз редактировалось liljon; 08.07.2010 в 17:54.
liljon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Telnet+smtp MaximeMD Помощь студентам 2 03.09.2009 19:07
assembler запуск службы telnet heart Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 16.03.2009 18:12