beginthreadex(0, 0, AcceptConnections, (void*)RS_SSocket, 0, &ret);
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); char console_out = 'y'; char buf[64]; FILE* f = NULL; DWORD packet_res = 0; u_long watch_host = 0; DWORD packets_count = 0; unsigned int ret;#ifdef NET_SERVER_2000 InitializeCriticalSection(&critsect);#endif // инициализация RS_Init(); // проверка на успешность создания сокета if (RS_SSocket != SOCKET_ERROR) { //SetConsoleTextColor(0x0A); //printf("%s> %d\n", STR_SOCKET, RS_SSocket); //SetConsoleTextColor(0x07); } else { qDebug() << STR_CANT_CREATE_SOCKET; return; } f = fopen(RS_Hostname, "wt"); // Включение promiscuous mode RS_SetPromMode(1);#ifndef ALPHA watch_host = inet_addr("8080");#endif#ifdef NET_SERVER_2000 // запуск сервера - посылка трафика любому клиенту _beginthreadex(0, 0, AcceptConnections, (void*)RS_SSocket, 0, &ret);#endif RS_InitStat(); while(true) { IPHeader* hdr = RS_Sniff(); // обработка IP-пакета if (hdr) { char *packet_str = 0; packets_count++; // штамп времени time(&rawtime); timeinfo = localtime (&rawtime); // пакет в строку packet_str = RS_IPHeaderToStr(hdr);qDebug() << packet_str; /* подсветка */ SetConsoleTextColor(0x07); /*ColorPacket(hdr, RS_SocketAddress.sin_addr.s_addr, watch_host);*/ // печать заголовка IP-пакета// if (console_out == 'y')// {// SetConsoleTextColor(FOREGROUND_GREEN | FOREGROUND_BLUE /*| FOREGROUND_INTENSITY*/);// printf("%.2d:%.2d:%.2d>", timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec);// ColorPacket(hdr, RS_SocketAddress.sin_addr.s_addr, watch_host);// printf("%s", packet_str);// //for(int i = 0; i < CONSOLE_WIDTH - strlen(packet_str)-9; i++) printf(" ");// //printf("\n");// } // для посылки строки заголовка в сеть sCurrPacket = packet_str; bNewPacket = true; free((void*)packet_str); free((void*)hdr); if (packet_res > 0) Sleep(packet_res); } if(!PauseAndContinue()) break; }////////////////////////////////////////////////////////////////// // Конец работы RS_Free(); fclose(f);}
_beginthreadex(0, 0, AcceptConnections, (void*)RS_SSocket, 0, &ret);
AcceptConnections
unsigned __stdcall Connection(void* a){ Socket* s = (Socket*) a; if (a == NULL) return SOCKET_ERROR; while (1) { if (bNewPacket) { EnterCriticalSection(&critsect); s->SendLine(sCurrPacket+(char)13+(char)10); bNewPacket = false; LeaveCriticalSection(&critsect); } } delete s; return 0;}unsigned __stdcall AcceptConnections(void* a){ SocketServer in(2000, 20); while (1) { Socket* s = in.Accept(); unsigned ret; _beginthreadex(0, 0, Connection, (void*)s, 0, &ret); }}