![]() |
Release HttpProxyServer
Вот собсна решил наваять и выложить на общий суд
-язык с+api -открывает 31337 порт -логов не ведет -весит мало ~10к (так я не понял откуда лишних 5к взялись а они лишние, точно) -исходники прилагаются HttpProxyServer |
несколько человек добавили в репу с примерно следующим коментарием
Цитата:
|
> причем тут блокнот это первый опыт в сетевом кодинге я просил посмотреть и высказать мнения, указать слабые места, показать как лучше.
НИКАК не лучше и НИКАК не хуже потому что это просто ПРОКСИ, сорцов которого полно в инете на каждом сайте. > -язык с+api поведуй, что это а язык такой c+api? хотя знаешь, тупости я в сорцах немного нашел. видимо это свойство интересного языка c+api, НО Код:
какой ещё GetDlgItemTextA() ? сделай флаг g_bStarted = TRUE/FALSE; и всё далее Код:
void CenterWindow(HWND hWnd)и вот это тупо тоже Код:
while(strncmp(cBuf+iResult-4,"\r\n\r\n",4));РАЗМЕР У тебя рантайм используется. Отключай #pragma comment(linker,"/entry:EntryPoint") void EntryPoint( void ) // точка входа в WM_COMMAND:IDCANCEL Код:
WSACleanup();а в обработчике WM_CLOSE делать ExitProcess() или PostQuitMessage( 0 ); ещё нужно вызывать TerminateThread( hThread, 0 ); иначе нахер ты сохраняешь хенлд созданого потока? и ещё, поставил бы ты таймауты на поток, обслуживающий клиент. |
Про размер я уже 100 раз писал! Больше писать не буду. Буду давать ссылку на свой пост на WASM.RU:
http://wasm.ru/forum/viewtopic.php?pid=188444#p188444 |
Код:
char *cHost=(char *)malloc(HOST_SIZE); |
блин, весь вечер убил на то чтобы перевести cpp>>delphi, людей подключил, в сё зря :mad:
исходник не работает на Delphi7 и как оказалось на срр тоже, все компилиться, врожде создаеться сервер, но при включении и использовании ничего не получаеться. переведенный исходник тут . исправь код! |
Цитата:
с HOST_SIZE+1 начанается переполнение стека и возможность выполнить произвольный код... причем сервер падает у меня при использовании Firefox'ом 2.0.0.4 при первом же запросе, и я даже не разбирался почему) |
Открыл код... сразу бросилась в глаза передача сокетов по ссылке.. вопрос - нафига?
Далее if(!strcmp(cStatServ,"Start Server")) это жесть. Ставить флаг быстрее будет Код:
struct sockaddr_in saddr;2) Нафига делать htonl(INADDR_ANY)? Тем более что inaddr_any=0 3) не sizeof(struct sockaddr), а sizeof(struct sockaddr_in). Код:
doКод:
struct sockaddr_in saddr; |
> 1) А кто очистит sin_zero ?
а его не надо очищать > 3) не sizeof(struct sockaddr), а sizeof(struct sockaddr_in). в Windows 95, 98, NT, XP и тд некритично. вообще обычно делаю sizeof( s_a ) где s_a типа sockaddr_in > 2) Нафига делать htonl(INADDR_ANY)? Тем более что inaddr_any=0 да это тупость) > if((saddr.sin_addr.s_addr=inet_addr("cHost"))==INA DDR_NONE) ага, это я не заметил... напоминает php ; ) А про переполнения отдельная тема.. везде где можно они есть) |
Цитата:
Цитата:
Цитата:
|
| Время: 21:15 |