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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2010, 19:14   #11
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

А если уж очень хочется через telnet - запустите его через CreateProcess с подменой handle системного ввода
Black Fregat вне форума Ответить с цитированием
Старый 08.07.2010, 19:24   #12
Mu$T@nG
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 19
По умолчанию

Цитата:
Сообщение от liljon Посмотреть сообщение
тоесть никак нельзя.




Не вижу сложности в том, чтобы самому организовать передачу данных. Это проще чем имитировать нажатия клавиш.
Это мне нужно было для одной цели.. вообщем отличае от телнета в том, что телнет отправляет данные сразу же при нажатии клавиши.
Код:
#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;
}
а у меня компилятор ругается на #include <mem.h> =(
Mu$T@nG вне форума Ответить с цитированием
Старый 08.07.2010, 19:40   #13
liljon
Форумчанин
 
Регистрация: 03.01.2010
Сообщений: 229
По умолчанию

потому что это есть только у меня. И вместо функции New используйте calloc. Я думал можно догадаться
подпись
liljon вне форума Ответить с цитированием
Старый 08.07.2010, 19:46   #14
Mu$T@nG
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 19
По умолчанию

а помогите еще вот это исправить
1>c:\users\администратор\documents\ visual studio 2008\projects\location\location\loc ation.cpp(174) : error C3861: 'Free': identifier not found
1>c:\users\администратор\documents\ visual studio 2008\projects\location\location\loc ation.cpp(178) : error C2664: 'calloc' : cannot convert parameter 1 from 'char *' to 'size_t'
1> There is no context in which this conversion is possible
1>c:\users\администратор\documents\ visual studio 2008\projects\location\location\loc ation.cpp(187) : error C3861: 'Free': identifier not found
Mu$T@nG вне форума Ответить с цитированием
Старый 09.07.2010, 15:00   #15
Mu$T@nG
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 19
По умолчанию

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

всё ещё прошу помощи
Mu$T@nG вне форума Ответить с цитированием
Старый 11.07.2010, 12:37   #17
Mu$T@nG
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 19
По умолчанию

помогите =(
Mu$T@nG вне форума Ответить с цитированием
Старый 12.07.2010, 12:48   #18
Mu$T@nG
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 19
По умолчанию

всё ещё прошу помощи с этим заданием
Mu$T@nG вне форума Ответить с цитированием
Старый 19.07.2010, 12:28   #19
Mu$T@nG
Пользователь
 
Регистрация: 08.07.2010
Сообщений: 19
По умолчанию

задача актуальна
Mu$T@nG вне форума Ответить с цитированием
Старый 12.08.2010, 18:55   #20
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Если еще актуально, пишите на мыло black.fregat@gmail.com
Black Fregat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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